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')