Deal with nfPackage 35/62235/1
authorbiancunkang <bian.cunkang@zte.com.cn>
Fri, 24 Aug 2018 01:59:26 +0000 (09:59 +0800)
committerbiancunkang <bian.cunkang@zte.com.cn>
Fri, 24 Aug 2018 01:59:26 +0000 (09:59 +0800)
Add query pnf

Change-Id: Ie3e1c61caaf200518f2fd98b32ae547d5b534f04
Issue-ID: VFC-1038
Signed-off-by: biancunkang <bian.cunkang@zte.com.cn>
catalog/packages/biz/pnf_descriptor.py
catalog/packages/urls.py
catalog/packages/views/pnf_descriptor_views.py

index ea9b9ae..87b6978 100644 (file)
@@ -87,3 +87,22 @@ def upload(files, pnfd_info_id):
             else:
                 data = remote_file.read()
                 local_file.write(data)
+
+
+def query_single(pnfdInfoId):
+    pkg_info = {}
+    pnf_pkg = PnfPackageModel.objects.filter(pnfPackageId=pnfdInfoId)
+    if not pnf_pkg.exists():
+        raise CatalogException('PNF descriptor (%s) does not exist.' % pnfdInfoId)
+    pkg_info["id"] = pnf_pkg[0].pnfPackageId
+    pkg_info["pnfdId"] = pkg_info[0].pnfdId
+    pkg_info["pnfdName"] = pnf_pkg[0].pnfdProductName
+    pkg_info["pnfdVersion"] = pnf_pkg[0].pnfdVersion
+    pkg_info["pnfdProvider"] = pnf_pkg[0].pnfVendor
+    pkg_info["pnfdInvariantId"] = ""  # TODO
+    pkg_info["pnfdOnboardingState"] = pnf_pkg[0].onboardingState
+    pkg_info["onboardingFailureDetails"] = ""  # TODO
+    pkg_info["pnfdUsageState"] = pnf_pkg[0].usageState
+    pkg_info["userDefinedData"] = pnf_pkg[0].userDefinedData
+    pkg_info["_links"] = ""  # TODO
+    return pkg_info
index 859c9c1..d6589b5 100644 (file)
@@ -36,7 +36,7 @@ urlpatterns = [
     url(r'^api/nsd/v1/pnf_descriptors/(?P<pnfdInfoId>[0-9a-zA-Z\-\_]+)/pnfd_content$', pnf_descriptor_views.pnfd_content_ru, name='pnfd_content_ru'),
     # TODO SOL005 & SOL003
 
-    # url(r'^api/nsd/v1/pnf_descriptors/(?P<pnfdInfoId>[0-9a-zA-Z\-\_]+)$', pnfd_info.as_view(), name='pnfd_info_rd'),
+    url(r'^api/nsd/v1/pnf_descriptors/(?P<pnfdInfoId>[0-9a-zA-Z\-\_]+)$', pnf_descriptor_views.pnfd_info_rd, name='pnfd_info_rd'),
 
     # url(r'^api/nsd/v1/subscriptions', nsd_subscriptions.as_view(), name='subscriptions_rc'),
     # url(r'^api/nsd/v1/subscriptions/(?P<subscriptionId>[0-9a-zA-Z\-\_]+)$', nsd_subscription.as_view(), name='subscription_rd'),
index 5b97027..76ec07e 100644 (file)
@@ -20,7 +20,7 @@ from rest_framework import status
 from rest_framework.decorators import api_view
 from rest_framework.response import Response
 
-from catalog.packages.biz.pnf_descriptor import create, query_multiple, upload
+from catalog.packages.biz.pnf_descriptor import create, query_multiple, upload, query_single
 from catalog.packages.serializers.create_pnfd_info_request import \
     CreatePnfdInfoRequestSerializer
 from catalog.packages.serializers.pnfd_info import PnfdInfoSerializer
@@ -31,27 +31,41 @@ logger = logging.getLogger(__name__)
 
 
 @swagger_auto_schema(
+    method='GET',
+    operation_description="Query an individual PNF descriptor resource",
+    request_body=no_body,
     responses={
-        # status.HTTP_200_OK: Serializer(),
+        status.HTTP_200_OK: PnfdInfoSerializer(),
         status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
     }
 )
-# @api_view(http_method_names=['GET'])
-def query_multiple_pnfds(self, request):
-    # TODO
-    return None
-
-
 @swagger_auto_schema(
+    method='DELETE',
+    operation_description="Delete an individual PNF descriptor resource",
+    request_body=no_body,
     responses={
-        # status.HTTP_200_OK: Serializer(),
+        status.HTTP_204_NO_CONTENT: None,
         status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
     }
 )
-# @api_view(http_method_names=['GET'])
-def query_single_pnfd(self, request):
-    # TODO
-    return None
+@api_view(http_method_names=['GET', 'DELETE'])
+def pnfd_info_rd(request, pnfdInfoId):
+    if request.method == 'GET':
+        logger.debug("Query an individual PNF descriptor> %s" % request.data)
+        try:
+            res = query_single(pnfdInfoId)
+            query_serializer = PnfdInfoSerializer(data=res)
+            if not query_serializer.is_valid():
+                raise CatalogException
+            return Response(data=query_serializer.data, status=status.HTTP_200_OK)
+        except CatalogException:
+            logger.error(traceback.format_exc())
+            return Response(data={'error': 'Query an individual PNF descriptor 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)
 
 
 @swagger_auto_schema(