Add GET Subscriptions API to GVNFM
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / views / subscriptions_view.py
index 876798d..4c013ee 100644 (file)
@@ -19,15 +19,29 @@ import traceback
 \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
 \r
 from lcm.nf.serializers.lccn_subscription_request import LccnSubscriptionRequestSerializer\r
 from lcm.nf.serializers.lccn_subscription import LccnSubscriptionSerializer\r
+from lcm.nf.serializers.lccn_subscriptions import LccnSubscriptionsSerializer\r
+from lcm.nf.serializers.response import ProblemDetailsSerializer\r
 from lcm.pub.exceptions import NFLCMException\r
 \r
 logger = logging.getLogger(__name__)\r
+VALID_FILTERS = ["operationTypes", "operationStates", "notificationTypes", "vnfInstanceId"]\r
+\r
+\r
+def get_problem_details_serializer(status_code, error_message):\r
+    problem_details = {\r
+        "status": status_code,\r
+        "detail": error_message\r
+    }\r
+    problem_details_serializer = ProblemDetailsSerializer(data=problem_details)\r
+    problem_details_serializer.is_valid()\r
+    return problem_details_serializer\r
 \r
 \r
 class SubscriptionsView(APIView):\r
@@ -35,8 +49,8 @@ class SubscriptionsView(APIView):
         request_body=LccnSubscriptionRequestSerializer(),\r
         responses={\r
             status.HTTP_201_CREATED: LccnSubscriptionSerializer(),\r
-            status.HTTP_303_SEE_OTHER: "",\r
-            status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
+            status.HTTP_303_SEE_OTHER: ProblemDetailsSerializer(),\r
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
         }\r
     )\r
     def post(self, request):\r
@@ -72,3 +86,36 @@ class SubscriptionsView(APIView):
             logger.error(e.message)\r
             logger.error(traceback.format_exc())\r
             return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
+\r
+    @swagger_auto_schema(\r
+        responses={\r
+            status.HTTP_200_OK: LccnSubscriptionsSerializer(),\r
+            status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),\r
+            status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
+        }\r
+    )\r
+    def get(self, request):\r
+        logger.debug("SubscribeNotification--get::> %s" % request.query_params)\r
+        try:\r
+            if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):\r
+                problem_details_serializer = get_problem_details_serializer(status.HTTP_400_BAD_REQUEST, "Not a valid filter")\r
+                return Response(data=problem_details_serializer.data, status=status.HTTP_400_BAD_REQUEST)\r
+            resp_data = QuerySubscription(request.query_params).query_multi_subscriptions()\r
+\r
+            subscriptions_serializer = LccnSubscriptionsSerializer(data=resp_data)\r
+            if not subscriptions_serializer.is_valid():\r
+                raise NFLCMException(subscriptions_serializer.errors)\r
+\r
+            logger.debug("SubscribeNotification--get::> Remove default fields if exclude_default" +\r
+                         " is specified")\r
+            return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)\r
+        except NFLCMException as e:\r
+            logger.error(e.message)\r
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, traceback.format_exc())\r
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
+\r
+        except Exception as e:\r
+            logger.error(e.message)\r
+            logger.error(traceback.format_exc())\r
+            problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, traceback.format_exc())\r
+            return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r