From 46dd9e89c835c7052050bc704187cbcda169e616 Mon Sep 17 00:00:00 2001 From: sweng66 Date: Thu, 3 Oct 2024 00:00:52 -0700 Subject: [PATCH] fixed to missing data for 'authors', 'mod_corpus_associations', 'mesh_terms', and 'obsolete_references' --- .../api/crud/reference_crud.py | 13 +++---- .../api/crud/reference_utils.py | 38 ++++++++++--------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/agr_literature_service/api/crud/reference_crud.py b/agr_literature_service/api/crud/reference_crud.py index 5884d3fc5..9b92d0715 100644 --- a/agr_literature_service/api/crud/reference_crud.py +++ b/agr_literature_service/api/crud/reference_crud.py @@ -427,14 +427,13 @@ def show(db: Session, curie_or_reference_id: str): # noqa mod_reference_type_id=ref_mod_referencetype.reference_mod_referencetype_id, reference_type=ref_mod_referencetype.mod_referencetype.referencetype.label, mod_abbreviation=ref_mod_referencetype.mod_referencetype.mod.abbreviation))) - if "obsolete_reference" in reference_data: - reference_data["obsolete_references"] = [obs_reference["curie"] for obs_reference in - reference_data["obsolete_reference"]] - del reference_data["obsolete_reference"] + reference_data["obsolete_references"] = [obs_reference["curie"] for obs_reference in + reference_data["obsolete_reference"]] + del reference_data["obsolete_reference"] # So thisis wierd, we check reference.mod_corpus_association BUT # use reference_data["mod_corpus_association"] - if reference.mod_corpus_association and "mod_corpus_association" in reference_data: + if reference.mod_corpus_association: for i in range(len(reference_data["mod_corpus_association"])): del reference_data["mod_corpus_association"][i]["reference_id"] reference_data["mod_corpus_association"][i]["mod_abbreviation"] = reference_data[ @@ -451,12 +450,12 @@ def show(db: Session, curie_or_reference_id: str): # noqa reference_data["workflow_tags"].append(ont_json) - if reference.mesh_term and "mesh_term" in reference_data: + if reference.mesh_term: for mesh_term in reference_data["mesh_term"]: del mesh_term["reference_id"] reference_data['mesh_terms'] = reference_data['mesh_term'] - if reference.author and "author" in reference_data: + if reference.author: authors = [] for author in reference_data["author"]: del author["reference_id"] diff --git a/agr_literature_service/api/crud/reference_utils.py b/agr_literature_service/api/crud/reference_utils.py index 8838cf7b0..6e0e2ae2f 100644 --- a/agr_literature_service/api/crud/reference_utils.py +++ b/agr_literature_service/api/crud/reference_utils.py @@ -4,7 +4,7 @@ from fastapi import HTTPException, status from sqlalchemy import or_ -from sqlalchemy.orm import Session, Load +from sqlalchemy.orm import Session, subqueryload, joinedload from agr_literature_service.api.models import ReferenceModel, ObsoleteReferenceModel, ReferencefileModel @@ -108,23 +108,27 @@ def get_reference(db: Session, curie_or_reference_id: str, load_referencefiles: load_authors: bool = False, load_mod_corpus_associations: bool = False, load_mesh_terms: bool = False, load_obsolete_references: bool = False): reference_id = int(curie_or_reference_id) if curie_or_reference_id.isdigit() else None - options = None + options = [] query = db.query(ReferenceModel) - if load_referencefiles or load_authors or load_mod_corpus_associations or load_mesh_terms or \ - load_obsolete_references: - options = Load(ReferenceModel) - if load_referencefiles: - options.subqueryload(ReferenceModel.referencefiles).subqueryload( - ReferencefileModel.referencefile_mods) - if load_authors: - options.joinedload(ReferenceModel.author) - if load_mod_corpus_associations: - options.joinedload(ReferenceModel.mod_corpus_association) - if load_mesh_terms: - options.joinedload(ReferenceModel.mesh_term) - if load_obsolete_references: - options.joinedload(ReferenceModel.obsolete_reference) - query = query.options(options) + + if load_referencefiles: + options.append(subqueryload(ReferenceModel.referencefiles).subqueryload(ReferencefileModel.referencefile_mods)) + + if load_authors: + options.append(joinedload(ReferenceModel.author)) + + if load_mod_corpus_associations: + options.append(joinedload(ReferenceModel.mod_corpus_association)) + + if load_mesh_terms: + options.append(joinedload(ReferenceModel.mesh_term)) + + if load_obsolete_references: + options.append(joinedload(ReferenceModel.obsolete_reference)) + + if options: + query = query.options(*options) + reference = query.filter(or_(ReferenceModel.curie == curie_or_reference_id, ReferenceModel.reference_id == reference_id)).one_or_none() if reference is None and reference_id is None: