Example #1
0
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()
Example #2
0
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()