def search(country, level1='', level2='', level3='', level4='', auto=False, dbsession=None): assert dbsession country_id = EK._id(country.strip(), dbsession, '@REGION', auto) level1_id = EK._id(level1.strip(), dbsession, '@REGION', auto) level2_id = EK._id(level2.strip(), dbsession, '@REGION', auto) level3_id = EK._id(level3.strip(), dbsession, '@REGION', auto) level4_id = EK._id(level4.strip(), dbsession, '@REGION', auto) q = Location.query(dbsession).filter( and_(Location.country_id == country_id, Location.level1_id == level1_id, Location.level2_id == level2_id, Location.level3_id == level3_id, Location.level4_id == level4_id) ) r = q.all() if len(r) == 0 and auto: location = Location( country_id = country_id, level1_id = level1_id, level2_id = level2_id, level3_id = level3_id, level4_id = level4_id ) dbsession.add( location ) dbsession.flush([location]) return location return r[0]
def search(code, session): """ provide case-insensitive search for marker code """ if '/' in code: species, code = code.split('/') if callable(session): session = session() species_id = EK._id(species, dbsession=session) q = Marker.query(session).filter( func.lower(Marker.code) == func.lower(code), Marker.species_id == species_id) else: q = Marker.query(session).filter( func.lower(Marker.code) == func.lower(code) ) return q.one()
def update(self, obj): if type(obj) == dict: if obj.get('storage') is not None: self.storage = obj.get('storage') # blood storage if obj.get('method') is not None: self.method = obj.get('method') # blood withdrawal method if obj.get('pcr_method') is not None: self.pcr_method_id = EK._id(obj.get('pcr_method'), grp = '@PCR_METHOD', dbsession = object_session(self), auto=True) if obj.get('pcr') is not None: self.pcr = obj.get('pcr') if obj.get('microscopy') is not None: self.microscopy = obj.get('microscopy') if obj.get('type') is not None: self.type = obj.get('type') if obj.get('day') is not None: self.day = int(obj.get('day')) if self.day == 0 and self.type == '': self.type = 'P' if obj.get('case_detection') is not None: self.passive_case_detection = obj.get('case_detection').lower().startswith('y') if obj.get('symptomatic_status') is not None: self.symptomatic_status = obj.get('symptomatic_status').lower().startswith('y') if obj.get('nationality_status') is not None: self.nationality_status = obj.get('nationality_status').lower().startswith('y') if obj.get('imported_case') is not None: self.imported_case = obj.get('imported_case').lower().startswith('y') if obj.get('parasite_density') is not None: self.parasitemia = int(obj.get('parasite_density', -1)) # deals with subject subject_code = obj.get('subject_code', None) related_sample = obj.get('related_sample', None) session = object_session(self) if subject_code: # find subject subject = Subject.search(code=subject_code, dbsession = session) self.subject_id = subject.id elif related_sample: # find sample sample = self.batch.search_sample(related_sample) if sample is None: raise RuntimeError('ERROR for sample code %s: related sample code %s does not exist' % (self.code, related_sample)) self.subject_id = sample.subject_id elif not self.subject: # create new subject while True: code = '#' + random_string(8) # we need to check subject code first ! if Subject.query(session).filter(Subject.code == code).count() == 0: break subject = Subject( code = code, gender = obj['gender'], yearofbirth = obj['yearofbirth'] ) session.add(subject) subject.update( obj ) session.flush([subject]) cerr('subject %s nationality_id %d' % (subject.code, subject.nationality_id)) self.subject = subject #self.subject_id = 0 # now if subject_code & else: raise NotImplementedError('PROG/ERR - not implemented yet') super().update( obj ) return
def update(self, obj): if type(obj) == dict: if obj.get('storage') is not None: self.storage = obj.get('storage') # blood storage if obj.get('method') is not None: self.method = obj.get('method') # blood withdrawal method if obj.get('pcr_method') is not None: self.pcr_method_id = EK._id(obj.get('pcr_method'), grp = '@PCR_METHOD', dbsession = object_session(self), auto=True) if obj.get('pcr') is not None: self.pcr = obj.get('pcr') if obj.get('microscopy') is not None: self.microscopy = obj.get('microscopy') if obj.get('type') is not None: self.type = obj.get('type') if obj.get('day') is not None: self.day = int(obj.get('day')) if self.day == 0 and self.type == '': self.type = 'P' if obj.get('case_detection') is not None: self.passive_case_detection = obj.get('case_detection').lower().startswith('y') if obj.get('symptomatic_status') is not None: self.symptomatic_status = obj.get('symptomatic_status').lower().startswith('y') if obj.get('nationality_status') is not None: self.nationality_status = obj.get('nationality_status').lower().startswith('y') if obj.get('imported_case') is not None: self.imported_case = obj.get('imported_case').lower().startswith('y') if obj.get('parasite_density') is not None: self.parasitemia = int(obj.get('parasite_density', -1)) # deals with subject subject_code = obj.get('subject_code', None) related_sample = obj.get('related_sample', None) session = object_session(self) if subject_code: # find subject subject = Subject.search(code=subject_code, dbsession = session) self.subject_id = subject.id elif related_sample: # find sample sample = self.batch.search_sample(related_sample) if sample is None: raise RuntimeError('ERROR for sample code %s: related sample code %s does not exist' % (self.code, related_sample)) self.subject_id = sample.subject_id elif not self.subject: # create new subject while True: code = '#' + random_string(8) # we need to check subject code first ! if Subject.query(session).filter(Subject.code == code).count() == 0: break subject = Subject( code = code, gender = obj['gender'], yearofbirth = obj['yearofbirth'] ) session.add(subject) subject.update( obj ) session.flush([subject]) cerr('subject %s nationality_id %d' % (subject.code, subject.nationality_id)) self.subject = subject #self.subject_id = 0 # now if subject_code & else: raise NotImplementedError('PROG/ERR - not implemented yet') super().update( obj ) return if obj.passive_case_detection is not None: self.passive_case_detection = obj.passive_case_detection if obj.storage_id is not None: self.storage_id = 0 #obj.storage_id if obj.method_id is not None: self.method_id = 0 #obj.method_id if obj.pcr_method_id is not None: self.pcr_method_id = 0 #obj.pcr_method_id if obj.pcr_id is not None: self.pcr_id = 0 #obj.pcr_id if obj.microscopy_id is not None: self.microscopy_id = 0 #obj.microscopy_id if obj.recurent is not None: self.recurrent = obj.recurrent if obj.subject_is: self.subject_id = obj.subject_id