diff options
-rw-r--r-- | catalog/packages/biz/vnf_pkg_artifacts.py | 7 | ||||
-rw-r--r-- | catalog/packages/tests/test_vnf_package.py | 2 | ||||
-rw-r--r-- | catalog/packages/views/common.py | 7 | ||||
-rw-r--r-- | catalog/packages/views/vnf_package_artifact_views.py | 49 |
4 files changed, 25 insertions, 40 deletions
diff --git a/catalog/packages/biz/vnf_pkg_artifacts.py b/catalog/packages/biz/vnf_pkg_artifacts.py index 1077228a..d8a77488 100644 --- a/catalog/packages/biz/vnf_pkg_artifacts.py +++ b/catalog/packages/biz/vnf_pkg_artifacts.py @@ -25,10 +25,11 @@ class FetchVnfPkgArtifact(object): def fetch(self, vnfPkgId, artifactPath): logger.debug("FetchVnfPkgArtifact--get--single--artifact--biz::>" "ID: %s path: %s" % (vnfPkgId, artifactPath)) - vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnfPkgId).get() - if not vnf_pkg: + vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnfPkgId) + if not vnf_pkg.exists(): err_msg = "NF Package (%s) doesn't exists." % vnfPkgId - return ResourceNotFoundException(err_msg) + raise ResourceNotFoundException(err_msg) + vnf_pkg = vnf_pkg.get() local_path = vnf_pkg.localFilePath if local_path.endswith(".csar") or local_path.endswith(".zip"): vnf_extract_path = fileutil.unzip_csar_to_tmp(local_path) diff --git a/catalog/packages/tests/test_vnf_package.py b/catalog/packages/tests/test_vnf_package.py index 135c9838..e83aa7a3 100644 --- a/catalog/packages/tests/test_vnf_package.py +++ b/catalog/packages/tests/test_vnf_package.py @@ -346,7 +346,7 @@ class TestVnfPackage(TestCase): mock_parse_vnfd.return_value = json.JSONEncoder().encode(vnfd_data) response = self.client.put("/api/vnfpkgm/v1/vnf_packages/222/package_content", data=data) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) - response = self.client.get("/api/vnfpkgm/v1/vnf_packages/2224/artifacts/image") + response = self.client.get("/api/vnfpkgm/v1/vnf_packages/1451/artifacts/image") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) @mock.patch.object(toscaparser, 'parse_vnfd') diff --git a/catalog/packages/views/common.py b/catalog/packages/views/common.py index f7e3f708..e902f578 100644 --- a/catalog/packages/views/common.py +++ b/catalog/packages/views/common.py @@ -22,6 +22,7 @@ from catalog.pub.exceptions import CatalogException from catalog.pub.exceptions import NsdmBadRequestException from catalog.pub.exceptions import PackageNotFoundException from catalog.pub.exceptions import ResourceNotFoundException +from catalog.pub.exceptions import ArtifactNotFoundException logger = logging.getLogger(__name__) @@ -65,6 +66,12 @@ def view_safe_call_with_log(logger): detail=e.message, status=status.HTTP_404_NOT_FOUND ) + except ArtifactNotFoundException as e: + logger.error(e.message) + return make_error_resp( + detail=e.message, + status=status.HTTP_404_NOT_FOUND + ) except NsdmBadRequestException as e: logger.error(e.message) return make_error_resp( diff --git a/catalog/packages/views/vnf_package_artifact_views.py b/catalog/packages/views/vnf_package_artifact_views.py index c321ccaa..75ae8be2 100644 --- a/catalog/packages/views/vnf_package_artifact_views.py +++ b/catalog/packages/views/vnf_package_artifact_views.py @@ -12,32 +12,27 @@ # See the License for the specific language governing permissions and # limitations under the License. - -import traceback 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 django.http import FileResponse from catalog.packages.serializers.response import ProblemDetailsSerializer from catalog.packages.biz.vnf_pkg_artifacts import FetchVnfPkgArtifact -from catalog.pub.exceptions import ResourceNotFoundException, ArtifactNotFoundException +from .common import view_safe_call_with_log logger = logging.getLogger(__name__) -VALID_FILTERS = ["callbackUri", "notificationTypes", "vnfdId", "vnfPkgId", "operationalState", "usageState"] - -def get_problem_details_serializer(status_code, error_message): - problem_details = { - "status": status_code, - "detail": error_message - } - problem_details_serializer = ProblemDetailsSerializer(data=problem_details) - problem_details_serializer.is_valid() - return problem_details_serializer +VALID_FILTERS = [ + "callbackUri", + "notificationTypes", + "vnfdId", + "vnfPkgId", + "operationalState", + "usageState" +] class FetchVnfPkgmArtifactsView(APIView): @@ -49,29 +44,11 @@ class FetchVnfPkgmArtifactsView(APIView): status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer() } ) + @view_safe_call_with_log(logger=logger) def get(self, request, vnfPkgId, artifactPath): logger.debug("FetchVnfPkgmArtifactsView--get::> ") - try: - resp_data = FetchVnfPkgArtifact().fetch(vnfPkgId, artifactPath) - response = FileResponse(resp_data) + resp_data = FetchVnfPkgArtifact().fetch(vnfPkgId, artifactPath) + response = FileResponse(resp_data) - return response - except ResourceNotFoundException as e: - logger.error(e.message) - logger.error(traceback.format_exc()) - problem_details_serializer = get_problem_details_serializer(status.HTTP_404_NOT_FOUND, - traceback.format_exc()) - return Response(data=problem_details_serializer.data, status=status.HTTP_404_NOT_FOUND) - except ArtifactNotFoundException as e: - logger.error(e.message) - logger.error(traceback.format_exc()) - problem_details_serializer = get_problem_details_serializer(status.HTTP_404_NOT_FOUND, - traceback.format_exc()) - return Response(data=problem_details_serializer.data, status=status.HTTP_404_NOT_FOUND) - except Exception as e: - logger.error(e.message) - logger.error(traceback.format_exc()) - problem_details_serializer = get_problem_details_serializer(status.HTTP_404_NOT_FOUND, - traceback.format_exc()) - return Response(data=problem_details_serializer.data, status=status.HTTP_404_NOT_FOUND) + return response |