def get_phenotype_evidence(locus_id, phenotype_id, observable_id, chemical_id, reference_id, with_children): query = DBSession.query(Phenotypeevidence) if locus_id is not None: query = query.filter_by(locus_id=locus_id) if reference_id is not None: query = query.filter_by(reference_id=reference_id) if phenotype_id is not None: query = query.filter_by(phenotype_id=phenotype_id) if observable_id is not None: if with_children: phenotype_ids = set() for new_observable_id in list(get_all_bioconcept_children(observable_id)): phenotype_ids.update([x.id for x in DBSession.query(Phenotype.id).filter_by(observable_id=new_observable_id).all()]) else: phenotype_ids = set([x.id for x in DBSession.query(Phenotype.id).filter_by(observable_id=observable_id).all()]) phenotype_ids = list(phenotype_ids) num_chunks = int(ceil(1.0*len(phenotype_ids)/500)) evidences = [] for i in range(num_chunks): subquery = query.filter(Phenotypeevidence.phenotype_id.in_(phenotype_ids[i*500:(i+1)*500])) if len(evidences) + subquery.count() > query_limit: return None evidences.extend(subquery.all()) return evidences if chemical_id is not None: chemical_evidence_ids = list(set([x.evidence_id for x in DBSession.query(Chemicalproperty).filter_by(bioitem_id=chemical_id).all()])) num_chunks = int(ceil(1.0*len(chemical_evidence_ids)/500)) evidences = [] for i in range(num_chunks): subquery = query.filter(Phenotypeevidence.id.in_(chemical_evidence_ids[i*500:(i+1)*500])) if len(evidences) + subquery.count() > query_limit: return None evidences.extend(subquery.all()) return evidences else: if query.count() > query_limit: return None return query.all()
def get_go_evidence(locus_id, go_id, reference_id, with_children): query = DBSession.query(Goevidence) if locus_id is not None: query = query.filter_by(locus_id=locus_id) if reference_id is not None: query = query.filter_by(reference_id=reference_id) if go_id is not None: if with_children: child_ids = list(get_all_bioconcept_children(go_id)) num_chunks = int(ceil(1.0*len(child_ids)/500)) evidences = [] for i in range(num_chunks): subquery = query.filter(Goevidence.go_id.in_(child_ids[i*500:(i+1)*500])) if len(evidences) + subquery.count() > query_limit: return None evidences.extend([x for x in subquery.all()]) return evidences else: query = query.filter_by(go_id=go_id) if query.count() > query_limit: return None return query.all()