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 # Subscribe to NSD and PNFD change notifications.
73 logger.debug("SubscribeNotification--post::> %s" % request.data)
74 nsdm_subscription_request = \
75 validate_data(request.data,
76 NsdmSubscriptionRequestSerializer)
77 subscription = NsdmSubscription().create(
78 nsdm_subscription_request.data)
79 validate_data(subscription, NsdmSubscriptionSerializer)
80 return Response(data=subscription, status=status.HTTP_201_CREATED)
82 if request.method == 'GET':
83 # Query multiple subscriptions.
84 logger.debug("Subscription Notification GET %s" % request.query_params)
85 request_query_params = {}
86 if request.query_params:
87 request_query_params = \
88 validate_data(request.query_params,
89 NsdmNotificationsFilter).data
91 NsdmSubscription().query_multi_subscriptions(
93 subscriptions = validate_data(subscription_data,
94 NsdmSubscriptionsSerializer)
95 return Response(data=subscriptions.data, status=status.HTTP_200_OK)
100 operation_description="Query subscriptions for Nsd Management",
102 request_body=no_body,
104 status.HTTP_200_OK: NsdmSubscriptionSerializer(),
105 status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
106 status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
107 status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
110 @swagger_auto_schema(
112 operation_description="Delete subscription for Nsd Management",
114 request_body=no_body,
116 status.HTTP_204_NO_CONTENT: 'No_Content',
117 status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
118 status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
119 status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
122 @api_view(http_method_names=['GET', 'DELETE'])
123 @view_safe_call_with_log(logger=logger)
124 def nsd_subscription_rd(request, **kwargs):
126 Individual subscription
131 subscription_id = kwargs.get("subscriptionId")
132 validate_data({'subscription_id': subscription_id}, NsdmSubscriptionIdSerializer)
133 if request.method == 'GET':
134 # Read an individual subscription resource
135 subscription_data = NsdmSubscription().query_single_subscription(subscription_id)
136 subscription = validate_data(subscription_data, NsdmSubscriptionSerializer)
137 return Response(data=subscription.data, status=status.HTTP_200_OK)
138 elif request.method == 'DELETE':
139 # Terminate a subscription
140 subscription_data = NsdmSubscription().delete_single_subscription(subscription_id)
141 return Response(status=status.HTTP_204_NO_CONTENT)