From 4bb65e7829f78ba521a06e11d0c69697b8cb2be9 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis <charismiadis@fogus.gr> Date: Thu, 21 Nov 2024 17:41:44 +0200 Subject: [PATCH] substitute mongo projection in Discover with dictionary filtering --- .../service_apis/core/discoveredapis.py | 18 ++++++++++++++++-- .../service_apis/vendor_specific.py | 10 +++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/discoveredapis.py b/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/discoveredapis.py index 6ab0c458..f406a1e4 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/discoveredapis.py +++ b/services/TS29222_CAPIF_Discover_Service_API/service_apis/core/discoveredapis.py @@ -8,6 +8,18 @@ import json from ..vendor_specific import find_attribute_in_body, filter_apis_with_vendor_specific_params +def filter_fields(vs_filtered_apis): + key_filter = [ + "api_name", "api_id", "aef_profiles", "description", + "supported_features", "shareable_info", "service_api_category", + "api_supp_feats", "pub_api_path", "ccf_id" + ] + field_filtered_api = {} + for key in vs_filtered_apis.keys(): + if key in key_filter or 'vendorSpecific' in key: + field_filtered_api[key] = vs_filtered_apis[key] + return field_filtered_api + class DiscoverApisOperations(Resource): def get_discoveredapis(self, api_invoker_id, query_params): @@ -56,17 +68,19 @@ class DiscoverApisOperations(Resource): discoved_apis = services.find(my_query, {"_id":0}) json_docs = [] for discoved_api in discoved_apis: + current_app.logger.debug(discoved_api) vendor_specific_fields_path = find_attribute_in_body(discoved_api, '') if vend_spec_query_params_n_values and vendor_specific_fields_path: vs_filtered_apis = filter_apis_with_vendor_specific_params(discoved_api, vend_spec_query_params_n_values, vendor_specific_fields_path) if vs_filtered_apis: - json_docs.append(vs_filtered_apis) + json_docs.append(filter_fields(vs_filtered_apis)) else: - json_docs.append(discoved_api) + json_docs.append(filter_fields(discoved_api)) if len(json_docs) == 0: return not_found_error(detail="API Invoker " + api_invoker_id + " has no API Published that accomplish filter conditions", cause="No API Published accomplish filter conditions") + apis_discovered = DiscoveredAPIs(service_api_descriptions=json_docs) res = make_response(object=serialize_clean_camel_case(apis_discovered), status=200) return res diff --git a/services/TS29222_CAPIF_Discover_Service_API/service_apis/vendor_specific.py b/services/TS29222_CAPIF_Discover_Service_API/service_apis/vendor_specific.py index d30faf3e..0bb95533 100644 --- a/services/TS29222_CAPIF_Discover_Service_API/service_apis/vendor_specific.py +++ b/services/TS29222_CAPIF_Discover_Service_API/service_apis/vendor_specific.py @@ -55,7 +55,6 @@ def add_vend_spec_fields(vendor_specific, serviceapidescription_dict): return tmp_body def filter_apis_with_vendor_specific_params(discoved_api, vend_spec_query_params_n_values, vendor_specific_fields_path): - json_docs = [] for k, v in vend_spec_query_params_n_values.items(): parts = k.split('.') for path in vendor_specific_fields_path: @@ -68,8 +67,9 @@ def filter_apis_with_vendor_specific_params(discoved_api, vend_spec_query_params path_piece = int(path_piece) v_2 = tmp_body[path_piece] tmp_body = v_2 - # Check if parameter exists in the field attributes!!!! if parts[1] in tmp_body[vs_field].keys(): - if tmp_body[vs_field][parts[1]] == v: - json_docs.append(discoved_api) - return json_docs \ No newline at end of file + if tmp_body[vs_field][parts[1]] != v: + return {} + else: + return {} + return discoved_api \ No newline at end of file -- GitLab