From af72aaddd526af2942daa75c1f9a6edc929ed1c4 Mon Sep 17 00:00:00 2001 From: biancunkang Date: Thu, 23 Aug 2018 10:44:37 +0800 Subject: [PATCH] Deal with nfPackage Rename nf_package to vnfpackage and seperate views from the old one Change-Id: Id3dd306fbb2fd43d3c5986875dbc2dcf47719ccb Issue-ID: VFC-1038 Signed-off-by: biancunkang --- .../packages/biz/{nf_package.py => vnfpackage.py} | 0 catalog/packages/tests/test_nf.py | 4 +- catalog/packages/views/catalog_views.py | 12 ++--- catalog/packages/views/vnf_package_views.py | 59 +++++++++++++++++++++- catalog/packages/views/vnfpkg_views.py | 4 +- 5 files changed, 68 insertions(+), 11 deletions(-) rename catalog/packages/biz/{nf_package.py => vnfpackage.py} (100%) diff --git a/catalog/packages/biz/nf_package.py b/catalog/packages/biz/vnfpackage.py similarity index 100% rename from catalog/packages/biz/nf_package.py rename to catalog/packages/biz/vnfpackage.py diff --git a/catalog/packages/tests/test_nf.py b/catalog/packages/tests/test_nf.py index 576c956c..85f45baf 100644 --- a/catalog/packages/tests/test_nf.py +++ b/catalog/packages/tests/test_nf.py @@ -20,13 +20,13 @@ from rest_framework.test import APIClient from django.test import TestCase from rest_framework import status -from catalog.packages.biz.nf_package import NfDistributeThread, NfPkgDeleteThread +from catalog.packages.biz.vnfpackage import NfDistributeThread, NfPkgDeleteThread from catalog.pub.database.models import JobStatusModel, JobModel from catalog.pub.database.models import VnfPackageModel from catalog.pub.msapi import sdc from catalog.pub.utils import restcall, toscaparser from catalog.pub.config.config import CATALOG_ROOT_PATH -from catalog.packages.biz.nf_package import VnfpkgUploadThread +from catalog.packages.biz.vnfpackage import VnfpkgUploadThread class MockReq(): diff --git a/catalog/packages/views/catalog_views.py b/catalog/packages/views/catalog_views.py index 5fc62622..b735cb56 100644 --- a/catalog/packages/views/catalog_views.py +++ b/catalog/packages/views/catalog_views.py @@ -21,7 +21,7 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from catalog.packages.biz import nf_package, ns_package +from catalog.packages.biz import vnfpackage, ns_package from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer from catalog.packages.serializers.catalog_serializers import NfPackageDistributeRequestSerializer from catalog.packages.serializers.catalog_serializers import NfPackageSerializer @@ -114,7 +114,7 @@ def nfpackages_rc(request, *args, **kwargs): request.method) ret, normal_status, response_serializer, validation_error = None, None, None, None if request.method == 'GET': - ret = nf_package.nf_get_csars() + ret = vnfpackage.nf_get_csars() normal_status = status.HTTP_200_OK response_serializer = NfPackagesSerializer(data=ret[1]) elif request.method == 'POST': @@ -129,7 +129,7 @@ def nfpackages_rc(request, *args, **kwargs): vim_ids = ignore_case_get(request_serivalizer.data, "vimIds") lab_vim_id = ignore_case_get(request_serivalizer.data, "labVimId") job_id = str(uuid.uuid4()) - nf_package.NfDistributeThread( + vnfpackage.NfDistributeThread( csar_id, vim_ids, lab_vim_id, job_id).start() ret = [0, {"jobId": job_id}] normal_status = status.HTTP_202_ACCEPTED @@ -249,13 +249,13 @@ def nf_rd_csar(request, *args, **kwargs): ret, normal_status, response_serializer, validation_error = None, None, None, None if request.method == 'GET': - ret = nf_package.nf_get_csar(csar_id) + ret = vnfpackage.nf_get_csar(csar_id) normal_status = status.HTTP_200_OK response_serializer = NfPackageSerializer(data=ret[1]) elif request.method == 'DELETE': job_id = str(uuid.uuid4()) - nf_package.NfPkgDeleteThread(csar_id, job_id).start() + vnfpackage.NfPkgDeleteThread(csar_id, job_id).start() ret = [0, {"jobId": job_id}] normal_status = status.HTTP_202_ACCEPTED response_serializer = PostJobResponseSerializer(data=ret[1]) @@ -324,7 +324,7 @@ def vnf_model_parser(request, *args, **kwargs): fun_name(), csar_id, inputs) - ret = nf_package.parse_vnfd(csar_id, inputs) + ret = vnfpackage.parse_vnfd(csar_id, inputs) logger.info("Leave %s, Return value is %s", fun_name(), ret) if ret[0] != 0: return Response( diff --git a/catalog/packages/views/vnf_package_views.py b/catalog/packages/views/vnf_package_views.py index e3a5d698..11de348d 100644 --- a/catalog/packages/views/vnf_package_views.py +++ b/catalog/packages/views/vnf_package_views.py @@ -14,14 +14,18 @@ import traceback import logging +import os + +from catalog.pub.config.config import CATALOG_ROOT_PATH from drf_yasg.utils import swagger_auto_schema, no_body from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from catalog.pub.exceptions import CatalogException +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.biz.vnf_package import create_vnf_pkg, query_multiple +from catalog.packages.biz.vnf_package import create_vnf_pkg, query_multiple, VnfpkgUploadThread logger = logging.getLogger(__name__) @@ -80,3 +84,56 @@ def vnf_packages_rc(request): logger.error(e.message) logger.error(traceback.format_exc()) return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + +@swagger_auto_schema( + method='PUT', + operation_description="Upload VNF package content", + request_body=no_body, + responses={ + status.HTTP_202_ACCEPTED: "Successfully", + status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + } +) +@api_view(http_method_names=['PUT']) +def upload_vnf_pkg_content(request, vnfPkgId): + logger.debug("UploadVnf %s" % vnfPkgId) + file_object = request.FILES.get('file') + upload_path = os.path.join(CATALOG_ROOT_PATH, vnfPkgId) + if not os.path.exists(upload_path): + os.makedirs(upload_path, 0o777) + try: + upload_file_name = os.path.join(upload_path, file_object.name) + with open(upload_file_name, 'wb+') as dest_file: + for chunk in file_object.chunks(): + dest_file.write(chunk) + except Exception as e: + logger.error("File upload exception.[%s:%s]" % (type(e), str(e))) + logger.error("%s", traceback.format_exc()) + return Response(None, status.HTTP_202_ACCEPTED) + + +@swagger_auto_schema( + method='POST', + operation_description="Upload VNF package content from uri", + request_body=UploadVnfPackageFromUriRequestSerializer, + responses={ + status.HTTP_202_ACCEPTED: "Successfully", + status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error" + } +) +@api_view(http_method_names=['POST']) +def upload_vnf_pkg_from_uri(request, vnfPkgId): + try: + req_serializer = UploadVnfPackageFromUriRequestSerializer(data=request.data) + if not req_serializer.is_valid(): + raise CatalogException + VnfpkgUploadThread(req_serializer.data, vnfPkgId).start() + return Response(None, status=status.HTTP_202_ACCEPTED) + except CatalogException: + logger.error(traceback.format_exc()) + return Response(data={'error': 'Upload vnfPkg failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + except Exception as e: + logger.error(e.message) + logger.error(traceback.format_exc()) + return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) diff --git a/catalog/packages/views/vnfpkg_views.py b/catalog/packages/views/vnfpkg_views.py index fc019770..5b5e4e86 100644 --- a/catalog/packages/views/vnfpkg_views.py +++ b/catalog/packages/views/vnfpkg_views.py @@ -20,12 +20,12 @@ 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 catalog.packages.biz.nf_package import VnfpkgUploadThread +from catalog.packages.biz.vnfpackage import VnfpkgUploadThread from catalog.pub.exceptions import CatalogException 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.biz.nf_package import create_vnf_pkg, query_multiple +from catalog.packages.biz.vnfpackage import create_vnf_pkg, query_multiple logger = logging.getLogger(__name__) -- 2.16.6