code refactor for genericparser
[modeling/etsicatalog.git] / genericparser / packages / views / nsdm_subscription_views.py
index 865ece4..cd80e6d 100644 (file)
 # limitations under the License.
 
 import logging
-import traceback
 
 from drf_yasg.utils import swagger_auto_schema, no_body
 from rest_framework import status
 from rest_framework.decorators import api_view
 from rest_framework.response import Response
 
-from genericparser.packages.serializers.nsdm_filter_data \
-    import NsdmNotificationsFilter
-from genericparser.packages.serializers.nsdm_subscription import \
-    NsdmSubscriptionsSerializer, \
-    NsdmSubscriptionIdSerializer, \
-    NsdmSubscriptionSerializer, \
-    NsdmSubscriptionRequestSerializer
-from genericparser.packages.serializers.response \
-    import ProblemDetailsSerializer
-from genericparser.pub.exceptions import \
-    ResourceNotFoundException, \
-    NsdmBadRequestException, NsdmDuplicateSubscriptionException
-from genericparser.packages.biz.nsdm_subscription import NsdmSubscription
+from genericparser.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter
+from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer
+from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer
+from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer
+from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer
 
+from genericparser.packages.serializers.response import ProblemDetailsSerializer
+from genericparser.pub.exceptions import NsdmBadRequestException
+from .common import view_safe_call_with_log
+from genericparser.packages.biz.nsdm_subscription import NsdmSubscription
 
 logger = logging.getLogger(__name__)
 
@@ -46,17 +41,6 @@ def validate_data(data, serializer):
     return serialized_data
 
 
-def get_problem_details_serializer(title, status_code, error_message):
-    problem_details = {
-        "title": title,
-        "status": status_code,
-        "detail": error_message
-    }
-    problem_details_serializer = ProblemDetailsSerializer(data=problem_details)
-    problem_details_serializer.is_valid()
-    return problem_details_serializer
-
-
 @swagger_auto_schema(
     method='POST',
     operation_description="Create Subscription for NSD Management",
@@ -80,84 +64,33 @@ def get_problem_details_serializer(title, status_code, error_message):
     }
 )
 @api_view(http_method_names=['POST', 'GET'])
+@view_safe_call_with_log(logger=logger)
 def nsd_subscription_rc(request):
     if request.method == 'POST':
         logger.debug("SubscribeNotification--post::> %s" % request.data)
-        try:
-            title = 'Creating Subscription Failed!'
-            nsdm_subscription_request = \
-                validate_data(request.data,
-                              NsdmSubscriptionRequestSerializer)
-            subscription = NsdmSubscription().create(
-                nsdm_subscription_request.data)
-            subscription_resp = validate_data(subscription,
-                                              NsdmSubscriptionSerializer)
-            return Response(data=subscription_resp.data,
-                            status=status.HTTP_201_CREATED)
-        except NsdmDuplicateSubscriptionException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_303_SEE_OTHER,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_303_SEE_OTHER)
-        except NsdmBadRequestException as e:
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_400_BAD_REQUEST,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_400_BAD_REQUEST)
-        except Exception as e:
-            logger.error(e.message)
-            logger.error(traceback.format_exc())
-            problem_details_serializer = \
-                get_problem_details_serializer(
-                    title,
-                    status.HTTP_500_INTERNAL_SERVER_ERROR,
-                    e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        nsdm_subscription_request = \
+            validate_data(request.data,
+                          NsdmSubscriptionRequestSerializer)
+        subscription = NsdmSubscription().create(
+            nsdm_subscription_request.data)
+        subscription_resp = validate_data(subscription,
+                                          NsdmSubscriptionSerializer)
+        return Response(data=subscription_resp.data,
+                        status=status.HTTP_201_CREATED)
+
     if request.method == 'GET':
         logger.debug("Subscription Notification GET %s" % request.query_params)
-        try:
-            title = 'Query Subscription Failed!'
-            request_query_params = {}
-            if request.query_params:
-                request_query_params = \
-                    validate_data(request.query_params,
-                                  NsdmNotificationsFilter).data
-            subscription_data = \
-                NsdmSubscription().query_multi_subscriptions(
-                    request_query_params)
-            subscriptions = validate_data(subscription_data,
-                                          NsdmSubscriptionsSerializer)
-            return Response(data=subscriptions.data, status=status.HTTP_200_OK)
-        except NsdmBadRequestException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_400_BAD_REQUEST,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_400_BAD_REQUEST)
-        except ResourceNotFoundException as e:
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_404_NOT_FOUND,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_404_NOT_FOUND)
-        except Exception as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(
-                    title,
-                    status.HTTP_500_INTERNAL_SERVER_ERROR,
-                    traceback.format_exc())
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        request_query_params = {}
+        if request.query_params:
+            request_query_params = \
+                validate_data(request.query_params,
+                              NsdmNotificationsFilter).data
+        subscription_data = \
+            NsdmSubscription().query_multi_subscriptions(
+                request_query_params)
+        subscriptions = validate_data(subscription_data,
+                                      NsdmSubscriptionsSerializer)
+        return Response(data=subscriptions.data, status=status.HTTP_200_OK)
 
 
 @swagger_auto_schema(
@@ -183,77 +116,14 @@ def nsd_subscription_rc(request):
     }
 )
 @api_view(http_method_names=['GET', 'DELETE'])
