def __init__(self, queryServer=None): ##ugur self.rpclogger = createLogger('RPC') self.rpclogger.info('Starting JSONRPCServer') self.queryServer = queryServer self.queryManager = QueryManager( store=self.queryServer.createStore(), sources=self.queryServer.config.sources, plugins=self.queryServer.config.plugins)
def refresh_server_list(self, liststore, tab): """ Refreshes the Serverlist of a tab @param liststore - the liststore which contains the servers to be refreshed @param tab - the tab requesting the refresh """ Log.log.debug('[GuiController] refresh_server_list called...') qm = QueryManager() tab.set_querymanager(qm) qm.start_serverlist_refresh(liststore, tab)
def loadRecentServer(self, tab): """ Loads the list of recent servers from a file using the FileManager and update the serverlist on the requesting tab. All of this is done on background threads using the QueryManager @param tab - the tab requesting the recent server list """ Log.log.debug('[GuiController] loadRecentServer called...') gobject.idle_add(tab.clearServerList) qm = QueryManager() tab.set_querymanager(qm) qm.startRecentServersLoadingThread(tab)
def lookup_server(self, server, tab): """ This method performs a lookup of a certain server. Its like a search with the adress as paremeter so it clears the serverlist on the requesting tab and only adds the server object with the looked up data to the list afterwards. @param server - the server to be looked up @param tab - the requesting tab """ #clear the serverlist on the tab tab.serverlist.clear() #start the lookup in an extra thread using the querymanager qm = QueryManager() qm.lookup_server(server, tab)
def loadMasterServerList(self, serverlistfilter, tab): """ Loads the Serverlist from the masterserver. This method is executed in a background thread which is triggered by the executeMasterServerQuery method @param serverlistfilter - instance of the serverlistfilter profiding query and filter paramters @tab - the tab requesting the serverlist """ Log.log.debug('[GuiController] loadMasterServerList called...') #clear the current serverlist gobject.idle_add(tab.clearServerList) #perform the master server query qm = QueryManager() tab.set_querymanager(qm) qm.startMasterServerQueryThread(serverlistfilter, tab)
def migrate(self): if not os.path.isfile(self.dbFileName): return True encrypted = self.hasEncryptedDB() if encrypted: return True #move old db oldDBFilename = self.dbFileName + ".old.sqlite" os.rename(self.dbFileName, oldDBFilename) self.queryManagerOldDB = QueryManager(oldDBFilename,self.publicEncryptionKey, useAPSW=False) #create new db self.queryManagerNewDB = QueryManager(self.dbFileName,self.publicEncryptionKey, useAPSW=True) #self.queryManagerNewDB.executeQuery("INTO centreCodeResults = self.queryManagerOldDB.sendQuery("SELECT * FROM admission") #if we have no admissions we cannot get centre code. Data upgrade is useless (NO ADMISSIONS) if not len(centreCodeResults): return self.centreCode = centreCodeResults[0]['centreCode'] patientClassNames = ['firstName', 'lastName', 'gender', 'birthDate', 'placeOfBirth', 'nhsNumber', 'blood', 'address', 'ehrId'] self.queryManagerNewDB.sendQuery('BEGIN TRANSACTION') #ADMISSION TABLE print "Updating admission table" admissionItems = self.queryManagerOldDB.sendQuery("SELECT * FROM admission") newAdmissionItems = [] for admissionItem in admissionItems: newAdmissionItem = admissionItem newAdmissionItem['admissionKey'] = 'A-'+ newAdmissionItem['admissionKey'] newAdmissionItem['patientKey'] = 'P-'+ newAdmissionItem['patientKey'] if newAdmissionItem['previousAdmissionKey'] != '': newAdmissionItem['previousAdmissionKey'] = 'A-'+ newAdmissionItem['previousAdmissionKey'] newAdmissionItems.append(newAdmissionItem) queryAdmission = "INSERT INTO admission(localId, admissionKey, patientKey, centreCode, inputUserKey, inputDate, previousAdmissionKey) VALUES(:localId, :admissionKey, :patientKey, :centreCode, :inputUserKey, :inputDate, :previousAdmissionKey)" self.queryManagerNewDB.sendQuery(queryAdmission, bindingList=newAdmissionItems) #ADMISSION DELETED TABLE print "Updating admissionDeleted table" admissionDeletedItems = self.queryManagerOldDB.sendQuery("SELECT * FROM admissionDeleted") newAdmissionDeletedItems = [] if len (admissionDeletedItems): for admissionDeletedItem in admissionDeletedItems: newAdmissionDeletedItem = admissionDeletedItem newAdmissionDeletedItem['admissionKey'] = 'A-' + newAdmissionDeletedItem['admissionKey'] newAdmissionDeletedItem['centreCode'] = self.centreCode newAdmissionDeletedItems.append(newAdmissionDeletedItem) queryAdmissionDeleted = "INSERT INTO admissionDeleted (admissionKey, idReason, deleteUserKey, centreCode, deleteDate) VALUES (:admissionKey, :idReason, :deleteUserKey, :centreCode, :deleteDate)" self.queryManagerNewDB.sendQuery(queryAdmissionDeleted, bindingList=newAdmissionDeletedItems) #attributeData TABLE print "Updating attributeData table" attributeDataItems = self.queryManagerOldDB.sendQuery("SELECT * FROM attributeData ORDER BY inputDate") newAttributeDataItems = [] localId = 1 for attributeDataItem in attributeDataItems: newAttributeDataItem = attributeDataItem newAttributeDataItem['centreCode'] = self.centreCode newAttributeDataItem['value'] = str(newAttributeDataItem['value']) if newAttributeDataItem['className'] in patientClassNames: newAttributeDataItem['value'] = base64.b64encode(newAttributeDataItem['value']) else: newAttributeDataItem['value'] = base64.b64encode(newAttributeDataItem['value']) newAttributeDataItem['objectCode'] = newAttributeDataItem['objectCode'].split('-')[-1] newAttributeDataItem['localId'] = localId localId += 1 newAttributeDataItems.append(newAttributeDataItem) queryAttributeData = "INSERT INTO attributeData(objectCode, crfName, className, attributeName, value, multiInstanceNumber, inputUserKey, localId, centreCode, inputDate) VALUES (:objectCode, :crfName, :className, :attributeName, :value, :multiInstanceNumber, :inputUserKey, :localId, :centreCode, :inputDate)" self.queryManagerNewDB.sendQuery(queryAttributeData, bindingList=newAttributeDataItems) print "Updating crfStatus table" crfStatusItems = self.queryManagerOldDB.sendQuery("SELECT * FROM crfStatus") newCrfStatusItems = [] for crfStatusItem in crfStatusItems: newCrfStatusItem = crfStatusItem newCrfStatusItem['centreCode'] = self.centreCode newCrfStatusItem['admissionKey'] = 'A-' + newCrfStatusItem['admissionKey'] newCrfStatusItem['localId'] = 1 newCrfStatusItem['inputDate'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") newCrfStatusItems.append(newCrfStatusItem) queryCrfStatus = "INSERT INTO crfStatus (admissionKey, crfName, statusValue, crfVersion, centreCode, localId, inputDate) VALUES (:admissionKey, :crfName, :statusValue, :crfVersion, :centreCode, :localId, :inputDate)" self.queryManagerNewDB.sendQuery(queryCrfStatus, bindingList=newCrfStatusItems) #objectData TABLE print "Updating objectData table" objectDataItems = self.queryManagerOldDB.sendQuery("SELECT * FROM objectData") newObjectDataItems = [] for objectDataItem in objectDataItems: newObjectDataItem = objectDataItem newObjectDataItem['objectCode'] = newObjectDataItem['localId'] newObjectDataItem['centreCode'] = self.centreCode if newObjectDataItem['className'] in patientClassNames: newObjectDataItem['externalKey'] = "P-" + newObjectDataItem['externalKey'] else: newObjectDataItem['externalKey'] = "A-" + newObjectDataItem['externalKey'] newObjectDataItems.append(newObjectDataItem) queryObjectData = "INSERT INTO objectData(objectCode, multiInstanceNumber, idActionReason, externalKey, crfName, className, inputUserKey, inputDate, centreCode, crfVersion) VALUES (:objectCode, :multiInstanceNumber, :idActionReason, :externalKey, :crfName, :className, :inputUserKey, :inputDate, :centreCode, :crfVersion)" self.queryManagerNewDB.sendQuery(queryObjectData, bindingList=newObjectDataItems) #patient TABLE print "Updating patient table" patientItems = self.queryManagerOldDB.sendQuery("SELECT * FROM patient") newPatientItems = [] for patientItem in patientItems: newPatientItem = patientItem newPatientItem['patientKey'] = 'P-'+ newPatientItem['patientKey'] newPatientItems.append(newPatientItem) queryPatient = "INSERT INTO patient(localId, patientKey, centreCode, inputUserKey, inputDate) VALUES(:localId, :patientKey, :centreCode, :inputUserKey, :inputDate)" self.queryManagerNewDB.sendQuery(queryPatient, bindingList=newPatientItems) self.queryManagerNewDB.sendQuery('COMMIT TRANSACTION')