Commit abfe4d45 authored by Stavros-Anastasios Charismiadis's avatar Stavros-Anastasios Charismiadis
Browse files

impove check for vendor extensibility feature

parent fa118071
Loading
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -80,7 +80,7 @@ class DiscoverApisOperations(Resource):
                    if "vend-spec" in param:
                    if "vend-spec" in param:
                        vend_param = param.split("vend-spec-")[1]
                        vend_param = param.split("vend-spec-")[1]
                        attribute_path = query_params[param]["target"].split('/')
                        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"]:
                    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])))
                        my_params.append(json.loads(query_params_name[param].replace("QPV", query_params[param])))
                    else:
                    else:
@@ -102,9 +102,10 @@ class DiscoverApisOperations(Resource):
                        vendor_specific_fields_path = find_attribute_in_body(discoved_api, '')
                        vendor_specific_fields_path = find_attribute_in_body(discoved_api, '')
                        if vendor_specific_fields_path:
                        if vendor_specific_fields_path:
                            if vend_spec_query_params_n_values:
                            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)
                                pass_filter = filter_apis_with_vendor_specific_params(discoved_api,
                                if vs_filtered_apis:
                                                                                      vend_spec_query_params_n_values)
                                    json_docs.append(filter_fields(vs_filtered_apis))
                                if pass_filter:
                                    json_docs.append(filter_fields(discoved_api))
                            else:
                            else:
                                json_docs.append(filter_fields(discoved_api))
                                json_docs.append(filter_fields(discoved_api))
                else:
                else:
+22 −18
Original line number Original line Diff line number Diff line
import re
import re

from flask import current_app


def find_attribute_in_body(test, path):
def find_attribute_in_body(test, path):
    f_key = []
    f_key = []
@@ -70,22 +70,26 @@ def remove_vendor_specific_fields(discoved_api, vendor_specific_fields_path):
    return discoved_api
    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():
    for k, v in vend_spec_query_params_n_values.items():
        parts = k.split('.')
        parts = k.split('.')
        for path in vendor_specific_fields_path:
        exists, value = nested_key_exists(discoved_api, parts)
            if parts[0] in path:
        if exists:
                path_pieces = path.split('.')
            if v != value:
                tmp_body = discoved_api
                pass_filter = False
                vs_field = path_pieces[-1]
                break
                for path_piece in path_pieces[:-1]:
    return pass_filter
                    if path_piece.isnumeric():
 No newline at end of file
                        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