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 6f9b0651c44e000b53cac0648634fe4661c0c22c..119cf4a218d600bf95c664ee65fdf302bda737f0 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 @@ -80,7 +80,7 @@ class DiscoverApisOperations(Resource): if "vend-spec" in param: vend_param = param.split("vend-spec-")[1] attribute_path = query_params[param]["target"].split('/') - vend_spec_query_params_n_values[attribute_path[1] + "." + vend_param] = query_params[param]["value"] + vend_spec_query_params_n_values[".".join(attribute_path[1:]) + "." + vend_param] = query_params[param]["value"] elif param in ["api_version", "comm_type", "protocol", "aef_id", "data_format"]: my_params.append(json.loads(query_params_name[param].replace("QPV", query_params[param]))) else: @@ -102,9 +102,10 @@ class DiscoverApisOperations(Resource): vendor_specific_fields_path = find_attribute_in_body(discoved_api, '') if vendor_specific_fields_path: if vend_spec_query_params_n_values: - 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(filter_fields(vs_filtered_apis)) + pass_filter = filter_apis_with_vendor_specific_params(discoved_api, + vend_spec_query_params_n_values) + if pass_filter: + json_docs.append(filter_fields(discoved_api)) else: json_docs.append(filter_fields(discoved_api)) else: 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 f7a71ebb339d1e0b874b1824724d05de12a114c6..2314139355b976db35888adf27692e652385d73c 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 @@ -1,5 +1,5 @@ import re - +from flask import current_app def find_attribute_in_body(test, path): f_key = [] @@ -70,22 +70,26 @@ def remove_vendor_specific_fields(discoved_api, vendor_specific_fields_path): return discoved_api -def filter_apis_with_vendor_specific_params(discoved_api, vend_spec_query_params_n_values, vendor_specific_fields_path): +def nested_key_exists(dictionary, keys): + """ + Checks if a nested path of keys exists in a dictionary. + """ + _dict = dictionary + for key in keys: + if isinstance(_dict, dict) and key in _dict: + _dict = _dict[key] + else: + return False, -1 + return True, _dict + + +def filter_apis_with_vendor_specific_params(discoved_api, vend_spec_query_params_n_values): + pass_filter = True for k, v in vend_spec_query_params_n_values.items(): parts = k.split('.') - for path in vendor_specific_fields_path: - if parts[0] in path: - path_pieces = path.split('.') - tmp_body = discoved_api - vs_field = path_pieces[-1] - for path_piece in path_pieces[:-1]: - if path_piece.isnumeric(): - path_piece = int(path_piece) - v_2 = tmp_body[path_piece] - tmp_body = v_2 - if parts[1] in tmp_body[vs_field].keys(): - if tmp_body[vs_field][parts[1]] != v: - return {} - else: - return {} - return discoved_api \ No newline at end of file + exists, value = nested_key_exists(discoved_api, parts) + if exists: + if v != value: + pass_filter = False + break + return pass_filter \ No newline at end of file diff --git a/services/run.sh b/services/run.sh index 5acc9afe69c71235ce234378b6bbe2f1236b3027..e2510aaa3abce070a98ff75a3f2cc48ec70bfcdd 100755 --- a/services/run.sh +++ b/services/run.sh @@ -21,7 +21,7 @@ help() { docker_version=$(docker compose version --short | cut -d',' -f1) IFS='.' read -ra version_components <<< "$docker_version" -if [ "${version_components[0]}" -ge 2 ] && [ "${version_components[1]}" -ge 10 ]; then +if [ "${version_components[0]}" -gt 2 ] || { [ "${version_components[0]}" -eq 2 ] && [ "${version_components[1]}" -ge 10 ]; }; then echo "Docker compose version it greater than 2.10" else echo "Docker compose version is not valid. Should be greater than 2.10"