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

substitute mongo projection in Discover with dictionary filtering

parent b8e66502
Loading
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -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