Module Gnumed.business.gmArriba
GNUmed <-> arriba coupling.
The API definition was provided by Thomas Scheithauer thomas.scheithauer@gmx.net.
The GNUmed project is NOT authorized to share the actual interface specs so you need to get in contact with Thomas in order to re-implement the interface.
Note that that official casing is "arriba" rather than "ARRIBA" or "Arriba".
Classes
class cArriba
-
Expand source code
class cArriba(object): _date_format = '%d%m%Y' def __init__(self): self.path_to_binary = None self.pdf_result = None self.xml_result = None #-------------------------------------------------------- # internal helpers #-------------------------------------------------------- def __detect_binary(self): if self.path_to_binary is not None: return True found, cmd = gmShellAPI.find_first_binary(binaries = [ r'/usr/local/bin/arriba', r'/usr/bin/arriba', r'arriba', r'arriba.exe' # r'c:\programs\freediams\freediams.exe', # r'freediams.exe' ]) if found: self.path_to_binary = cmd return True # try: # self.custom_path_to_binary # except AttributeError: # _log.error('cannot find FreeDiams binary, no custom path set') # return False # found, cmd = gmShellAPI.detect_external_binary(binary = self.custom_path_to_binary) # if found: # self.path_to_binary = cmd # return True _log.error('cannot find arriba binary') return False #-------------------------------------------------------- def __write_config_file(self, patient=None): xml = """<?xml version="1.0" encoding="UTF-8"?> <konsultation version="1.1" xmlns="https://gpzk.de/ns/arriba/start-konfiguration"> <parameter> %s <idle-timeout>0</idle-timeout> </parameter> <speicherorte> <status>%s</status> <ergebnis-xml>%s</ergebnis-xml> <ergebnis-pdf>%s</ergebnis-pdf> </speicherorte> </konsultation> """ if patient is None: pat_xml = '' else: active_name = patient.get_active_name() pat_xml = """<vorname>%s%s</vorname> <nachname>%s</nachname> <geschlecht>%s</geschlecht> <geburtsdatum>%s</geburtsdatum>""" % ( active_name['firstnames'], gmTools.coalesce(active_name['preferred'], '', ' (%s)'), active_name['lastnames'], gmXdtMappings.map_gender_gm2xdt[patient['gender']], patient.get_formatted_dob(format = cArriba._date_format, none_string = '00009999') ) fname_cfg = gmTools.get_unique_filename(prefix = 'gm2arriba-', suffix = '.xml') fname_status = gmTools.get_unique_filename(prefix = 'arriba2gm_status-', suffix = '.xml') self.xml_result = gmTools.get_unique_filename(prefix = 'arriba2gm_result-', suffix = '.xml') self.pdf_result = gmTools.get_unique_filename(prefix = 'arriba2gm_result-', suffix = '.pdf') xml_file = open(fname_cfg, mode = 'wt', encoding = 'utf8', errors = 'replace') xml_file.write (xml % ( pat_xml, fname_status, self.xml_result, self.pdf_result )) xml_file.close() return fname_cfg #-------------------------------------------------------- # external API #-------------------------------------------------------- def run(self, patient=None, debug=False): self.pdf_result = None cfg_file = self.__write_config_file(patient = patient) # FIXME: add user-configured path if not self.__detect_binary(): return False args = ( self.path_to_binary, '--file=%s' % cfg_file, '--show-cli-pane=%s' % gmTools.bool2subst(debug, 'true', 'false') ) try: subprocess.check_call(args = args, close_fds = True) except (OSError, ValueError, subprocess.CalledProcessError): _log.exception('there was a problem executing [%s]', self.path_to_binary) gmDispatcher.send(signal = 'statustext', msg = _('Cannot run [arriba] !'), beep = True) return False try: open(self.pdf_result).close() except Exception: _log.exception('error accessing [%s]', self.pdf_result) gmDispatcher.send(signal = 'statustext', msg = _('No [arriba] result found in [%s].') % self.pdf_result, beep = False) return False return True
Methods
def run(self, patient=None, debug=False)
-
Expand source code
def run(self, patient=None, debug=False): self.pdf_result = None cfg_file = self.__write_config_file(patient = patient) # FIXME: add user-configured path if not self.__detect_binary(): return False args = ( self.path_to_binary, '--file=%s' % cfg_file, '--show-cli-pane=%s' % gmTools.bool2subst(debug, 'true', 'false') ) try: subprocess.check_call(args = args, close_fds = True) except (OSError, ValueError, subprocess.CalledProcessError): _log.exception('there was a problem executing [%s]', self.path_to_binary) gmDispatcher.send(signal = 'statustext', msg = _('Cannot run [arriba] !'), beep = True) return False try: open(self.pdf_result).close() except Exception: _log.exception('error accessing [%s]', self.pdf_result) gmDispatcher.send(signal = 'statustext', msg = _('No [arriba] result found in [%s].') % self.pdf_result, beep = False) return False return True