code refactor for genericparser
[modeling/etsicatalog.git] / genericparser / 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 genericparser.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter
23 from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer
24 from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer
25 from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer
26 from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer
27
28 from genericparser.packages.serializers.response import ProblemDetailsSerializer
29 from genericparser.pub.exceptions import NsdmBadRequestException
30 from .common import view_safe_call_with_log
31 from genericparser.packages.biz.nsdm_subscription import NsdmSubscription
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         subscription_resp = validate_data(subscription,
77                                           NsdmSubscriptionSerializer)
78         return Response(data=subscription_resp.data,
79                         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     request_body=no_body,
100     responses={
101         status.HTTP_200_OK: NsdmSubscriptionSerializer(),
102         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
103         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
104         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
105     }
106 )
107 @swagger_auto_schema(
108     method='DELETE',
109     operation_description="Delete subscription for Nsd Management",
110     request_body=no_body,
111     responses={
112         status.HTTP_204_NO_CONTENT: 'No_Content',
113         status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
114         status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
115         status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
116     }
117 )
118 @api_view(http_method_names=['GET', 'DELETE'])
119 @view_safe_call_with_log(logger=logger)
120 def nsd_subscription_rd(request, **kwargs):
121     subscription_id = kwargs.get("subscriptionId")
122     validate_data({'subscription_id': subscription_id}, NsdmSubscriptionIdSerializer)
123     if request.method == 'GET':
124         subscription_data = NsdmSubscription().query_single_subscription(subscription_id)
125         subscription = validate_data(subscription_data, NsdmSubscriptionSerializer)
126         return Response(data=subscription.data, status=status.HTTP_200_OK)
127     elif request.method == 'DELETE':
128         subscription_data = NsdmSubscription().delete_single_subscription(subscription_id)
129         return Response(status=status.HTTP_204_NO_CONTENT)