Refactor codes for subscription
[vfc/nfvo/lcm.git] / lcm / ns / views / sol / subscriptions_view.py
index d962d1d..c10e501 100644 (file)
@@ -15,7 +15,6 @@
 import ast
 import json
 import logging
-import traceback
 
 from drf_yasg.utils import swagger_auto_schema
 from lcm.ns.serializers.sol.lccn_subscription import LccnSubscriptionSerializer
@@ -30,10 +29,18 @@ from lcm.ns.serializers.sol.lccn_subscription_request import LccnSubscriptionReq
 from lcm.ns.serializers.sol.pub_serializers import ProblemDetailsSerializer
 from lcm.pub.exceptions import NSLCMException
 from lcm.pub.exceptions import BadRequestException
+from .common import view_safe_call_with_log
 
 logger = logging.getLogger(__name__)
-VALID_FILTERS = ["operationTypes", "operationStates", "notificationTypes", "nsInstanceId",
-                 "nsComponentTypes", "lcmOpNameImpactingNsComponent", "lcmOpOccStatusImpactingNsComponent"]
+VALID_FILTERS = [
+    "operationTypes",
+    "operationStates",
+    "notificationTypes",
+    "nsInstanceId",
+    "nsComponentTypes",
+    "lcmOpNameImpactingNsComponent",
+    "lcmOpOccStatusImpactingNsComponent"
+]
 
 
 def get_problem_details_serializer(status_code, error_message):
@@ -56,54 +63,39 @@ class SubscriptionsView(APIView):
             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
         }
     )
+    @view_safe_call_with_log(logger=logger)
     def post(self, request):
         logger.debug("SubscribeNotification--post::> %s" % request.data)
-        try:
-            lccn_subscription_request_serializer = LccnSubscriptionRequestSerializer(
-                data=request.data)
-            if not lccn_subscription_request_serializer.is_valid():
-                raise BadRequestException(
-                    lccn_subscription_request_serializer.errors)
-            subscription = CreateSubscription(
-                lccn_subscription_request_serializer.data).do_biz()
-            lccn_notifications_filter = {
-                "notificationTypes": ast.literal_eval(subscription.notification_types),
-                "operationTypes": ast.literal_eval(subscription.operation_types),
-                "operationStates": ast.literal_eval(subscription.operation_states),
-                "nsInstanceSubscriptionFilter": json.loads(subscription.ns_instance_filter),
-                "nsComponentTypes": ast.literal_eval(subscription.ns_component_types),
-                "lcmOpNameImpactingNsComponent": ast.literal_eval(subscription.
-                                                                  lcm_opname_impacting_nscomponent),
-                "lcmOpOccStatusImpactingNsComponent": ast.literal_eval(subscription.
-                                                                       lcm_opoccstatus_impacting_nscomponent)
-            }
-            subscription_data = {
-                "id": subscription.subscription_id,
-                "callbackUri": subscription.callback_uri,
-                "_links": json.loads(subscription.links),
-                "filter": lccn_notifications_filter
-            }
-            sub_resp_serializer = LccnSubscriptionSerializer(
-                data=subscription_data)
-            if not sub_resp_serializer.is_valid():
-                raise NSLCMException(sub_resp_serializer.errors)
-            return Response(data=sub_resp_serializer.data, status=status.HTTP_201_CREATED)
-        except BadRequestException as e:
-            logger.error("Exception in InstantiateNsView: %s", e.message)
-            data = {'status': status.HTTP_400_BAD_REQUEST, 'detail': e.message}
-            return Response(data=data, status=status.HTTP_400_BAD_REQUEST)
-        except NSLCMException as e:
-            logger.error(e.message)
-            if "exists" in e.message:
-                data = {'status': status.HTTP_303_SEE_OTHER, 'detail': e.message}
-                return Response(data=data, status=status.HTTP_303_SEE_OTHER)
-            data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message}
-            return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-        except Exception as e:
-            logger.error(e.message)
-            logger.error(traceback.format_exc())
-            data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message}
-            return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+        lccn_subscription_request_serializer = LccnSubscriptionRequestSerializer(
+            data=request.data)
+        if not lccn_subscription_request_serializer.is_valid():
+            raise BadRequestException(
+                lccn_subscription_request_serializer.errors)
+        subscription = CreateSubscription(
+            lccn_subscription_request_serializer.data).do_biz()
+        lccn_notifications_filter = {
+            "notificationTypes": ast.literal_eval(subscription.notification_types),
+            "operationTypes": ast.literal_eval(subscription.operation_types),
+            "operationStates": ast.literal_eval(subscription.operation_states),
+            "nsInstanceSubscriptionFilter": json.loads(subscription.ns_instance_filter),
+            "nsComponentTypes": ast.literal_eval(subscription.ns_component_types),
+            "lcmOpNameImpactingNsComponent": ast.literal_eval(subscription.
+                                                              lcm_opname_impacting_nscomponent),
+            "lcmOpOccStatusImpactingNsComponent": ast.literal_eval(subscription.
+                                                                   lcm_opoccstatus_impacting_nscomponent)
+        }
+        subscription_data = {
+            "id": subscription.subscription_id,
+            "callbackUri": subscription.callback_uri,
+            "_links": json.loads(subscription.links),
+            "filter": lccn_notifications_filter
+        }
+        sub_resp_serializer = LccnSubscriptionSerializer(
+            data=subscription_data)
+        if not sub_resp_serializer.is_valid():
+            raise NSLCMException(sub_resp_serializer.errors)
+        return Response(data=sub_resp_serializer.data, status=status.HTTP_201_CREATED)
 
     @swagger_auto_schema(
         responses={
@@ -112,30 +104,18 @@ class SubscriptionsView(APIView):
             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
         }
     )
+    @view_safe_call_with_log(logger=logger)
     def get(self, request):
         logger.debug("SubscribeNotification--get::> %s" % request.query_params)
-        try:
-            if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):
-                problem_details_serializer = get_problem_details_serializer(
-                    status.HTTP_400_BAD_REQUEST, "Not a valid filter")
-                return Response(data=problem_details_serializer.data, status=status.HTTP_400_BAD_REQUEST)
-            resp_data = QuerySubscription(request.query_params).query_multi_subscriptions()
-            subscriptions_serializer = LccnSubscriptionsSerializer(data=resp_data)
-            if not subscriptions_serializer.is_valid():
-                raise NSLCMException(subscriptions_serializer.errors)
-            logger.debug("SubscribeNotification--get::> Remove default fields if exclude_default is "
-                         "specified")
-            return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)
-        except NSLCMException as e:
-            logger.error(e.message)
-            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)
-        except Exception as e:
-            logger.error(e.message)
-            logger.error(traceback.format_exc())
+
+        if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):
             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)
+                status.HTTP_400_BAD_REQUEST, "Not a valid filter")
+            return Response(data=problem_details_serializer.data, status=status.HTTP_400_BAD_REQUEST)
+        resp_data = QuerySubscription(request.query_params).query_multi_subscriptions()
+        subscriptions_serializer = LccnSubscriptionsSerializer(data=resp_data)
+        if not subscriptions_serializer.is_valid():
+            raise NSLCMException(subscriptions_serializer.errors)
+        logger.debug("SubscribeNotification--get::> Remove default fields if exclude_default is "
+                     "specified")
+        return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)