From b301e35367f860fae335c85227795008b531d79b Mon Sep 17 00:00:00 2001 From: dyh Date: Thu, 21 Nov 2019 16:53:38 +0800 Subject: [PATCH] 1.Update API endpoint; 2. update swagger information. Issue-ID: MODELING-277 Change-Id: I6b3252ebc61d6bdf0ece483688a44f3838901940 Signed-off-by: dyh --- catalog/jobs/views.py | 20 ++++++------- catalog/packages/biz/vnf_pkg_artifacts.py | 2 +- catalog/packages/const.py | 13 +++++++++ catalog/packages/tests/test_nspackage.py | 11 ++++---- catalog/packages/tests/test_pnf_descriptor.py | 6 ++-- catalog/packages/tests/test_servicepackage.py | 14 ++++----- catalog/packages/tests/test_vnfpackage.py | 8 ++++-- catalog/packages/urls.py | 11 ++------ catalog/packages/views/catalog_views.py | 33 ++++++++++++---------- catalog/packages/views/health_check_views.py | 4 ++- catalog/packages/views/ns_descriptor_views.py | 13 +++++---- catalog/packages/views/nsdm_subscription_views.py | 16 +++++------ catalog/packages/views/pnf_descriptor_views.py | 23 +++++++-------- .../packages/views/vnf_package_artifact_views.py | 12 ++++---- .../views/vnf_package_subscription_views.py | 21 +++++++------- catalog/packages/views/vnf_package_views.py | 29 ++++++++++--------- catalog/samples/views.py | 13 +++++++++ 17 files changed, 138 insertions(+), 111 deletions(-) diff --git a/catalog/jobs/views.py b/catalog/jobs/views.py index 123af00..dd5299c 100644 --- a/catalog/jobs/views.py +++ b/catalog/jobs/views.py @@ -27,10 +27,10 @@ from catalog.pub.utils.jobutil import JobUtil from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) +CATALOG_API = "Catalog interface" class JobView(APIView): - input_job_id = openapi.Parameter( 'job_id', openapi.IN_QUERY, @@ -44,6 +44,7 @@ class JobView(APIView): @swagger_auto_schema( operation_description="Get job status", + tags=[CATALOG_API], manual_parameters=[input_job_id, input_response_id], responses={ status.HTTP_200_OK: GetJobResponseSerializer(), @@ -53,8 +54,7 @@ class JobView(APIView): response_id = ignore_case_get(request.META, 'responseId') ret = GetJobInfoService(job_id, response_id).do_biz() response_serializer = GetJobResponseSerializer(data=ret) - validataion_error = self.handleValidatonError( - response_serializer, False) + validataion_error = self.handleValidatonError(response_serializer, False) if validataion_error: return validataion_error @@ -65,6 +65,7 @@ class JobView(APIView): @swagger_auto_schema( request_body=PostJobRequestSerializer(), operation_description="Update job status", + tags=[CATALOG_API], manual_parameters=[input_job_id], responses={ status.HTTP_202_ACCEPTED: PostJobResponseResultSerializer(), @@ -80,24 +81,19 @@ class JobView(APIView): return Response(data=job_result_ok) request_serializer = PostJobRequestSerializer(data=request.data) - validataion_error = self.handleValidatonError( - request_serializer, True) + validataion_error = self.handleValidatonError(request_serializer, True) if not validataion_error: return validataion_error requestData = request_serializer.data progress = ignore_case_get(requestData, "progress") desc = ignore_case_get(requestData, "desc", '%s' % progress) - errcode = '0' if ignore_case_get( - requestData, 'errcode') in ( - 'true', 'active') else '255' + errcode = '0' if ignore_case_get(requestData, 'errcode') in ('true', 'active') else '255' logger.debug("errcode=%s", errcode) JobUtil.add_job_status(job_id, progress, desc, error_code=errcode) - response_serializer = PostJobResponseResultSerializer( - data=job_result_ok) - validataion_error = self.handleValidatonError( - response_serializer, False) + response_serializer = PostJobResponseResultSerializer(data=job_result_ok) + validataion_error = self.handleValidatonError(response_serializer, False) if validataion_error: return validataion_error diff --git a/catalog/packages/biz/vnf_pkg_artifacts.py b/catalog/packages/biz/vnf_pkg_artifacts.py index 37021eb..839f05c 100644 --- a/catalog/packages/biz/vnf_pkg_artifacts.py +++ b/catalog/packages/biz/vnf_pkg_artifacts.py @@ -35,7 +35,7 @@ class FetchVnfPkgArtifact(object): vnf_extract_path = fileutil.unzip_csar_to_tmp(local_path) artifact_path = fileutil.get_artifact_path(vnf_extract_path, artifactPath) if not artifact_path: - raise ArtifactNotFoundException("Couldn't artifact %s" % artifactPath) + raise ArtifactNotFoundException("Can't find artifact %s" % artifactPath) with open(artifact_path, 'rt') as f: file_content = f.read() else: diff --git a/catalog/packages/const.py b/catalog/packages/const.py index 593f3a2..cc7dd2d 100644 --- a/catalog/packages/const.py +++ b/catalog/packages/const.py @@ -92,3 +92,16 @@ NSDM_NOTIFICATION_TYPES = [ "PnfdOnBoardingFailureNotification", "PnfdDeletionNotification" ] + +# API swagger tag +TAG_CATALOG_API = "Catalog interface" + +TAG_PARSER_API = "Parser interface" + +TAG_NSD_API = "NSD Management interface" + +TAG_PNFD_API = "NSD Management interface" + +TAG_VNF_PACKAGE_API = "VNF Package Management interface" + +TAG_HEALTH_CHECK = "Health Check interface" diff --git a/catalog/packages/tests/test_nspackage.py b/catalog/packages/tests/test_nspackage.py index 91f3503..0ca34a2 100644 --- a/catalog/packages/tests/test_nspackage.py +++ b/catalog/packages/tests/test_nspackage.py @@ -13,14 +13,15 @@ # limitations under the License. import json + import mock -from rest_framework import status -from django.test import TestCase from django.test import Client +from django.test import TestCase +from rest_framework import status -from catalog.pub.utils import restcall, toscaparser from catalog.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel from catalog.pub.msapi import sdc +from catalog.pub.utils import restcall, toscaparser from .const import nsd_data @@ -228,7 +229,7 @@ class TestNsPackage(TestCase): mock_parse_nsd.return_value = json.JSONEncoder().encode({"a": "b"}) req_data = {"csarId": "18", "inputs": []} resp = self.client.post( - "/api/catalog/v1/parsernsd", + "/api/parser/v1/parsernsd", req_data, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) @@ -237,7 +238,7 @@ class TestNsPackage(TestCase): def test_nsd_parse_when_csar_not_exist(self): req_data = {"csarId": "1", "inputs": []} resp = self.client.post( - "/api/catalog/v1/parsernsd", + "/api/parser/v1/parsernsd", req_data, format='json') self.assertEqual( diff --git a/catalog/packages/tests/test_pnf_descriptor.py b/catalog/packages/tests/test_pnf_descriptor.py index 8af8614..7abd46c 100644 --- a/catalog/packages/tests/test_pnf_descriptor.py +++ b/catalog/packages/tests/test_pnf_descriptor.py @@ -15,14 +15,14 @@ import copy import json -import mock import os import shutil - +import mock from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient + from catalog.packages.biz.pnf_descriptor import PnfDescriptor from catalog.packages.const import PKG_STATUS from catalog.packages.tests.const import pnfd_data @@ -281,6 +281,6 @@ class TestPnfDescriptor(TestCase): PnfPackageModel(pnfPackageId="8", pnfdId="10").save() mock_parse_pnfd.return_value = json.JSONEncoder().encode({"c": "d"}) req_data = {"csarId": "8", "inputs": []} - resp = self.client.post("/api/catalog/v1/parserpnfd", req_data, format='json') + resp = self.client.post("/api/parser/v1/parserpnfd", req_data, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual({"model": '{"c": "d"}'}, resp.data) diff --git a/catalog/packages/tests/test_servicepackage.py b/catalog/packages/tests/test_servicepackage.py index 241d80d..babfa4d 100644 --- a/catalog/packages/tests/test_servicepackage.py +++ b/catalog/packages/tests/test_servicepackage.py @@ -24,7 +24,7 @@ from catalog.pub.exceptions import PackageNotFoundException, PackageHasExistsExc from catalog.pub.msapi import sdc from catalog.pub.utils import toscaparser -PARSER_BASE_URL = "/api/parser/v1" +CATALOG_BASE_URL = "/api/catalog/v1" class TestServicePackage(TestCase): @@ -352,7 +352,7 @@ class TestServicePackage(TestCase): def test_api_service_pkg_distribute_when_pkg_exists(self): ServicePackageModel(servicePackageId="1", servicedId="2").save() resp = self.client.post( - PARSER_BASE_URL + "/service_packages", {"csarId": "1"}, format='json') + CATALOG_BASE_URL + "/service_packages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual("Service CSAR(1) already exists.", resp.data["errorMessage"]) @@ -391,7 +391,7 @@ class TestServicePackage(TestCase): servicedVersion="3", servicePackageUri="14.csar", servicedModel="").save() - resp = self.client.get(PARSER_BASE_URL + "/service_packages") + resp = self.client.get(CATALOG_BASE_URL + "/service_packages") self.assertEqual(resp.status_code, status.HTTP_200_OK) ############################################################### @@ -421,11 +421,11 @@ class TestServicePackage(TestCase): servicedVersion="4", servicePackageUri="14.csar", servicedModel="").save() - resp = self.client.get(PARSER_BASE_URL + "/service_packages/14") + resp = self.client.get(CATALOG_BASE_URL + "/service_packages/14") self.assertEqual(resp.status_code, status.HTTP_200_OK) def test_api_service_pkg_get_one_not_found(self): - resp = self.client.get(PARSER_BASE_URL + "/service_packages/22") + resp = self.client.get(CATALOG_BASE_URL + "/service_packages/22") self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual( {"errorMessage": "Service package[22] not Found.", 'error': 404}, @@ -449,7 +449,7 @@ class TestServicePackage(TestCase): def test_api_service_pkg_normal_delete(self): ServicePackageModel(servicePackageId="8", servicedId="2").save() - resp = self.client.delete(PARSER_BASE_URL + "/service_packages/8") + resp = self.client.delete(CATALOG_BASE_URL + "/service_packages/8") self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) ############################################################### @@ -477,5 +477,5 @@ class TestServicePackage(TestCase): "packageType": "Service", "inputs": "string" } - resp = self.client.post(PARSER_BASE_URL + "/parser", query_data, format='json') + resp = self.client.post(CATALOG_BASE_URL + "/parser", query_data, format='json') self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND) diff --git a/catalog/packages/tests/test_vnfpackage.py b/catalog/packages/tests/test_vnfpackage.py index 0d8cbad..f016d01 100644 --- a/catalog/packages/tests/test_vnfpackage.py +++ b/catalog/packages/tests/test_vnfpackage.py @@ -13,10 +13,12 @@ # limitations under the License. import json + import mock -from rest_framework.test import APIClient from django.test import TestCase from rest_framework import status +from rest_framework.test import APIClient + from catalog.packages.biz.sdc_vnf_package import NfDistributeThread, NfPkgDeleteThread from catalog.pub.database.models import JobStatusModel, JobModel from catalog.pub.database.models import VnfPackageModel @@ -240,7 +242,7 @@ class TestNfPackage(TestCase): "inputs": [] } resp = self.client.post( - "/api/catalog/v1/parservnfd", + "/api/parser/v1/parservnfd", req_data, format='json' ) @@ -250,7 +252,7 @@ class TestNfPackage(TestCase): def test_vnfd_parse_when_csar_not_exist(self): req_data = {"csarId": "1", "inputs": []} resp = self.client.post( - "/api/catalog/v1/parservnfd", + "/api/parser/v1/parservnfd", req_data, format='json' ) diff --git a/catalog/packages/urls.py b/catalog/packages/urls.py index 3ed6968..aa11883 100644 --- a/catalog/packages/urls.py +++ b/catalog/packages/urls.py @@ -29,17 +29,14 @@ urlpatterns = [ url(r'^api/catalog/v1/nspackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.ns_rd_csar, name='nspackage_rd'), url(r'^api/catalog/v1/vnfpackages$', catalog_views.nfpackages_rc, name='nfpackages_rc'), url(r'^api/catalog/v1/vnfpackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.nf_rd_csar, name='nfpackage_rd'), - url(r'^api/parser/v1/service_packages$', catalog_views.servicepackages_rc, name='servicepackages_rc'), - url(r'^api/parser/v1/service_packages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.service_rd_csar, name='servicepackage_rd'), + url(r'^api/catalog/v1/service_packages$', catalog_views.servicepackages_rc, name='servicepackages_rc'), + url(r'^api/catalog/v1/service_packages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.service_rd_csar, name='servicepackage_rd'), # NFV Model Parser url(r'^api/parser/v1/parser$', catalog_views.model_parser, name='modelparser_rc'), url(r'^api/parser/v1/parsernsd$', catalog_views.ns_model_parser, name='nsmodelparser_rc'), url(r'^api/parser/v1/parservnfd$', catalog_views.vnf_model_parser, name='vnfmodelparser_rc'), url(r'^api/parser/v1/parserpnfd$', pnf_descriptor_views.pnf_model_parser, name='pnfmodelparser_rc'), - url(r'^api/catalog/v1/parsernsd$', catalog_views.ns_model_parser, name='nsmodelparser_rc'), - url(r'^api/catalog/v1/parservnfd$', catalog_views.vnf_model_parser, name='vnfmodelparser_rc'), - url(r'^api/catalog/v1/parserpnfd$', pnf_descriptor_views.pnf_model_parser, name='pnfmodelparser_rc'), # ETSI SOL005 NSD API url(r'^api/nsd/v1/ns_descriptors$', ns_descriptor_views.ns_descriptors_rc, name='ns_descriptors_rc'), @@ -64,10 +61,6 @@ urlpatterns = [ url(r'^api/vnfpkgm/v1/subscriptions$', CreateQuerySubscriptionView.as_view(), name='subscriptions_create_query'), url(r'^api/vnfpkgm/v1/subscriptions/(?P[0-9a-zA-Z\-\_]+)$', QueryTerminateSubscriptionView.as_view(), name='subscriptions_query_terminate'), url(r'^api/vnfpkgm/v1/vnf_packages/(?P[0-9a-zA-Z\-\_]+)/artifacts/(?P[0-9a-zA-Z\-\_]+)$', FetchVnfPkgmArtifactsView.as_view(), name="fetch_vnf_artifacts"), - # url(r'^api/vnfpkgm/v1/subscriptions/(?P[0-9a-zA-Z\-\_]+)$', vnf_package_subscription_views.vnf_package_subscriptions_rc, name='subscriptions_rc'), - # url(r'^api/vnfpkgm/v1/vnf_packages/(?P[0-9a-zA-Z\-\_]+)/vnfd$', vnfd.as_view(), name='vnfd_r'),# url(r'^api/vnfpkgm/v1/vnf_packages/(?P[0-9a-zA-Z\-\_]+)/artifacts/artifactPath$', artifacts.as_view(), name='artifacts_r'), - - # url(r'^api/vnfpkgm/v1/subscriptions/(?P[0-9a-zA-Z\-\_]+)$', vnfpkg_subscription.as_view(), name='subscription_rd'), # health check url(r'^api/vnfpkgm/v1/health_check$', HealthCheckView.as_view()), diff --git a/catalog/packages/views/catalog_views.py b/catalog/packages/views/catalog_views.py index 740c530..a83d9d2 100644 --- a/catalog/packages/views/catalog_views.py +++ b/catalog/packages/views/catalog_views.py @@ -20,9 +20,12 @@ from drf_yasg.utils import no_body, swagger_auto_schema from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response + +from catalog.jobs.views import CATALOG_API from catalog.packages.biz import sdc_vnf_package, sdc_ns_package from catalog.packages.biz.pnf_descriptor import PnfDescriptor from catalog.packages.biz.sdc_service_package import ServicePackage +from catalog.packages.const import TAG_PARSER_API from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer, \ ServicePackageDistributeRequestSerializer, ServicePackagesSerializer, ServicePackageSerializer from catalog.packages.serializers.catalog_serializers import NfPackageDistributeRequestSerializer @@ -46,7 +49,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='POST', operation_description="On distribute NS package", - tags=["NS packages API"], + tags=[CATALOG_API], request_body=NsPackageDistributeRequestSerializer, responses={ status.HTTP_202_ACCEPTED: NsPackageDistributeResponseSerializer, @@ -54,7 +57,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='GET', operation_description="Query NS packages", - tags=["NS packages API"], + tags=[CATALOG_API], request_body=no_body, responses={ status.HTTP_200_OK: NsPackagesSerializer, @@ -100,7 +103,7 @@ def nspackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='POST', operation_description="On distribute Nf package", - tags=["NF packages API"], + tags=[CATALOG_API], request_body=NfPackageDistributeRequestSerializer(), responses={ status.HTTP_202_ACCEPTED: PostJobResponseSerializer, @@ -108,7 +111,7 @@ def nspackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query Nf packages", - tags=["NF packages API"], + tags=[CATALOG_API], request_body=no_body, responses={ status.HTTP_200_OK: NfPackagesSerializer, @@ -162,7 +165,7 @@ def nfpackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='DELETE', operation_description="Delete one NS package", - tags=["NS packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -179,7 +182,7 @@ def nfpackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query one NS package", - tags=["NS packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -222,7 +225,7 @@ def ns_rd_csar(request, *args, **kwargs): @swagger_auto_schema( method='POST', operation_description="On distribute Service package", - tags=["Service packages API"], + tags=[CATALOG_API], request_body=ServicePackageDistributeRequestSerializer, responses={ status.HTTP_202_ACCEPTED: "", @@ -231,7 +234,7 @@ def ns_rd_csar(request, *args, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query Service packages", - tags=["Service packages API"], + tags=[CATALOG_API], request_body=no_body, responses={ status.HTTP_200_OK: ServicePackagesSerializer, @@ -275,7 +278,7 @@ def servicepackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='DELETE', operation_description="Delete one Service package", - tags=["Service packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -290,7 +293,7 @@ def servicepackages_rc(request, *args, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query one Service package", - tags=["Service packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -337,7 +340,7 @@ def service_rd_csar(request, *args, **kwargs): @swagger_auto_schema( method='DELETE', operation_description="Delete one Nf package", - tags=["NF packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -354,7 +357,7 @@ def service_rd_csar(request, *args, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query one Nf package", - tags=["NF packages API"], + tags=[CATALOG_API], request_body=no_body, manual_parameters=[ openapi.Parameter( @@ -405,7 +408,7 @@ def nf_rd_csar(request, *args, **kwargs): @swagger_auto_schema( method='POST', operation_description="Parse model(NS, Service, VNF, PNF)", - tags=["Parser API"], + tags=[TAG_PARSER_API], request_body=ParseModelRequestSerializer, responses={ status.HTTP_202_ACCEPTED: ParseModelResponseSerializer, @@ -466,7 +469,7 @@ def model_parser(request, *args, **kwargs): @swagger_auto_schema( method='POST', operation_description="Parse NS model", - tags=["Parser API"], + tags=[TAG_PARSER_API], request_body=ParseModelRequestSerializer, responses={ status.HTTP_202_ACCEPTED: ParseModelResponseSerializer, @@ -500,7 +503,7 @@ def ns_model_parser(request, *args, **kwargs): @swagger_auto_schema( method='POST', operation_description="Parse NF model", - tags=["Parser API"], + tags=[TAG_PARSER_API], request_body=ParseModelRequestSerializer, responses={ status.HTTP_202_ACCEPTED: ParseModelResponseSerializer, diff --git a/catalog/packages/views/health_check_views.py b/catalog/packages/views/health_check_views.py index e5aad9a..fc5c25e 100644 --- a/catalog/packages/views/health_check_views.py +++ b/catalog/packages/views/health_check_views.py @@ -19,12 +19,14 @@ from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView +from catalog.packages.const import TAG_HEALTH_CHECK + logger = logging.getLogger(__name__) class HealthCheckView(APIView): @swagger_auto_schema( - tags=["Health check API"], + tags=[TAG_HEALTH_CHECK], responses={ status.HTTP_200_OK: 'Active'}) def get(self, request, format=None): diff --git a/catalog/packages/views/ns_descriptor_views.py b/catalog/packages/views/ns_descriptor_views.py index 797bfec..2d98628 100644 --- a/catalog/packages/views/ns_descriptor_views.py +++ b/catalog/packages/views/ns_descriptor_views.py @@ -21,6 +21,7 @@ from rest_framework.decorators import api_view from rest_framework.response import Response from catalog.packages.biz.ns_descriptor import NsDescriptor +from catalog.packages.const import TAG_NSD_API from catalog.packages.serializers.create_nsd_info_request import CreateNsdInfoRequestSerializer from catalog.packages.serializers.nsd_info import NsdInfoSerializer from catalog.packages.serializers.nsd_infos import NsdInfosSerializer @@ -34,7 +35,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='GET', operation_description="Query a NSD", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_200_OK: NsdInfoSerializer(), @@ -45,7 +46,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='DELETE', operation_description="Delete a NSD", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", @@ -68,7 +69,7 @@ def ns_info_rd(request, **kwargs): @swagger_auto_schema( method='POST', operation_description="Create a NSD", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=CreateNsdInfoRequestSerializer(), responses={ status.HTTP_201_CREATED: NsdInfoSerializer(), @@ -78,7 +79,7 @@ def ns_info_rd(request, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query multiple NSDs", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_200_OK: NsdInfosSerializer(), @@ -104,7 +105,7 @@ def ns_descriptors_rc(request): @swagger_auto_schema( method='PUT', operation_description="Upload NSD content", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: 'PNFD file', @@ -114,7 +115,7 @@ def ns_descriptors_rc(request): @swagger_auto_schema( method='GET', operation_description="Download NSD content", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", diff --git a/catalog/packages/views/nsdm_subscription_views.py b/catalog/packages/views/nsdm_subscription_views.py index b4b82ae..7e1b2f5 100644 --- a/catalog/packages/views/nsdm_subscription_views.py +++ b/catalog/packages/views/nsdm_subscription_views.py @@ -19,15 +19,15 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response +from catalog.packages.biz.nsdm_subscription import NsdmSubscription +from catalog.packages.const import TAG_NSD_API from catalog.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter -from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer -from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer from catalog.packages.serializers.response import ProblemDetailsSerializer - from catalog.pub.exceptions import NsdmBadRequestException -from catalog.packages.biz.nsdm_subscription import NsdmSubscription from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -44,7 +44,7 @@ def validate_data(data, serializer): @swagger_auto_schema( method='POST', operation_description="Create Subscription for NSD Management", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=NsdmSubscriptionRequestSerializer(), responses={ status.HTTP_201_CREATED: NsdmSubscriptionSerializer, @@ -56,7 +56,7 @@ def validate_data(data, serializer): @swagger_auto_schema( method='GET', operation_description="Query subscriptions for Nsd Management", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_200_OK: NsdmSubscriptionsSerializer(), @@ -96,7 +96,7 @@ def nsd_subscription_rc(request): @swagger_auto_schema( method='GET', operation_description="Query subscriptions for Nsd Management", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_200_OK: NsdmSubscriptionSerializer(), @@ -108,7 +108,7 @@ def nsd_subscription_rc(request): @swagger_auto_schema( method='DELETE', operation_description="Delete subscription for Nsd Management", - tags=["NSD API"], + tags=[TAG_NSD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: 'No_Content', diff --git a/catalog/packages/views/pnf_descriptor_views.py b/catalog/packages/views/pnf_descriptor_views.py index 381b557..9e7a2c4 100644 --- a/catalog/packages/views/pnf_descriptor_views.py +++ b/catalog/packages/views/pnf_descriptor_views.py @@ -21,14 +21,15 @@ from rest_framework.decorators import api_view from rest_framework.response import Response from catalog.packages.biz.pnf_descriptor import PnfDescriptor +from catalog.packages.const import TAG_PNFD_API, TAG_PARSER_API +from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer +from catalog.packages.serializers.catalog_serializers import ParseModelRequestSerializer +from catalog.packages.serializers.catalog_serializers import ParseModelResponseSerializer from catalog.packages.serializers.create_pnfd_info_request import CreatePnfdInfoRequestSerializer from catalog.packages.serializers.pnfd_info import PnfdInfoSerializer from catalog.packages.serializers.pnfd_infos import PnfdInfosSerializer -from catalog.packages.views.common import validate_data -from catalog.packages.serializers.catalog_serializers import ParseModelRequestSerializer -from catalog.packages.serializers.catalog_serializers import ParseModelResponseSerializer -from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer from catalog.packages.serializers.response import ProblemDetailsSerializer +from catalog.packages.views.common import validate_data from catalog.pub.utils.syscomm import fun_name from catalog.pub.utils.values import ignore_case_get from .common import view_safe_call_with_log @@ -39,7 +40,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='GET', operation_description="Query a PNFD", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=no_body, responses={ status.HTTP_200_OK: PnfdInfoSerializer(), @@ -50,7 +51,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method='DELETE', operation_description="Delete a PNFD", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", @@ -76,7 +77,7 @@ def pnfd_info_rd(request, **kwargs): # TODO @swagger_auto_schema( method='POST', operation_description="Create a PNFD", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=CreatePnfdInfoRequestSerializer(), responses={ status.HTTP_201_CREATED: PnfdInfoSerializer(), @@ -86,7 +87,7 @@ def pnfd_info_rd(request, **kwargs): # TODO @swagger_auto_schema( method='GET', operation_description="Query multiple PNFDs", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=no_body, responses={ status.HTTP_200_OK: PnfdInfosSerializer(), @@ -111,7 +112,7 @@ def pnf_descriptors_rc(request): @swagger_auto_schema( method='PUT', operation_description="Upload PNFD content", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", @@ -121,7 +122,7 @@ def pnf_descriptors_rc(request): @swagger_auto_schema( method='GET', operation_description="Fetch PNFD content", - tags=["PNFD API"], + tags=[TAG_PNFD_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: 'PNFD file', @@ -151,7 +152,7 @@ def pnfd_content_ru(request, **kwargs): @swagger_auto_schema( method='POST', operation_description="Parse PNF model", - tags=["Parser API"], + tags=[TAG_PARSER_API], request_body=ParseModelRequestSerializer, responses={ status.HTTP_202_ACCEPTED: ParseModelResponseSerializer, diff --git a/catalog/packages/views/vnf_package_artifact_views.py b/catalog/packages/views/vnf_package_artifact_views.py index 23a76c7..9dd9b57 100644 --- a/catalog/packages/views/vnf_package_artifact_views.py +++ b/catalog/packages/views/vnf_package_artifact_views.py @@ -14,13 +14,13 @@ import logging +from django.http import FileResponse from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.views import APIView -from django.http import FileResponse -from catalog.packages.serializers.response import ProblemDetailsSerializer from catalog.packages.biz.vnf_pkg_artifacts import FetchVnfPkgArtifact +from catalog.packages.const import TAG_VNF_PACKAGE_API from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -38,11 +38,11 @@ VALID_FILTERS = [ class FetchVnfPkgmArtifactsView(APIView): @swagger_auto_schema( - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], responses={ - status.HTTP_200_OK: "HTTP_200_OK", - status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(), - status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer() + status.HTTP_200_OK: "Return the artifact file", + status.HTTP_404_NOT_FOUND: "Artifact not found", + status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" } ) @view_safe_call_with_log(logger=logger) diff --git a/catalog/packages/views/vnf_package_subscription_views.py b/catalog/packages/views/vnf_package_subscription_views.py index 27be798..8289275 100644 --- a/catalog/packages/views/vnf_package_subscription_views.py +++ b/catalog/packages/views/vnf_package_subscription_views.py @@ -16,19 +16,20 @@ import logging from drf_yasg.utils import swagger_auto_schema from rest_framework import status -from rest_framework.views import APIView from rest_framework.response import Response +from rest_framework.views import APIView -from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer -from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionSerializer -from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionsSerializer -from catalog.packages.serializers.response import ProblemDetailsSerializer from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription from catalog.packages.biz.vnf_pkg_subscription import QuerySubscription from catalog.packages.biz.vnf_pkg_subscription import TerminateSubscription +from catalog.packages.const import TAG_VNF_PACKAGE_API +from catalog.packages.serializers.response import ProblemDetailsSerializer +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionSerializer +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionsSerializer from catalog.packages.views.common import validate_data -from catalog.pub.exceptions import VnfPkgSubscriptionException from catalog.pub.exceptions import BadRequestException +from catalog.pub.exceptions import VnfPkgSubscriptionException from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -46,7 +47,7 @@ VALID_FILTERS = [ class CreateQuerySubscriptionView(APIView): @swagger_auto_schema( - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=PkgmSubscriptionRequestSerializer, responses={ status.HTTP_201_CREATED: PkgmSubscriptionSerializer(), @@ -63,7 +64,7 @@ class CreateQuerySubscriptionView(APIView): return Response(data=subscription_info.data, status=status.HTTP_201_CREATED) @swagger_auto_schema( - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], responses={ status.HTTP_200_OK: PkgmSubscriptionSerializer(), status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(), @@ -89,7 +90,7 @@ class CreateQuerySubscriptionView(APIView): class QueryTerminateSubscriptionView(APIView): @swagger_auto_schema( - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], responses={ status.HTTP_200_OK: PkgmSubscriptionSerializer(), status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(), @@ -109,7 +110,7 @@ class QueryTerminateSubscriptionView(APIView): return Response(data=subscription_serializer.data, status=status.HTTP_200_OK) @swagger_auto_schema( - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], responses={ status.HTTP_204_NO_CONTENT: "", status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(), diff --git a/catalog/packages/views/vnf_package_views.py b/catalog/packages/views/vnf_package_views.py index 76891f2..6747269 100644 --- a/catalog/packages/views/vnf_package_views.py +++ b/catalog/packages/views/vnf_package_views.py @@ -20,14 +20,15 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer -from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer -from catalog.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer -from catalog.packages.serializers.vnf_pkg_infos import VnfPkgInfosSerializer from catalog.packages.biz.vnf_package import VnfPackage from catalog.packages.biz.vnf_package import VnfPkgUploadThread -from catalog.packages.biz.vnf_package import parse_vnfd_and_save from catalog.packages.biz.vnf_package import handle_upload_failed +from catalog.packages.biz.vnf_package import parse_vnfd_and_save +from catalog.packages.const import TAG_VNF_PACKAGE_API +from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer +from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer +from catalog.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer +from catalog.packages.serializers.vnf_pkg_infos import VnfPkgInfosSerializer from .common import validate_data from .common import view_safe_call_with_log @@ -37,7 +38,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method="GET", operation_description="Query multiple VNF package resource", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ status.HTTP_200_OK: VnfPkgInfosSerializer(), @@ -47,7 +48,7 @@ logger = logging.getLogger(__name__) @swagger_auto_schema( method="POST", operation_description="Create an individual VNF package resource", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=CreateVnfPkgInfoRequestSerializer, responses={ status.HTTP_201_CREATED: VnfPkgInfoSerializer(), @@ -75,7 +76,7 @@ def vnf_packages_rc(request): @swagger_auto_schema( method="GET", operation_description="Read VNFD of an on-boarded VNF package", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ status.HTTP_200_OK: VnfPkgInfosSerializer(), @@ -99,7 +100,7 @@ def vnfd_rd(request, **kwargs): @swagger_auto_schema( method='PUT', operation_description="Upload VNF package content", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ status.HTTP_202_ACCEPTED: "Successfully", @@ -109,10 +110,10 @@ def vnfd_rd(request, **kwargs): @swagger_auto_schema( method="GET", operation_description="Fetch VNF package content", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ - status.HTTP_200_OK: VnfPkgInfosSerializer(), + status.HTTP_200_OK: "Return csar file of VNF package", status.HTTP_404_NOT_FOUND: "VNF package does not exist", status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" } @@ -141,7 +142,7 @@ def package_content_ru(request, **kwargs): @swagger_auto_schema( method='POST', operation_description="Upload VNF package content from uri", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=UploadVnfPackageFromUriRequestSerializer, responses={ status.HTTP_202_ACCEPTED: "Successfully", @@ -165,7 +166,7 @@ def upload_from_uri_c(request, **kwargs): @swagger_auto_schema( method='GET', operation_description="Query an individual VNF package resource", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ status.HTTP_200_OK: VnfPkgInfoSerializer(), @@ -176,7 +177,7 @@ def upload_from_uri_c(request, **kwargs): @swagger_auto_schema( method='DELETE', operation_description="Delete an individual VNF package resource", - tags=["VNF Package API"], + tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", diff --git a/catalog/samples/views.py b/catalog/samples/views.py index 006f0e5..bca716a 100644 --- a/catalog/samples/views.py +++ b/catalog/samples/views.py @@ -15,10 +15,13 @@ import logging import traceback +from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView +TAG_SAMPLE_INTERFACE = "Sample interface" + logger = logging.getLogger(__name__) @@ -26,6 +29,9 @@ class SampleList(APIView): """ List all samples. """ + + @swagger_auto_schema( + tags=[TAG_SAMPLE_INTERFACE]) def get(self, request, format=None): logger.debug("get") return Response({"status": "active"}) @@ -35,12 +41,17 @@ class CallbackSample(APIView): """ Callback Sample. """ + + @swagger_auto_schema( + tags=[TAG_SAMPLE_INTERFACE]) def get(self, request, format=None): logger.debug("Callback Sample") return Response(data={}, status=status.HTTP_204_NO_CONTENT) class TablesList(APIView): + @swagger_auto_schema( + tags=[TAG_SAMPLE_INTERFACE]) def delete(self, request, modelName): logger.debug("Start delete model %s", modelName) try: @@ -54,6 +65,8 @@ class TablesList(APIView): return Response(data={"error": "failed"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(data={}, status=status.HTTP_204_NO_CONTENT) + @swagger_auto_schema( + tags=["Sample interface"]) def get(self, request, modelName): logger.debug("Get model %s", modelName) count = 0 -- 2.16.6