def insertTumour()

in clns-eTarget_ingest/clinical_json.py [0:0]


    def insertTumour(self, personID, patientNumber, sample, diagnosis):
        if 'pdx' in sample and (sample['pdx']==True or (isinstance(sample['pdx'], str) and sample['pdx'].lower()=='true')):
            self.insertPDXCDX(personID, patientNumber, sample)
        if 'pdx' in sample and not isinstance(sample['pdx'], bool) and ((isinstance(sample['pdx'], str) and sample['pdx'].lower()!='true' and sample['pdx'].lower()!='false') or 
                                (isinstance(sample['pdx'], (int, float, complex)))):
            raise Exception('PDX value must be either true or false')
        
        pattern = re.compile("^Bx\d{1,2}$")
        if not re.match(pattern, sample['timePoint']):
            raise Exception('timepoint does not conform to pattern T[number]')
        print(sample['timePoint'])
        timepoint = sample['timePoint'][2:]
        print(timepoint)
        if sample['sampleType'].lower() == 'ffpe' or sample['sampleType'].lower() == 'snap' or sample['sampleType'].lower() ==  'fresh':
            specimenConceptID = '3'
        elif sample['sampleType'].lower() == 'archival':
            specimenConceptID = '2'
        else:
            self.log.systemStatusUpdate(self.filename, 'Clinical', self.log.timestamp(), 'Error: Data import failed (tumour sampleType not present, or value not supported)')
            self.log.logMessage('Error sampleType not present')
            self.errorflag=True
            return
        if 'sampleId' in sample and sample['sampleId']!='':
            sampleId = sample['sampleId']
        else:
            sampleId = patientNumber+sample['timePoint']
        try:
            specimenData = self.conn.cursor()
            if 'date' in sample and sample['date'] !='':
                tumourDate = self.formatDate(sample['date'])
                #specimenData.execute("UPDATE SPECIMEN SET specimen_date = '"+tumourDate+"', anatomic_site_id=(SELECT anatomy_concept_id FROM CONCEPT_ANATOMY WHERE anatomy_name = '"+patientDetails['primaryTumourType']+"') WHERE person_id="+str(personID)+" AND specimen_concept_id="+specimenConceptID)
            else :
                tumourDate =''
            specimenData.execute("SELECT * FROM SPECIMEN WHERE person_id="+str(personID)+" AND (preclin_id like '"+sampleId+"')");
            specimenDataRows = 0
            specimen=specimenData.fetchall()
            for row in specimen:
                specimenID=row[0]
                specimenDataRows = specimenDataRows+1
            # The record didn't exist to update, so let's add it now
            if specimenDataRows == 0:
                specimenData.execute("INSERT INTO SPECIMEN (person_id, specimen_date, specimen_concept_id, anatomic_site_id, preclin_id, baseline_number) VALUES('"+str(personID)+"', '"+tumourDate+"', "+str(specimenConceptID)+", (SELECT anatomy_concept_id FROM CONCEPT_ANATOMY WHERE anatomy_name = '"+diagnosis+"'), '"+sampleId+"',"+timepoint+")")
                specimenID = specimenData.lastrowid
            else:
                specimenData.execute("UPDATE SPECIMEN set specimen_concept_id="+str(specimenConceptID)+" ,specimen_date='"+tumourDate+"', preclin_id='"+sampleId+"', baseline_number="+timepoint+", anatomic_site_id= (SELECT TOP 1 anatomy_concept_id FROM CONCEPT_ANATOMY WHERE anatomy_name = '"+diagnosis+"') where specimen_id="+str(specimenID))

            #print(specimenDataID)
            self.log.logMessage('Specimen tumour ID '+str(specimenID)+' updated.')
            if 'siteOfBiobsy' in sample and sample['siteOfBiobsy']!= '':
                sample['siteOfBiobsy']=sample['siteOfBiobsy'].replace("'", "''")
                gdlData = self.conn.cursor()
                gdlSQL = "UPDATE GDL_REQUEST SET sample_type='"+sample['siteOfBiobsy']+"' WHERE specimen_id='"+str(specimenID)+"'"
                gdlData.execute(gdlSQL)
    
                if gdlData.rowcount == 0:
                    gdlSQL = "INSERT INTO GDL_REQUEST (path_lab_ref, specimen_id, sample_type) VALUES('', '"+str(specimenID)+"', '"+sample['siteOfBiobsy']+"')"
                    gdlData.execute(gdlSQL)

        except Exception as e:
            self.log.systemStatusUpdate(self.filename, 'Clinical', self.log.timestamp(), 'Error: Data import failed (tumour specimen) -- ' +patientNumber)
            self.log.logMessage('Error inserting/updating tumour specimen ' +patientNumber+"\n" + str(e))
            self.errorflag=True
            print(str(e))
            print(5)
            raise ClinicalDataException('Error inserting/updating tumour specimen')