X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog%2Fpackages%2Fviews%2Fvnf_package_views.py;h=088559afca25e95b0ca0ce45342c7a561206d834;hb=b16b4579ea80bf82fa497e4934b2bb8728845b58;hp=6747269dc06d6c741b5949fbcb609adb03311ba3;hpb=b301e35367f860fae335c85227795008b531d79b;p=modeling%2Fetsicatalog.git diff --git a/catalog/packages/views/vnf_package_views.py b/catalog/packages/views/vnf_package_views.py index 6747269..088559a 100644 --- a/catalog/packages/views/vnf_package_views.py +++ b/catalog/packages/views/vnf_package_views.py @@ -16,6 +16,7 @@ import logging from django.http import StreamingHttpResponse from drf_yasg.utils import swagger_auto_schema, no_body +from drf_yasg import openapi from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response @@ -29,8 +30,9 @@ from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInf 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 validate_data, validate_req_data from .common import view_safe_call_with_log +from catalog.swagger.views import EtsiCatalogFileAutoSchema logger = logging.getLogger(__name__) @@ -42,7 +44,8 @@ logger = logging.getLogger(__name__) request_body=no_body, responses={ status.HTTP_200_OK: VnfPkgInfosSerializer(), - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + openapi.Schema(type=openapi.TYPE_STRING)) } ) @swagger_auto_schema( @@ -52,41 +55,56 @@ logger = logging.getLogger(__name__) request_body=CreateVnfPkgInfoRequestSerializer, responses={ status.HTTP_201_CREATED: VnfPkgInfoSerializer(), - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_400_BAD_REQUEST: openapi.Response("Bad Request", schema=openapi.Schema(type=openapi.TYPE_STRING)), + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @api_view(http_method_names=["GET", "POST"]) @view_safe_call_with_log(logger=logger) def vnf_packages_rc(request): if request.method == 'GET': + # Query VNF packages information logger.debug("Query VNF packages> %s" % request.data) data = VnfPackage().query_multiple() validate_data(data, VnfPkgInfosSerializer) return Response(data=data, status=status.HTTP_200_OK) if request.method == 'POST': + # Create a new individual VNF package resource logger.debug("Create VNF package> %s" % request.data) - create_vnf_pkg_info_request = validate_data(request.data, - CreateVnfPkgInfoRequestSerializer) + create_vnf_pkg_info_request = validate_req_data(request.data, CreateVnfPkgInfoRequestSerializer) data = VnfPackage().create_vnf_pkg(create_vnf_pkg_info_request.data) validate_data(data, VnfPkgInfoSerializer) return Response(data=data, status=status.HTTP_201_CREATED) @swagger_auto_schema( + auto_schema=EtsiCatalogFileAutoSchema, method="GET", operation_description="Read VNFD of an on-boarded VNF package", tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ - status.HTTP_200_OK: VnfPkgInfosSerializer(), - status.HTTP_404_NOT_FOUND: "VNF package does not exist", - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" - } + status.HTTP_200_OK: openapi.Response('VNFD of an on-boarded VNF package', + schema=openapi.Schema(format=openapi.FORMAT_BINARY, + type=openapi.TYPE_STRING)), + status.HTTP_404_NOT_FOUND: openapi.Response("VNF package does not exist", + schema=openapi.Schema(type=openapi.TYPE_STRING)), + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) + }, + operation_id='VNFD of an on-boarded VNF package' ) @api_view(http_method_names=["GET"]) @view_safe_call_with_log(logger=logger) def vnfd_rd(request, **kwargs): + """ + Get the VNFD by VNF package id + :param request: + :param kwargs: + :return: + """ vnf_pkg_id = kwargs.get("vnfPkgId") logger.debug("Read VNFD for VNF package %s" % vnf_pkg_id) try: @@ -104,18 +122,24 @@ def vnfd_rd(request, **kwargs): request_body=no_body, responses={ status.HTTP_202_ACCEPTED: "Successfully", - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @swagger_auto_schema( + auto_schema=EtsiCatalogFileAutoSchema, method="GET", operation_description="Fetch VNF package content", tags=[TAG_VNF_PACKAGE_API], request_body=no_body, responses={ - 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" + status.HTTP_200_OK: openapi.Response('VNF package file', + schema=openapi.Schema(format=openapi.FORMAT_BINARY, + type=openapi.TYPE_STRING)), + status.HTTP_404_NOT_FOUND: openapi.Response("VNF package does not exist", + schema=openapi.Schema(type=openapi.TYPE_STRING)), + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @api_view(http_method_names=["PUT", "GET"]) @@ -123,6 +147,7 @@ def vnfd_rd(request, **kwargs): def package_content_ru(request, **kwargs): vnf_pkg_id = kwargs.get("vnfPkgId") if request.method == "PUT": + # Upload a VNF package by providing the content of the VNF package logger.debug("Upload VNF package %s" % vnf_pkg_id) files = request.FILES.getlist('file') try: @@ -134,6 +159,7 @@ def package_content_ru(request, **kwargs): raise e if request.method == "GET": + # Fetch an on-boarded VNF package file_range = request.META.get('HTTP_RANGE') file_iterator = VnfPackage().download(vnf_pkg_id, file_range) return StreamingHttpResponse(file_iterator, status=status.HTTP_200_OK) @@ -146,16 +172,24 @@ def package_content_ru(request, **kwargs): request_body=UploadVnfPackageFromUriRequestSerializer, responses={ status.HTTP_202_ACCEPTED: "Successfully", - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_400_BAD_REQUEST: openapi.Response("Bad Request", schema=openapi.Schema(type=openapi.TYPE_STRING)), + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @api_view(http_method_names=['POST']) @view_safe_call_with_log(logger=logger) def upload_from_uri_c(request, **kwargs): + """ + Upload a VNF package by providing the address information of the VNF package + :param request: + :param kwargs: + :return: + """ vnf_pkg_id = kwargs.get("vnfPkgId") try: - upload_vnf_from_uri_request = validate_data(request.data, - UploadVnfPackageFromUriRequestSerializer) + upload_vnf_from_uri_request = validate_req_data(request.data, + UploadVnfPackageFromUriRequestSerializer) VnfPkgUploadThread(upload_vnf_from_uri_request.data, vnf_pkg_id).start() return Response(None, status=status.HTTP_202_ACCEPTED) except Exception as e: @@ -170,8 +204,10 @@ def upload_from_uri_c(request, **kwargs): request_body=no_body, responses={ status.HTTP_200_OK: VnfPkgInfoSerializer(), - status.HTTP_404_NOT_FOUND: "VNF package does not exist", - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_404_NOT_FOUND: openapi.Response("VNF package does not exist", + schema=openapi.Schema(type=openapi.TYPE_STRING)), + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @swagger_auto_schema( @@ -181,7 +217,8 @@ def upload_from_uri_c(request, **kwargs): request_body=no_body, responses={ status.HTTP_204_NO_CONTENT: "No content", - status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response("Internal error", + schema=openapi.Schema(type=openapi.TYPE_STRING)) } ) @api_view(http_method_names=['GET', 'DELETE']) @@ -189,12 +226,14 @@ def upload_from_uri_c(request, **kwargs): def vnf_package_rd(request, **kwargs): vnf_pkg_id = kwargs.get("vnfPkgId") if request.method == 'GET': + # Read information about an individual VNF package logger.debug("Query an individual VNF package> %s" % request.data) data = VnfPackage().query_single(vnf_pkg_id) validate_data(data, VnfPkgInfoSerializer) return Response(data=data, status=status.HTTP_200_OK) if request.method == 'DELETE': + # Delete an individual VNF package logger.debug("Delete an individual VNF package> %s" % request.data) VnfPackage().delete_vnf_pkg(vnf_pkg_id) return Response(data=None, status=status.HTTP_204_NO_CONTENT)