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 catalog.packages.biz.nsdm_subscription import NsdmSubscription
23 from catalog.packages.const import TAG_NSD_API
24 from catalog.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter
25 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer
26 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer
27 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer
28 from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer
29 from catalog.packages.serializers.response import ProblemDetailsSerializer
30 from catalog.pub.exceptions import NsdmBadRequestException
31 from .common import view_safe_call_with_log
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",
48 request_body=NsdmSubscriptionRequestSerializer(),
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()
58 operation_description="Query subscriptions for Nsd Management",
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(),
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)
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",
100 request_body=no_body,
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()
108 @swagger_auto_schema(
110 operation_description="Delete subscription for Nsd Management",
112 request_body=no_body,
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()
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)