Module Gnumed.business.gmDataMining
GNUmed data mining middleware.
Functions
def delete_report_definition(name=None)
-
Expand source code
def delete_report_definition(name=None): queries = [{ 'sql': 'DELETE FROM cfg.report_query WHERE label = %(name)s', 'args': {'name': name} }] gmPG2.run_rw_queries(queries=queries) return True
def report_exists(name=None)
-
Expand source code
def report_exists(name=None): rows = gmPG2.run_ro_queries(queries = [{ 'sql': 'SELECT EXISTS(SELECT 1 FROM cfg.report_query WHERE label = %(name)s)', 'args': {'name': name} }]) return rows[0][0]
def run_report_query(query=None, limit=None, pk_identity=None)
-
Expand source code
def run_report_query(query=None, limit=None, pk_identity=None): """Returns (status, hint, cols, rows)""" PATIENT_ID_TOKEN = '$<ID_ACTIVE_PATIENT>$' if limit is None: limit = '' else: limit = 'LIMIT %s' % limit # does user want to insert current patient ID ? if query.find(PATIENT_ID_TOKEN) == -1: wrapper_query = """ SELECT * FROM ( %%s ) AS user_query %s """ % limit else: # she does, but is it possible ? if pk_identity is None: gmDispatcher.send('statustext', msg = _('Query needs active patient.'), beep = True) cols = [_('Error')] rows = [ [_('Active patient query')], [''], [_('This query requires a patient to be active in the client.')], [''], [_('Please activate the patient you are interested')], [_('in and re-run the query.')] ] return (False, 'pk_identity', cols, rows) query = query.replace(PATIENT_ID_TOKEN, str(pk_identity)) wrapper_query = """ SELECT %s AS pk_patient, * FROM ( %%s ) AS user_query %s """ % (pk_identity, limit) wrapped_query = wrapper_query % query _log.debug('running report query:') _log.debug(wrapped_query) try: # read-only for safety reasons rows = gmPG2.run_ro_queries(queries = [{'sql': wrapped_query}]) except Exception: _log.exception('report query failed') gmDispatcher.send('statustext', msg = _('The query failed.'), beep = True) cols = [_('Error')] t, v = sys.exc_info()[:2] rows = [ [_('The query failed.')], [''], [str(t)] ] for line in str(v).split('\n'): rows.append([line]) rows.append(['']) for line in query.split('\n'): rows.append([line]) return (False, 'query failed', cols, rows) if rows: cols = list(rows[0].keys()) else: cols = [_('No results.')] return (True, None, cols, rows)
Returns (status, hint, cols, rows)
def save_report_definition(name=None, query=None, overwrite=False)
-
Expand source code
def save_report_definition(name=None, query=None, overwrite=False): if not overwrite: if report_exists(name=name): return False args = {'name': name, 'query': query} queries = [ {'sql': 'DELETE FROM cfg.report_query WHERE label = %(name)s', 'args': args}, {'sql': 'INSERT INTO cfg.report_query (label, cmd) VALUES (%(name)s, %(query)s)', 'args': args} ] gmPG2.run_rw_queries(queries = queries) return True