1 # Copyright (C) 2019 Verizon. All Rights Reserved
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
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
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
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
33 logger = logging.getLogger(__name__)
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
46 operation_description="Create Subscription for NSD Management",
47 request_body=NsdmSubscriptionRequestSerializer(),
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()
57 operation_description="Query subscriptions for Nsd Management",
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(),
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)
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
89 NsdmSubscription().query_multi_subscriptions(
91 subscriptions = validate_data(subscription_data,
92 NsdmSubscriptionsSerializer)
93 return Response(data=subscriptions.data, status=status.HTTP_200_OK)
98 operation_description="Query subscriptions for Nsd Management",
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()
107 @swagger_auto_schema(
109 operation_description="Delete subscription for Nsd Management",
110 request_body=no_body,
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()
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)