5e6394e4b26bc4f1d63931a9aea75107886aff01
[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     request_body=NsdmSubscriptionRequestSerializer(),
48     responses={
49         status.HTTP_201_CREATED: NsdmSubscriptionSerializer,
50         status.HTTP_303_SEE_OTHER: ProblemDetailsSerializer(),
51         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
52         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
53     }
54 )
55 @swagger_auto_schema(
56     method='GET',
57     operation_description="Query subscriptions for Nsd Management",
58     request_body=no_body,
59     responses={
60         status.HTTP_200_OK: NsdmSubscriptionsSerializer(),
61         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
62         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
63         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer(),
64     }
65 )
66 @api_view(http_method_names=['POST', 'GET'])
67 @view_safe_call_with_log(logger=logger)
68 def nsd_subscription_rc(request):
69     if request.method == 'POST':
70         logger.debug("SubscribeNotification--post::> %s" % request.data)
71         nsdm_subscription_request = \
72             validate_data(request.data,
73                           NsdmSubscriptionRequestSerializer)
74         subscription = NsdmSubscription().create(
75             nsdm_subscription_request.data)
76         validate_data(subscription, NsdmSubscriptionSerializer)
77         return Response(data=subscription, status=status.HTTP_201_CREATED)
78
79     if request.method == 'GET':
80         logger.debug("Subscription Notification GET %s" % request.query_params)
81         request_query_params = {}
82         if request.query_params:
83             request_query_params = \
84                 validate_data(request.query_params,
85                               NsdmNotificationsFilter).data
86         subscription_data = \
87             NsdmSubscription().query_multi_subscriptions(
88                 request_query_params)
89         subscriptions = validate_data(subscription_data,
90                                       NsdmSubscriptionsSerializer)
91         return Response(data=subscriptions.data, status=status.HTTP_200_OK)
92
93
94 @swagger_auto_schema(
95     method='GET',
96     operation_description="Query subscriptions for Nsd Management",
97     request_body=no_body,
98     responses={
99         status.HTTP_200_OK: NsdmSubscriptionSerializer(),
100         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
101         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
102         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
103     }
104 )
105 @swagger_auto_schema(
106     method='DELETE',
107     operation_description="Delete subscription for Nsd Management",
108     request_body=no_body,
109     responses={
110         status.HTTP_204_NO_CONTENT: 'No_Content',
111         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
112         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
113         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
114     }
115 )
116 @api_view(http_method_names=['GET', 'DELETE'])
117 @view_safe_call_with_log(logger=logger)
118 def nsd_subscription_rd(request, **kwargs):
119     subscription_id = kwargs.get("subscriptionId")
120     validate_data({'subscription_id': subscription_id}, NsdmSubscriptionIdSerializer)
121     if request.method == 'GET':
122         subscription_data = NsdmSubscription().query_single_subscription(subscription_id)
123         subscription = validate_data(subscription_data, NsdmSubscriptionSerializer)
124         return Response(data=subscription.data, status=status.HTTP_200_OK)
125     elif request.method == 'DELETE':
126         subscription_data = NsdmSubscription().delete_single_subscription(subscription_id)
127         return Response(status=status.HTTP_204_NO_CONTENT)