From ff3fffcaf472a91e30ac1e8a7b4da1860d0bee79 Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Wed, 2 Sep 2026 12:21:59 -0400 Subject: [PATCH] Fix Biolink type lookup filters --- src/nameres/handlers/lookup.py | 8 +++++--- test/test_lookup_query.py | 25 ++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/nameres/handlers/lookup.py b/src/nameres/handlers/lookup.py index 541c9cf..a66624c 100644 --- a/src/nameres/handlers/lookup.py +++ b/src/nameres/handlers/lookup.py @@ -263,7 +263,9 @@ def _build_lookup_filters(self) -> dict: In this case we to boolean AND NOT specific different types of required fields we want to ensure `don't` exist in the results output """ - biolink_types = self.get_argument("biolink_types", default=[], strip=True) + + # to cover both the singular and plural biolink_type arguments, we combine them into a single list + biolink_types = [*self.get_arguments("biolink_types"), *self.get_arguments("biolink_type")] filter_delimiter = "|" @@ -295,8 +297,8 @@ def _build_lookup_filters(self) -> dict: # Elasticsearch should for biolink_type in biolink_types: biolink_type = biolink_type.strip() - if biolink_type is not None: - should_filter = {"term": {"biolink_types": biolink_type.remove("biolink:")}} + if biolink_type: + should_filter = {"term": {"biolink_types": biolink_type.removeprefix("biolink:")}} filters["should"].append(should_filter) # Prefix: only filter diff --git a/test/test_lookup_query.py b/test/test_lookup_query.py index 7da2c23..86de52e 100644 --- a/test/test_lookup_query.py +++ b/test/test_lookup_query.py @@ -1,4 +1,27 @@ -from nameres.handlers.lookup import LookupQuery, _build_elasticsearch_query +from unittest.mock import Mock + +from nameres.handlers.lookup import BaseNameResolutionLookupHandler, LookupQuery, _build_elasticsearch_query + + +def test_biolink_type_filters_accept_singular_and_plural_arguments(): + handler = Mock() + query_arguments = { + "biolink_types": ["biolink:Disease", " Gene "], + "biolink_type": ["biolink:PhenotypicFeature", " "], + } + handler.get_arguments.side_effect = lambda name: query_arguments.get(name, []) + handler.get_argument.side_effect = lambda _name, default, strip: default + + filters = BaseNameResolutionLookupHandler._build_lookup_filters(handler) + + assert filters == { + "should": [ + {"term": {"biolink_types": "Disease"}}, + {"term": {"biolink_types": "Gene"}}, + {"term": {"biolink_types": "PhenotypicFeature"}}, + ], + "must_not": [], + } def test_autocomplete_query_treats_final_term_as_prefix():