Added notification endpoint interface definition in swagger
[modeling/etsicatalog.git] / catalog / packages / views / vnf_package_subscription_views.py
1 # Copyright (C) 2019 Verizon. All Rights Reserved
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 import logging
16
17 from drf_yasg.utils import swagger_auto_schema
18 from rest_framework import status
19 from rest_framework.response import Response
20 from rest_framework.views import APIView
21
22 from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription
23 from catalog.packages.biz.vnf_pkg_subscription import QuerySubscription
24 from catalog.packages.biz.vnf_pkg_subscription import TerminateSubscription
25 from catalog.packages.const import TAG_VNF_PACKAGE_API
26 from catalog.packages.serializers.response import ProblemDetailsSerializer
27 from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer
28 from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionSerializer
29 from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionsSerializer
30 from catalog.packages.serializers.vnf_pkg_notifications import PkgNotificationSerializer
31 from catalog.packages.views.common import validate_data, validate_req_data
32 from catalog.pub.exceptions import BadRequestException
33 from catalog.pub.exceptions import VnfPkgSubscriptionException
34 from .common import view_safe_call_with_log
35
36 logger = logging.getLogger(__name__)
37
38 VALID_FILTERS = [
39     "callbackUri",
40     "notificationTypes",
41     "vnfdId",
42     "vnfPkgId",
43     "operationalState",
44     "usageState"
45 ]
46
47
48 class CreateQuerySubscriptionView(APIView):
49
50     @swagger_auto_schema(
51         tags=[TAG_VNF_PACKAGE_API],
52         request_body=PkgmSubscriptionRequestSerializer,
53         responses={
54             status.HTTP_201_CREATED: PkgmSubscriptionSerializer(),
55             status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
56             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
57         }
58     )
59     @view_safe_call_with_log(logger=logger)
60     def post(self, request):
61         logger.debug("Create VNF package Subscription> %s" % request.data)
62         vnf_pkg_subscription_request = validate_req_data(request.data, PkgmSubscriptionRequestSerializer)
63         data = CreateSubscription(vnf_pkg_subscription_request.data).do_biz()
64         subscription_info = validate_data(data, PkgmSubscriptionSerializer)
65         return Response(data=subscription_info.data, status=status.HTTP_201_CREATED)
66
67     @swagger_auto_schema(
68         tags=[TAG_VNF_PACKAGE_API],
69         responses={
70             status.HTTP_200_OK: PkgmSubscriptionSerializer(),
71             status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
72             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
73         }
74     )
75     @view_safe_call_with_log(logger=logger)
76     def get(self, request):
77         logger.debug("SubscribeNotification--get::> %s" % request.query_params)
78
79         if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):
80             raise BadRequestException("Not a valid filter")
81
82         resp_data = QuerySubscription().query_multi_subscriptions(request.query_params)
83
84         subscriptions_serializer = PkgmSubscriptionsSerializer(data=resp_data)
85         if not subscriptions_serializer.is_valid():
86             raise VnfPkgSubscriptionException(subscriptions_serializer.errors)
87
88         return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)
89
90
91 class QueryTerminateSubscriptionView(APIView):
92
93     @swagger_auto_schema(
94         tags=[TAG_VNF_PACKAGE_API],
95         responses={
96             status.HTTP_200_OK: PkgmSubscriptionSerializer(),
97             status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
98             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
99         }
100     )
101     @view_safe_call_with_log(logger=logger)
102     def get(self, request, subscriptionId):
103         logger.debug("SubscribeNotification--get::> %s" % subscriptionId)
104
105         resp_data = QuerySubscription().query_single_subscription(subscriptionId)
106
107         subscription_serializer = PkgmSubscriptionSerializer(data=resp_data)
108         if not subscription_serializer.is_valid():
109             raise VnfPkgSubscriptionException(subscription_serializer.errors)
110
111         return Response(data=subscription_serializer.data, status=status.HTTP_200_OK)
112
113     @swagger_auto_schema(
114         tags=[TAG_VNF_PACKAGE_API],
115         responses={
116             status.HTTP_204_NO_CONTENT: "",
117             status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
118             status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
119         }
120     )
121     @view_safe_call_with_log(logger=logger)
122     def delete(self, request, subscriptionId):
123         logger.debug("SubscribeNotification--get::> %s" % subscriptionId)
124
125         TerminateSubscription().terminate(subscriptionId)
126         return Response(status=status.HTTP_204_NO_CONTENT)
127
128
129 class PkgnotifyView(APIView):
130     @swagger_auto_schema(
131         tags=[TAG_VNF_PACKAGE_API],
132         request_body=PkgNotificationSerializer,
133         responses={
134             status.HTTP_204_NO_CONTENT: ""
135         }
136     )
137     def post(self):
138         pass