Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
    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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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')