From 2b6135beaa1a736dceff2fce2edad15aad6d6b63 Mon Sep 17 00:00:00 2001 From: Eleftherios Zisis Date: Mon, 19 May 2025 12:01:52 +0200 Subject: [PATCH 1/2] Make read_one/read_many schemas consistent --- app/service/emodel.py | 26 +++++++++++++------------- tests/test_emodel.py | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/service/emodel.py b/app/service/emodel.py index 69f796c7..63a10c69 100644 --- a/app/service/emodel.py +++ b/app/service/emodel.py @@ -12,6 +12,7 @@ ETypeClass, ETypeClassification, IonChannelModel, + IonChannelModelToEModel, MTypeClass, MTypeClassification, ReconstructionMorphology, @@ -46,6 +47,11 @@ def _load(select: sa.Select[tuple[EModel]]): selectinload(EModel.contributions).joinedload(Contribution.role), joinedload(EModel.mtypes), joinedload(EModel.etypes), + selectinload(EModel.assets), + selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.species), + selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.strain), + selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.brain_region), + selectinload(EModel.ion_channel_models).selectinload(IonChannelModel.assets), raiseload("*"), ) @@ -55,23 +61,13 @@ def read_one( db: SessionDep, id_: uuid.UUID, ) -> EModelReadExpanded: - def _load_expanded(select: sa.Select[tuple[EModel]]): - return _load(select).options( - selectinload(EModel.assets), - selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.species), - selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.strain), - selectinload(EModel.ion_channel_models).joinedload(IonChannelModel.brain_region), - selectinload(EModel.ion_channel_models).selectinload(IonChannelModel.assets), - raiseload("*"), - ) - return router_read_one( id_=id_, db=db, db_model_class=EModel, authorized_project_id=user_context.project_id, response_schema_class=EModelReadExpanded, - apply_operations=_load_expanded, + apply_operations=_load, ) @@ -99,10 +95,12 @@ def read_many( with_search: SearchDep, facets: FacetsDep, in_brain_region: InBrainRegionDep, -) -> ListResponse[EModelRead]: +) -> ListResponse[EModelReadExpanded]: morphology_alias = aliased(ReconstructionMorphology, flat=True) + ion_channel_model_alias = aliased(IonChannelModel, flat=True) aliases: Aliases = { ReconstructionMorphology: morphology_alias, + IonChannelModel: ion_channel_model_alias, } name_to_facet_query_params: dict[str, FacetQueryParams] = { @@ -132,6 +130,8 @@ def filter_query_operations(q: sa.Select): .outerjoin(MTypeClass, MTypeClass.id == MTypeClassification.mtype_class_id) .outerjoin(ETypeClassification, EModel.id == ETypeClassification.entity_id) .outerjoin(ETypeClass, ETypeClass.id == ETypeClassification.etype_class_id) + .outerjoin(IonChannelModelToEModel, EModel.id == IonChannelModelToEModel.emodel_id) + .outerjoin(ion_channel_model_alias, ion_channel_model_alias.id == IonChannelModelToEModel.ion_channel_model_id) ) return router_read_many( @@ -145,7 +145,7 @@ def filter_query_operations(q: sa.Select): apply_filter_query_operations=filter_query_operations, apply_data_query_operations=_load, pagination_request=pagination_request, - response_schema_class=EModelRead, + response_schema_class=EModelReadExpanded, name_to_facet_query_params=name_to_facet_query_params, filter_model=emodel_filter, ) diff --git a/tests/test_emodel.py b/tests/test_emodel.py index 5e47a9df..4f8cd297 100644 --- a/tests/test_emodel.py +++ b/tests/test_emodel.py @@ -78,7 +78,7 @@ def test_query_emodel(client: TestClient, create_emodel_ids: CreateIds): assert len(data) == 11 assert "assets" in data[0] - assert "ion_channel_models" not in data[0] + assert "ion_channel_models" in data[0] def test_emodels_sorted(client: TestClient, create_emodel_ids: CreateIds): From c16f381561fec9bf39339df2021cdbb168bdb30f Mon Sep 17 00:00:00 2001 From: Eleftherios Zisis Date: Mon, 19 May 2025 12:09:57 +0200 Subject: [PATCH 2/2] Add missing change --- app/service/emodel.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/service/emodel.py b/app/service/emodel.py index 63a10c69..056b0af3 100644 --- a/app/service/emodel.py +++ b/app/service/emodel.py @@ -131,7 +131,10 @@ def filter_query_operations(q: sa.Select): .outerjoin(ETypeClassification, EModel.id == ETypeClassification.entity_id) .outerjoin(ETypeClass, ETypeClass.id == ETypeClassification.etype_class_id) .outerjoin(IonChannelModelToEModel, EModel.id == IonChannelModelToEModel.emodel_id) - .outerjoin(ion_channel_model_alias, ion_channel_model_alias.id == IonChannelModelToEModel.ion_channel_model_id) + .outerjoin( + ion_channel_model_alias, + ion_channel_model_alias.id == IonChannelModelToEModel.ion_channel_model_id, + ) ) return router_read_many(