Add VNFPKGM Query Subscription API 06/82006/3
authorBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Tue, 12 Mar 2019 07:56:11 +0000 (13:26 +0530)
committerBharath Thiruveedula <bharath.thiruveedula@verizon.com>
Tue, 12 Mar 2019 08:32:08 +0000 (14:02 +0530)
Issue-ID: VFC-1223
Change-Id: Ieca1591d1db27f0edb9948a11dec4affbe500cdc
Signed-off-by: Bharath Thiruveedula <bharath.thiruveedula@verizon.com>
catalog/packages/biz/vnf_pkg_subscription.py
catalog/packages/tests/test_vnf_pkg_subscription.py
catalog/packages/urls.py
catalog/packages/views/vnf_package_subscription_views.py
catalog/pub/exceptions.py

index e4772e5..9d4acb9 100755 (executable)
@@ -25,7 +25,7 @@ from rest_framework import status
 from catalog.packages import const
 from catalog.pub.database.models import VnfPkgSubscriptionModel
 from catalog.pub.exceptions import VnfPkgSubscriptionException,\
-    VnfPkgDuplicateSubscriptionException
+    VnfPkgDuplicateSubscriptionException, SubscriptionDoesNotExistsException
 from catalog.pub.utils.values import ignore_case_get
 
 
@@ -156,3 +156,14 @@ class QuerySubscription(object):
         if not subscriptions.exists():
             return []
         return [subscription.toDict() for subscription in subscriptions]
+
+    def query_single_subscription(self, subscription_id):
+        logger.debug("QuerySingleSubscriptions--get--single--subscription--biz::> "
+                     "ID: %s" % subscription_id)
+
+        subscription = VnfPkgSubscriptionModel.objects.filter(
+            subscription_id=subscription_id)
+        if not subscription.exists():
+            raise SubscriptionDoesNotExistsException("Subscription with ID: %s "
+                                                     "does not exists" % subscription_id)
+        return subscription[0].toDict()
index cd7b13a..40eb2af 100644 (file)
@@ -125,3 +125,31 @@ class TestNfPackageSubscription(TestCase):
         response = self.client.get("/api/vnfpkgm/v1/subscriptions?dummy=dummy",
                                    format='json')
         self.assertEqual(400, response.status_code)
+
+    @mock.patch("requests.get")
+    @mock.patch.object(uuid, 'uuid4')
+    def test_get_subscription_with_id(self, mock_uuid4, mock_requests):
+        temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
+        mock_requests.return_value.status_code = 204
+        mock_requests.get.status_code = 204
+        mock_uuid4.return_value = temp_uuid
+        self.client.post("/api/vnfpkgm/v1/subscriptions",
+                         data=self.vnf_subscription_data, format='json')
+        response = self.client.get("/api/vnfpkgm/v1/subscriptions/" + temp_uuid,
+                                   format='json')
+        self.assertEqual(200, response.status_code)
+        self.assertEqual(temp_uuid, response.data["id"])
+
+    @mock.patch("requests.get")
+    @mock.patch.object(uuid, 'uuid4')
+    def test_get_subscription_with_id_not_exists(self, mock_uuid4, mock_requests):
+        temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
+        dummy_uuid = str(uuid.uuid4())
+        mock_requests.return_value.status_code = 204
+        mock_requests.get.status_code = 204
+        mock_uuid4.return_value = temp_uuid
+        self.client.post("/api/vnfpkgm/v1/subscriptions",
+                         data=self.vnf_subscription_data, format='json')
+        response = self.client.get("/api/vnfpkgm/v1/subscriptions/" + dummy_uuid,
+                                   format='json')
+        self.assertEqual(404, response.status_code)
index a4e3010..3de7361 100755 (executable)
@@ -15,7 +15,7 @@
 from django.conf.urls import url
 
 from catalog.packages.views import vnf_package_views
-from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView
+from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView, QueryTerminateSubscriptionView
 from catalog.packages.views import catalog_views, ns_descriptor_views, pnf_descriptor_views, nsdm_subscription_views
 
 
@@ -52,6 +52,7 @@ urlpatterns = [
 
     # ETSI SOL 005 VNF Package Management Subscription APIs
     url(r'^api/vnfpkgm/v1/subscriptions$', CreateQuerySubscriptionView.as_view(), name='subscriptions_create_query'),
+    url(r'^api/vnfpkgm/v1/subscriptions/(?P<subscriptionId>[0-9a-zA-Z\-\_]+)$', QueryTerminateSubscriptionView.as_view(), name='subscriptions_query_terminate'),
     # url(r'^api/vnfpkgm/v1/subscriptions/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)$', vnf_package_subscription_views.vnf_package_subscriptions_rc, name='subscriptions_rc'),
     # url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/vnfd$', vnfd.as_view(), name='vnfd_r'),# url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/artifacts/artifactPath$', artifacts.as_view(), name='artifacts_r'),
 
index 546382e..24bcd4e 100755 (executable)
@@ -26,7 +26,8 @@ from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRe
 from catalog.packages.serializers.response import ProblemDetailsSerializer
 from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription, QuerySubscription
 from catalog.packages.views.common import validate_data
-from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException
+from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException, \
+    SubscriptionDoesNotExistsException
 
 logger = logging.getLogger(__name__)
 VALID_FILTERS = ["callbackUri", "notificationTypes", "vnfdId", "vnfPkgId", "operationalState", "usageState"]
@@ -99,3 +100,37 @@ class CreateQuerySubscriptionView(APIView):
             problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR,
                                                                         traceback.format_exc())
             return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
+class QueryTerminateSubscriptionView(APIView):
+
+    @swagger_auto_schema(
+        responses={
+            status.HTTP_200_OK: PkgmSubscriptionSerializer(),
+            status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+        }
+    )
+    def get(self, request, subscriptionId):
+        logger.debug("SubscribeNotification--get::> %s" % subscriptionId)
+        try:
+
+            resp_data = QuerySubscription().query_single_subscription(subscriptionId)
+
+            subscription_serializer = PkgmSubscriptionSerializer(data=resp_data)
+            if not subscription_serializer.is_valid():
+                raise VnfPkgSubscriptionException(subscription_serializer.errors)
+
+            return Response(data=subscription_serializer.data, status=status.HTTP_200_OK)
+        except SubscriptionDoesNotExistsException 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_500_INTERNAL_SERVER_ERROR,
+                                                                        traceback.format_exc())
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
index 81379d7..96c2fd9 100644 (file)
@@ -29,6 +29,10 @@ class VnfPkgDuplicateSubscriptionException(CatalogException):
     pass
 
 
+class SubscriptionDoesNotExistsException(CatalogException):
+    pass
+
+
 class NsdmBadRequestException(CatalogException):
     pass