From 50e8a82bf5343c01f3b7b280cd6b414c33e146e9 Mon Sep 17 00:00:00 2001 From: rmanaem Date: Fri, 11 Oct 2024 16:34:28 -0400 Subject: [PATCH] Implemented `pipeline_name` and `pipeline_version` query params --- app/api/crud.py | 10 ++++++++++ app/api/models.py | 3 +++ app/api/routers/query.py | 2 ++ tests/conftest.py | 8 ++++++++ 4 files changed, 23 insertions(+) diff --git a/app/api/crud.py b/app/api/crud.py index b22237e..cc7f2da 100644 --- a/app/api/crud.py +++ b/app/api/crud.py @@ -42,6 +42,8 @@ async def get( min_num_phenotypic_sessions: int, assessment: str, image_modal: str, + pipeline_name: str, + pipeline_version: str, node_urls: list[str], ) -> dict: """ @@ -67,6 +69,10 @@ async def get( Non-imaging assessment completed by subjects. image_modal : str Imaging modality of subject scans. + pipeline_name : str + Name of pipeline run on subject scans. + pipeline_version : str + Version of pipeline run on subject scans. node_urls : list[str] List of Neurobagel nodes to send the query to. @@ -101,6 +107,10 @@ async def get( params["assessment"] = assessment if image_modal: params["image_modal"] = image_modal + if pipeline_name: + params["pipeline_name"] = pipeline_name + if pipeline_version: + params["pipeline_version"] = pipeline_version tasks = [ util.send_get_request(node_url + "query", params) diff --git a/app/api/models.py b/app/api/models.py index 0627f72..81cb48c 100644 --- a/app/api/models.py +++ b/app/api/models.py @@ -21,6 +21,8 @@ class QueryModel(BaseModel): min_num_phenotypic_sessions: int = None assessment: str = None image_modal: str = None + pipeline_name: str = None + pipeline_version: str = None # TODO: Replace default value with union of local and public nodes once https://github.com/neurobagel/federation-api/issues/28 is merged # syntax from https://github.com/tiangolo/fastapi/issues/4445#issuecomment-1117632409 node_url: list[str] | None = Field(Query(default=[])) @@ -39,6 +41,7 @@ class CohortQueryResponse(BaseModel): num_matching_subjects: int subject_data: Union[list[dict], str] image_modals: list + available_pipelines: dict class NodesResponseStatus(str, Enum): diff --git a/app/api/routers/query.py b/app/api/routers/query.py index 15f1e4b..1b136c0 100644 --- a/app/api/routers/query.py +++ b/app/api/routers/query.py @@ -73,6 +73,8 @@ async def get_query( query.min_num_phenotypic_sessions, query.assessment, query.image_modal, + query.pipeline_name, + query.pipeline_version, query.node_url, ) diff --git a/tests/conftest.py b/tests/conftest.py index 9f9cba4..21e9524 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -85,4 +85,12 @@ def mocked_single_matching_dataset_result(): "http://purl.org/nidash/nidm#T1Weighted", "http://purl.org/nidash/nidm#T2Weighted", ], + "available_pipelines": { + "https://github.com/nipoppy/pipeline-catalog/tree/main/processing/fmriprep": [ + "23.1.3" + ], + "https://github.com/nipoppy/pipeline-catalog/tree/main/processing/freesurfer": [ + "7.3.2" + ], + }, }