Example #1
0
    def __init__(self, process=None):
        self.client = docker.from_env()
        db = DBI()
        db.connect()
        # DEFAULTS
        self.CONTAINER_NAME = db.getServerConfigByName('DOCKER_CONTAINER')
        self.INPUT_TARGET = db.getServerConfigByName('DOCKER_INPUTDIR')
        self.OUTPUT_TARGET = db.getServerConfigByName('DOCKER_OUTPUTDIR')
        self.OUTPUT = db.getServerConfigByName('DOCKER_OUTPUTFILE')
        # Load specific process configs if set
        self.process = process
        if process is not None:
            container = db.getServerConfigByName(
                db.getProcessField('container', process))
            if container is not None:
                self.CONTAINER_NAME = container

            input = db.getServerConfigByName(
                db.getProcessField('containerinputdir', process))
            if input is not None:
                self.INPUT_TARGET = input
            outputd = db.getServerConfigByName(
                db.getProcessField('containeroutputdir', process))
            if outputd is not None:
                self.OUTPUT_TARGET = outputd

            ofile = db.getServerConfigByName(
                db.getProcessField('filename', process))
            if ofile is not None:
                self.OUTPUT = ofile

        db.closeconn()
Example #2
0
 def __init__(self, process=None):
     self.client = docker.from_env()
     db = DBI()
     db.connect()
     self.CONTAINER_NAME = db.getServerConfigByName('DOCKER_CONTAINER')
     self.INPUT_TARGET = db.getServerConfigByName('DOCKER_INPUTDIR')
     self.OUTPUT_TARGET = db.getServerConfigByName('DOCKER_OUTPUTDIR')
     self.OUTPUT = db.getServerConfigByName('DOCKER_OUTPUTFILE')
     db.closeconn()
Example #3
0
class Config(ConfigPanel):
    def __init__(self, parent):
        super(Config, self).__init__(parent)
        self.parent = parent
        self.dbi = DBI()
        self.OnLoadData()

    def OnLoadData(self):
        self.dbi.connect()
        # load config values
        conf = self.dbi.getServerConfig()
        if conf is not None:
            rownum = 0
            for k in conf.keys():
                self.m_gridConfig.SetCellValue(rownum, 0, k)
                self.m_gridConfig.SetCellValue(rownum, 1, conf[k][0])
                if conf[k][1] is not None:
                    self.m_gridConfig.SetCellValue(rownum, 2, conf[k][1])
                rownum += 1
        self.dbi.closeconn()

    def OnSaveConfig(self, event):
        self.dbi.connect()
        # configid = self.cboConfigid.GetValue()
        configlist = []
        data = self.m_gridConfig.GetTable()
        for rownum in range(0, data.GetRowsCount()):
            if not data.IsEmptyCell(rownum, 0):
                configlist.append((self.m_gridConfig.GetCellValue(rownum, 0),
                                   self.m_gridConfig.GetCellValue(rownum, 1),
                                   self.m_gridConfig.GetCellValue(rownum, 2)))
        print('Saved settings:', configlist)
        # Save to DB
        cnt = self.dbi.addServerConfig(configlist)

        # notification
        msg = "Settings saved: %s" % cnt
        self.m_txtStatus.SetLabelText(msg)
        self.dbi.closeconn()

    def OnAddRow(self, event):
        self.m_gridConfig.AppendRows(1, True)

    def OnAddProcess(self, event):
        dlg = ProcessViewer(self)
        dlg.ShowModal()
        dlg.Destroy()
Example #4
0
class DicomThread(threading.Thread):
    def __init__(self, wxObject, filelist):
        threading.Thread.__init__(self)
        self.wxObject = wxObject
        self.filelist = filelist
        self.db = DBI()

    def run(self):
        print('Starting DICOM thread run')
        n = 1
        try:
            event.set()
            lock.acquire(True)
            for filename in self.filelist:
                try:
                    if not self.db.hasFile(filename):
                        dcm = pydicom.read_file(filename)
                        updatemsg = "Detecting DICOM data ... %d of %d" % (
                            n, len(self.filelist))
                        wx.PostEvent(self.wxObject, DataEvent((updatemsg, [])))
                        # self.m_status.SetLabelText(updatemsg)
                        n += 1

                        # Check DICOM header info
                        series_num = str(dcm.SeriesInstanceUID)
                        uuid = generateuid(series_num)
                        imagetype = str(dcm.ImageType[2])
                        dicomdata = {
                            'uuid': uuid,
                            'patientid': str(dcm.PatientID),
                            'patientname': str(dcm.PatientName),
                            'seriesnum': series_num,
                            'sequence': str(dcm.SequenceName),
                            'protocol': str(dcm.ProtocolName),
                            'imagetype': imagetype
                        }

                        if not self.db.hasUuid(uuid):
                            self.db.addDicomdata(dicomdata)
                        if not self.db.hasFile(filename):
                            self.db.addDicomfile(uuid, filename)

                except InvalidDicomError:
                    logging.warning("Not valid DICOM - skipping: ", filename)
                    continue
            ############## Load Series Info
            for suid in self.db.getUuids():
                numfiles = self.db.getNumberFiles(suid)
                item = [
                    True,
                    self.db.getDicomdata(suid, 'patientname'),
                    self.db.getDicomdata(suid, 'sequence'),
                    self.db.getDicomdata(suid, 'protocol'),
                    self.db.getDicomdata(suid, 'imagetype'),
                    str(numfiles),
                    self.db.getDicomdata(suid, 'seriesnum')
                ]
                wx.PostEvent(self.wxObject, DataEvent((suid, item)))
        except Exception as e:
            msg = 'ERROR encountered during DICOM thread: %s' % e.args[0]
        finally:
            n = len(self.db.getNewUuids())
            if n > 0:
                msg = "Total Series loaded: %d" % n
                logger.info(msg)
            elif len(self.db.getUuids()) > 0:
                msg = "Series already processed. Remove via Status Panel to repeat upload."
                logger.info(msg)
            else:
                logging.error(msg)
            if self.db.conn is not None:
                self.db.closeconn()

            wx.PostEvent(self.wxObject, DataEvent((msg, [])))
            # self.terminate()
            lock.release()
            event.clear()