+@view_safe_call_with_log(logger=logger)
 def nsd_subscription_rd(request, **kwargs):
     subscription_id = kwargs.get("subscriptionId")
+    validate_data({'subscription_id': subscription_id}, NsdmSubscriptionIdSerializer)
     if request.method == 'GET':
-        try:
-            title = 'Query Subscription Failed!'
-            validate_data({'subscription_id': subscription_id},
-                          NsdmSubscriptionIdSerializer)
-            subscription_data = \
-                NsdmSubscription().query_single_subscription(subscription_id)
-            subscription = validate_data(subscription_data,
-                                         NsdmSubscriptionSerializer)
-            return Response(data=subscription.data, status=status.HTTP_200_OK)
-        except NsdmBadRequestException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_400_BAD_REQUEST,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_400_BAD_REQUEST)
-        except ResourceNotFoundException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_404_NOT_FOUND,
-                                               e.message)
-            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(
-                    title,
-                    status.HTTP_500_INTERNAL_SERVER_ERROR,
-                    "Query of subscriptioni(%s) Failed"
-                    % subscription_id)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        subscription_data = NsdmSubscription().query_single_subscription(subscription_id)
+        subscription = validate_data(subscription_data, NsdmSubscriptionSerializer)
+        return Response(data=subscription.data, status=status.HTTP_200_OK)
     elif request.method == 'DELETE':
-        try:
-            title = 'Delete Subscription Failed!'
-            validate_data({'subscription_id': subscription_id},
-                          NsdmSubscriptionIdSerializer)
-            subscription_data = NsdmSubscription().\
-                delete_single_subscription(subscription_id)
-            return Response(status=status.HTTP_204_NO_CONTENT)
-        except NsdmBadRequestException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_400_BAD_REQUEST,
-                                               e.message)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_400_BAD_REQUEST)
-        except ResourceNotFoundException as e:
-            logger.error(e.message)
-            problem_details_serializer = \
-                get_problem_details_serializer(title,
-                                               status.HTTP_404_NOT_FOUND,
-                                               e.message)
-            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(
-                    title,
-                    status.HTTP_500_INTERNAL_SERVER_ERROR,
-                    "Delete of subscription(%s) Failed"
-                    % subscription_id)
-            return Response(data=problem_details_serializer.data,
-                            status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        subscription_data = NsdmSubscription().delete_single_subscription(subscription_id)
+        return Response(status=status.HTTP_204_NO_CONTENT)