From d2b3826a8026cdb5faf90e33f5fb88ae3a63a94f Mon Sep 17 00:00:00 2001 From: Viktor Bozhinov Date: Thu, 9 Dec 2021 15:47:48 +0000 Subject: [PATCH] only create a single include filter object per nested include #259 --- .../src/search_api/query_filter_factory.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/datagateway_api/src/search_api/query_filter_factory.py b/datagateway_api/src/search_api/query_filter_factory.py index e9ef1c4d..b7d77dda 100644 --- a/datagateway_api/src/search_api/query_filter_factory.py +++ b/datagateway_api/src/search_api/query_filter_factory.py @@ -131,8 +131,8 @@ def get_include_filter(filter_input): query_filters = [] for related_model in filter_input: included_entity = related_model["relation"] - query_filters.append(SearchAPIIncludeFilter(included_entity)) + nested_include = False if "scope" in related_model: # Scope filter can have WHERE, INCLUDE, LIMIT and SKIP filters scope_query_filters = SearchAPIQueryFilterFactory.get_query_filter( @@ -146,8 +146,19 @@ def get_include_filter(filter_input): SearchAPIQueryFilterFactory.prefix_where_filter_field_with_entity_name( # noqa: B950 scope_query_filter, included_entity, ) + if isinstance(scope_query_filter, SearchAPIIncludeFilter): + nested_include = True + included_filter = scope_query_filter.included_filters[0] + + scope_query_filter.included_filters[ + 0 + ] = f"{included_entity}.{included_filter}" + query_filters.extend(scope_query_filters) + if not nested_include: + query_filters.append(SearchAPIIncludeFilter(included_entity)) + return query_filters @staticmethod