Add get and del subscription api 95/91495/1
authorfujinhua <fu.jinhua@zte.com.cn>
Tue, 16 Jul 2019 08:04:45 +0000 (16:04 +0800)
committerfujinhua <fu.jinhua@zte.com.cn>
Tue, 16 Jul 2019 08:04:45 +0000 (16:04 +0800)
Change-Id: I38957770ca9a92571ecfd8cd44b779324eec0b3b
Issue-ID: VFC-1429
Signed-off-by: fujinhua <fu.jinhua@zte.com.cn>
lcm/lcm/nf/biz/delete_subscription.py [new file with mode: 0644]
lcm/lcm/nf/biz/query_subscription.py
lcm/lcm/nf/urls.py
lcm/lcm/nf/views/subscriptions_view.py

diff --git a/lcm/lcm/nf/biz/delete_subscription.py b/lcm/lcm/nf/biz/delete_subscription.py
new file mode 100644 (file)
index 0000000..387aa5d
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2019 ZTE. All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+
+from lcm.pub.database.models import SubscriptionModel
+from lcm.pub.exceptions import NFLCMException
+
+logger = logging.getLogger(__name__)
+
+
+class DeleteSubscription:
+    def __init__(self, subscription_id):
+        self.subscription_id = subscription_id
+
+    def delete_single_subscription(self):
+        subscription = SubscriptionModel.objects.filter(subscription_id=self.subscription_id)
+        if not subscription.exists():
+            raise NFLCMException('Subscription(%s) does not exist' % self.subscription_id)
+        subscription.delete()
index f2270d0..7702f60 100644 (file)
@@ -35,6 +35,12 @@ class QuerySubscription:
         self.subscription_id = subscription_id
         self.params = data
 
+    def query_single_subscription(self):
+        subscription = SubscriptionModel.objects.filter(subscription_id=self.subscription_id)
+        if not subscription.exists():
+            raise NFLCMException('Subscription(%s) does not exist' % self.subscription_id)
+        return self.fill_resp_data(subscription)
+
     def query_multi_subscriptions(self):
         query_data = {}
         logger.debug("QueryMultiSubscriptions--get--biz::> Check for filters in query params" % self.params)
index 3fdb343..5ab3234 100644 (file)
@@ -18,6 +18,7 @@ from lcm.nf.views.curd_vnf_views import DeleteVnfAndQueryVnf, CreateVnfAndQueryV
 from lcm.nf.views.instantiate_vnf_view import InstantiateVnfView
 from lcm.nf.views.terminate_vnf_view import TerminateVnfView
 from lcm.nf.views.subscriptions_view import SubscriptionsView
+from lcm.nf.views.subscriptions_view import SubscriptionDetailView
 from lcm.nf.views.heal_vnf_view import HealVnfView
 from lcm.nf.views.operate_vnf_view import OperateVnfView
 from lcm.nf.views.scale_vnf_view import ScaleVnfView
@@ -28,6 +29,7 @@ from lcm.nf.views.lcm_op_occs_view import QueryMultiVnfLcmOpOccs, QuerySingleVnf
 
 urlpatterns = [
     url(r'^api/vnflcm/v1/subscriptions$', SubscriptionsView.as_view()),
+    url(r'^api/vnflcm/v1/subscriptions/(?P<subscriptionid>[0-9a-zA-Z_-]+)$', SubscriptionDetailView.as_view()),
     url(r'^api/vnflcm/v1/vnf_instances$', CreateVnfAndQueryVnfs.as_view()),
     url(r'^api/vnflcm/v1/vnf_instances/(?P<instanceid>[0-9a-zA-Z_-]+)/instantiate$', InstantiateVnfView.as_view()),
     url(r'^api/vnflcm/v1/vnf_instances/(?P<instanceid>[0-9a-zA-Z_-]+)$', DeleteVnfAndQueryVnf.as_view()),
index 95b3772..547e012 100644 (file)
@@ -17,8 +17,6 @@ import json
 import logging\r
 \r
 from drf_yasg.utils import swagger_auto_schema\r
-from lcm.nf.biz.create_subscription import CreateSubscription\r
-from lcm.nf.biz.query_subscription import QuerySubscription\r
 from rest_framework import status\r
 from rest_framework.response import Response\r
 from rest_framework.views import APIView\r
@@ -28,6 +26,9 @@ from lcm.nf.serializers.lccn_subscription import LccnSubscriptionSerializer
 from lcm.nf.serializers.lccn_subscriptions import LccnSubscriptionsSerializer\r
 from lcm.nf.serializers.response import ProblemDetailsSerializer\r
 from lcm.pub.exceptions import NFLCMException, NFLCMExceptionBadRequest\r
+from lcm.nf.biz.create_subscription import CreateSubscription\r
+from lcm.nf.biz.query_subscription import QuerySubscription\r
+from lcm.nf.biz.delete_subscription import DeleteSubscription\r
 from .common import view_safe_call_with_log\r
 \r
 logger = logging.getLogger(__name__)\r
@@ -106,3 +107,43 @@ class SubscriptionsView(APIView):
 \r
         logger.debug("SubscribeNotification--get::> Remove default fields")\r
         return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)\r
+\r
+\r
+class SubscriptionDetailView(APIView):\r
+    @swagger_auto_schema(\r
+        responses={\r
+            status.HTTP_200_OK: LccnSubscriptionSerializer(),\r
+            status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),\r
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
+        }\r
+    )\r
+    @view_safe_call_with_log(logger=logger)\r
+    def get(self, request, subscriptionid):\r
+        logger.debug("SubscriptionDetailView--get::> %s" % subscriptionid)\r
+\r
+        resp_data = QuerySubscription(\r
+            subscription_id=subscriptionid\r
+        ).query_single_subscription()\r
+\r
+        subscription_serializer = LccnSubscriptionSerializer(data=resp_data)\r
+        if not subscription_serializer.is_valid():\r
+            raise NFLCMException(subscription_serializer.errors)\r
+\r
+        return Response(data=resp_data, status=status.HTTP_200_OK)\r
+\r
+    @swagger_auto_schema(\r
+        responses={\r
+            status.HTTP_204_NO_CONTENT: "",\r
+            status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),\r
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
+        }\r
+    )\r
+    @view_safe_call_with_log(logger=logger)\r
+    def delete(self, request, subscriptionid):\r
+        logger.debug("SubscriptionDetailView--delete::> %s" % subscriptionid)\r
+\r
+        DeleteSubscription(\r
+            subscription_id=subscriptionid\r
+        ).delete_single_subscription()\r
+\r
+        return Response(status=status.HTTP_204_NO_CONTENT)\r