update swagger info, add tags for swagger_auto_schema
[modeling/etsicatalog.git] / catalog / packages / views / nsdm_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, no_body
18 from rest_framework import status
19 from rest_framework.decorators import api_view
20 from rest_framework.response import Response
21
22 from catalog.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter
23 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer
24 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer
25 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer
26 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer
27 from catalog.packages.serializers.response import ProblemDetailsSerializer
28
29 from catalog.pub.exceptions import NsdmBadRequestException
30 from catalog.packages.biz.nsdm_subscription import NsdmSubscription
31 from .common import view_safe_call_with_log
32
33 logger = logging.getLogger(__name__)
34
35
36 def validate_data(data, serializer):
37     serialized_data = serializer(data=data)
38     if not serialized_data.is_valid():
39         logger.error('Data validation failed.')
40         raise NsdmBadRequestException(serialized_data.errors)
41     return serialized_data
42
43
44 @swagger_auto_schema(
45     method='POST',
46     operation_description="Create Subscription for NSD Management",
47     tags=["NSD API"],
48     request_body=NsdmSubscriptionRequestSerializer(),
49     responses={
50         status.HTTP_201_CREATED: NsdmSubscriptionSerializer,
51         status.HTTP_303_SEE_OTHER: ProblemDetailsSerializer(),
52         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
53         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
54     }
55 )
56 @swagger_auto_schema(
57     method='GET',
58     operation_description="Query subscriptions for Nsd Management",
59     tags=["NSD API"],
60     request_body=no_body,
61     responses={
62         status.HTTP_200_OK: NsdmSubscriptionsSerializer(),
63         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
64         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
65         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer(),
66     }
67 )
68 @api_view(http_method_names=['POST', 'GET'])
69 @view_safe_call_with_log(logger=logger)
70 def nsd_subscription_rc(request):
71     if request.method == 'POST':
72         logger.debug("SubscribeNotification--post::> %s" % request.data)
73         nsdm_subscription_request = \
74             validate_data(request.data,
75                           NsdmSubscriptionRequestSerializer)
76         subscription = NsdmSubscription().create(
77             nsdm_subscription_request.data)
78         validate_data(subscription, NsdmSubscriptionSerializer)
79         return Response(data=subscription, status=status.HTTP_201_CREATED)
80
81     if request.method == 'GET':
82         logger.debug("Subscription Notification GET %s" % request.query_params)
83         request_query_params = {}
84         if request.query_params:
85             request_query_params = \
86                 validate_data(request.query_params,
87                               NsdmNotificationsFilter).data
88         subscription_data = \
89             NsdmSubscription().query_multi_subscriptions(
90                 request_query_params)
91         subscriptions = validate_data(subscription_data,
92                                       NsdmSubscriptionsSerializer)
93         return Response(data=subscriptions.data, status=status.HTTP_200_OK)
94
95
96 @swagger_auto_schema(
97     method='GET',
98     operation_description="Query subscriptions for Nsd Management",
99     tags=["NSD API"],
100     request_body=no_body,
101     responses={
102         status.HTTP_200_OK: NsdmSubscriptionSerializer(),
103         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
104         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
105         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
106     }
107 )
108 @swagger_auto_schema(
109     method='DELETE',
110     operation_description="Delete subscription for Nsd Management",
111     tags=["NSD API"],
112     request_body=no_body,
113     responses={
114         status.HTTP_204_NO_CONTENT: 'No_Content',
115         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
116         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
117         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
118     }
119 )
120 @api_view(http_method_names=['GET', 'DELETE'])
121 @view_safe_call_with_log(logger=logger)
122 def nsd_subscription_rd(request, **kwargs):
123     subscription_id = kwargs.get("subscriptionId")
124     validate_data({'subscription_id': subscription_id}, NsdmSubscriptionIdSerializer)
125     if request.method == 'GET':
126         subscription_data = NsdmSubscription().query_single_subscription(subscription_id)
127         subscription = validate_data(subscription_data, NsdmSubscriptionSerializer)
128         return Response(data=subscription.data, status=status.HTTP_200_OK)
129     elif request.method == 'DELETE':
130         subscription_data = NsdmSubscription().delete_single_subscription(subscription_id)
131         return Response(status=status.HTTP_204_NO_CONTENT)