Loading services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py +32 −3 Original line number Diff line number Diff line Loading @@ -75,10 +75,39 @@ def apf_id_service_apis_post(apf_id, body): # noqa: E501 :rtype: Union[ServiceAPIDescription, Tuple[ServiceAPIDescription, int], Tuple[ServiceAPIDescription, int, Dict[str, str]] """ current_app.logger.info("Publishing service") if connexion.request.is_json: body = ServiceAPIDescription.from_dict(connexion.request.get_json()) # noqa: E501 res = service_operations.add_serviceapidescription(apf_id, body) # TODO read supported features supp_feat_dict = ServiceAPIDescription.return_supp_feat_dict(body['supportedFeatures']) current_app.logger.info(supp_feat_dict) vendor_specific_list = [] if connexion.request.is_json: # TODO check if VendorExt feature is on and deviate the flow if supp_feat_dict['VendorExt']: current_app.logger.info("VendorExt is True") # ########## Edit ServiceAPIDescription object # current_app.logger.info(connexion.request.get_json()) # body = ServiceAPIDescription(connexion.request.get_json()) # current_app.logger.info(body) # ########## Edit ServiceAPIDescription object # ########## Add the vendor-specific attributes to database sperately aef_profile_array = body['aefProfiles'] vendor_specific = [] for profile in aef_profile_array: vendor_specific.append((profile['aefId'], key, val) for key, val in profile.items() if 'vendorSpecific' in key) for duet in vendor_specific: duet_lst = list(duet) vendor_specific_list.append(duet_lst) # current_app.logger.info(duet_lst[0][0]) # current_app.logger.info(duet_lst[0][1]) # current_app.logger.info(duet_lst[0][2]) # ########## Add the vendor-specific attributes to database separately body = ServiceAPIDescription.from_dict(connexion.request.get_json()) current_app.logger.info(vendor_specific_list) res = service_operations.add_serviceapidescription(apf_id, body, vendor_specific_list) return res Loading services/TS29222_CAPIF_Publish_Service_API/published_apis/core/serviceapidescriptions.py +15 −2 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ class PublishServiceOperations(Resource): current_app.logger.error(exception + "::" + str(e)) return internal_server_error(detail=exception, cause=str(e)) def add_serviceapidescription(self, apf_id, serviceapidescription): def add_serviceapidescription(self, apf_id, serviceapidescription, vendor_specific): mycol = self.db.get_col_by_name(self.db.service_api_descriptions) Loading @@ -102,7 +102,19 @@ class PublishServiceOperations(Resource): rec = dict() rec['apf_id'] = apf_id rec['onboarding_date'] = datetime.now() rec.update(serviceapidescription.to_dict()) serviceapidescription_dict = serviceapidescription.to_dict() if vendor_specific: for trio in vendor_specific: trio_lst = list(trio) current_app.logger.info(trio_lst) for profile in serviceapidescription_dict['aef_profiles']: current_app.logger.info(trio_lst[0][0]) current_app.logger.info(trio_lst[0][1]) current_app.logger.info(trio_lst[0][2]) current_app.logger.info(profile) if profile['aef_id'] == trio_lst[0][0]: profile[trio_lst[0][1]] = trio_lst[0][2] rec.update(serviceapidescription_dict) mycol.insert_one(rec) Loading @@ -110,6 +122,7 @@ class PublishServiceOperations(Resource): current_app.logger.debug("Service inserted in database") # TODO Have to return the vendor specific object res = make_response(object=serialize_clean_camel_case(serviceapidescription), status=201) res.headers['Location'] = "http://localhost:8080/published-apis/v1/" + \ str(apf_id) + "/service-apis/" + str(api_id) Loading services/TS29222_CAPIF_Publish_Service_API/published_apis/models/service_api_description.py +17 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,23 @@ class ServiceAPIDescription(Model): self._ccf_id = ccf_id self._api_prov_name = api_prov_name @classmethod def return_supp_feat_dict(cls, supp_feat): supp_feat_in_hex = int(supp_feat, 16) supp_feat_in_bin = bin(supp_feat_in_hex)[2:] return { "VendorExt": True if supp_feat_in_bin[0] == "1" else False, "RNAA": True if supp_feat_in_bin[1] == "1" else False, "EdgeApp_2": True if supp_feat_in_bin[2] == "1" else False, "ApiStatusMonitoring": True if supp_feat_in_bin[3] == "1" else False, "ProtocDataFormats_Ext1": True if supp_feat_in_bin[4] == "1" else False, "MultipleCustomOperations": True if supp_feat_in_bin[5] == "1" else False, "ExtendedIntfDesc": True if supp_feat_in_bin[6] == "1" else False, "PatchUpdate": True if supp_feat_in_bin[7] == "1" else False, "ApiSupportedFeaturePublishing": True if supp_feat_in_bin[9] == "1" else False, } @classmethod def from_dict(cls, dikt) -> 'ServiceAPIDescription': """Returns the dict as a model Loading Loading
services/TS29222_CAPIF_Publish_Service_API/published_apis/controllers/default_controller.py +32 −3 Original line number Diff line number Diff line Loading @@ -75,10 +75,39 @@ def apf_id_service_apis_post(apf_id, body): # noqa: E501 :rtype: Union[ServiceAPIDescription, Tuple[ServiceAPIDescription, int], Tuple[ServiceAPIDescription, int, Dict[str, str]] """ current_app.logger.info("Publishing service") if connexion.request.is_json: body = ServiceAPIDescription.from_dict(connexion.request.get_json()) # noqa: E501 res = service_operations.add_serviceapidescription(apf_id, body) # TODO read supported features supp_feat_dict = ServiceAPIDescription.return_supp_feat_dict(body['supportedFeatures']) current_app.logger.info(supp_feat_dict) vendor_specific_list = [] if connexion.request.is_json: # TODO check if VendorExt feature is on and deviate the flow if supp_feat_dict['VendorExt']: current_app.logger.info("VendorExt is True") # ########## Edit ServiceAPIDescription object # current_app.logger.info(connexion.request.get_json()) # body = ServiceAPIDescription(connexion.request.get_json()) # current_app.logger.info(body) # ########## Edit ServiceAPIDescription object # ########## Add the vendor-specific attributes to database sperately aef_profile_array = body['aefProfiles'] vendor_specific = [] for profile in aef_profile_array: vendor_specific.append((profile['aefId'], key, val) for key, val in profile.items() if 'vendorSpecific' in key) for duet in vendor_specific: duet_lst = list(duet) vendor_specific_list.append(duet_lst) # current_app.logger.info(duet_lst[0][0]) # current_app.logger.info(duet_lst[0][1]) # current_app.logger.info(duet_lst[0][2]) # ########## Add the vendor-specific attributes to database separately body = ServiceAPIDescription.from_dict(connexion.request.get_json()) current_app.logger.info(vendor_specific_list) res = service_operations.add_serviceapidescription(apf_id, body, vendor_specific_list) return res Loading
services/TS29222_CAPIF_Publish_Service_API/published_apis/core/serviceapidescriptions.py +15 −2 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ class PublishServiceOperations(Resource): current_app.logger.error(exception + "::" + str(e)) return internal_server_error(detail=exception, cause=str(e)) def add_serviceapidescription(self, apf_id, serviceapidescription): def add_serviceapidescription(self, apf_id, serviceapidescription, vendor_specific): mycol = self.db.get_col_by_name(self.db.service_api_descriptions) Loading @@ -102,7 +102,19 @@ class PublishServiceOperations(Resource): rec = dict() rec['apf_id'] = apf_id rec['onboarding_date'] = datetime.now() rec.update(serviceapidescription.to_dict()) serviceapidescription_dict = serviceapidescription.to_dict() if vendor_specific: for trio in vendor_specific: trio_lst = list(trio) current_app.logger.info(trio_lst) for profile in serviceapidescription_dict['aef_profiles']: current_app.logger.info(trio_lst[0][0]) current_app.logger.info(trio_lst[0][1]) current_app.logger.info(trio_lst[0][2]) current_app.logger.info(profile) if profile['aef_id'] == trio_lst[0][0]: profile[trio_lst[0][1]] = trio_lst[0][2] rec.update(serviceapidescription_dict) mycol.insert_one(rec) Loading @@ -110,6 +122,7 @@ class PublishServiceOperations(Resource): current_app.logger.debug("Service inserted in database") # TODO Have to return the vendor specific object res = make_response(object=serialize_clean_camel_case(serviceapidescription), status=201) res.headers['Location'] = "http://localhost:8080/published-apis/v1/" + \ str(apf_id) + "/service-apis/" + str(api_id) Loading
services/TS29222_CAPIF_Publish_Service_API/published_apis/models/service_api_description.py +17 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,23 @@ class ServiceAPIDescription(Model): self._ccf_id = ccf_id self._api_prov_name = api_prov_name @classmethod def return_supp_feat_dict(cls, supp_feat): supp_feat_in_hex = int(supp_feat, 16) supp_feat_in_bin = bin(supp_feat_in_hex)[2:] return { "VendorExt": True if supp_feat_in_bin[0] == "1" else False, "RNAA": True if supp_feat_in_bin[1] == "1" else False, "EdgeApp_2": True if supp_feat_in_bin[2] == "1" else False, "ApiStatusMonitoring": True if supp_feat_in_bin[3] == "1" else False, "ProtocDataFormats_Ext1": True if supp_feat_in_bin[4] == "1" else False, "MultipleCustomOperations": True if supp_feat_in_bin[5] == "1" else False, "ExtendedIntfDesc": True if supp_feat_in_bin[6] == "1" else False, "PatchUpdate": True if supp_feat_in_bin[7] == "1" else False, "ApiSupportedFeaturePublishing": True if supp_feat_in_bin[9] == "1" else False, } @classmethod def from_dict(cls, dikt) -> 'ServiceAPIDescription': """Returns the dict as a model Loading