from catalog.packages import const
from catalog.pub.database.models import VnfPkgSubscriptionModel
from catalog.pub.exceptions import VnfPkgSubscriptionException,\
- VnfPkgDuplicateSubscriptionException
+ VnfPkgDuplicateSubscriptionException, SubscriptionDoesNotExistsException
from catalog.pub.utils.values import ignore_case_get
if not subscriptions.exists():
return []
return [subscription.toDict() for subscription in subscriptions]
+
+ def query_single_subscription(self, subscription_id):
+ logger.debug("QuerySingleSubscriptions--get--single--subscription--biz::> "
+ "ID: %s" % subscription_id)
+
+ subscription = VnfPkgSubscriptionModel.objects.filter(
+ subscription_id=subscription_id)
+ if not subscription.exists():
+ raise SubscriptionDoesNotExistsException("Subscription with ID: %s "
+ "does not exists" % subscription_id)
+ return subscription[0].toDict()
response = self.client.get("/api/vnfpkgm/v1/subscriptions?dummy=dummy",
format='json')
self.assertEqual(400, response.status_code)
+
+ @mock.patch("requests.get")
+ @mock.patch.object(uuid, 'uuid4')
+ def test_get_subscription_with_id(self, mock_uuid4, mock_requests):
+ temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
+ mock_requests.return_value.status_code = 204
+ mock_requests.get.status_code = 204
+ mock_uuid4.return_value = temp_uuid
+ self.client.post("/api/vnfpkgm/v1/subscriptions",
+ data=self.vnf_subscription_data, format='json')
+ response = self.client.get("/api/vnfpkgm/v1/subscriptions/" + temp_uuid,
+ format='json')
+ self.assertEqual(200, response.status_code)
+ self.assertEqual(temp_uuid, response.data["id"])
+
+ @mock.patch("requests.get")
+ @mock.patch.object(uuid, 'uuid4')
+ def test_get_subscription_with_id_not_exists(self, mock_uuid4, mock_requests):
+ temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
+ dummy_uuid = str(uuid.uuid4())
+ mock_requests.return_value.status_code = 204
+ mock_requests.get.status_code = 204
+ mock_uuid4.return_value = temp_uuid
+ self.client.post("/api/vnfpkgm/v1/subscriptions",
+ data=self.vnf_subscription_data, format='json')
+ response = self.client.get("/api/vnfpkgm/v1/subscriptions/" + dummy_uuid,
+ format='json')
+ self.assertEqual(404, response.status_code)
from django.conf.urls import url
from catalog.packages.views import vnf_package_views
-from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView
+from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView, QueryTerminateSubscriptionView
from catalog.packages.views import catalog_views, ns_descriptor_views, pnf_descriptor_views, nsdm_subscription_views
# ETSI SOL 005 VNF Package Management Subscription APIs
url(r'^api/vnfpkgm/v1/subscriptions$', CreateQuerySubscriptionView.as_view(), name='subscriptions_create_query'),
+ url(r'^api/vnfpkgm/v1/subscriptions/(?P<subscriptionId>[0-9a-zA-Z\-\_]+)$', QueryTerminateSubscriptionView.as_view(), name='subscriptions_query_terminate'),
# url(r'^api/vnfpkgm/v1/subscriptions/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)$', vnf_package_subscription_views.vnf_package_subscriptions_rc, name='subscriptions_rc'),
# url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/vnfd$', vnfd.as_view(), name='vnfd_r'),# url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/artifacts/artifactPath$', artifacts.as_view(), name='artifacts_r'),
from catalog.packages.serializers.response import ProblemDetailsSerializer
from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription, QuerySubscription
from catalog.packages.views.common import validate_data
-from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException
+from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException, \
+ SubscriptionDoesNotExistsException
logger = logging.getLogger(__name__)
VALID_FILTERS = ["callbackUri", "notificationTypes", "vnfdId", "vnfPkgId", "operationalState", "usageState"]
problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR,
traceback.format_exc())
return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
+class QueryTerminateSubscriptionView(APIView):
+
+ @swagger_auto_schema(
+ responses={
+ status.HTTP_200_OK: PkgmSubscriptionSerializer(),
+ status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
+ status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+ }
+ )
+ def get(self, request, subscriptionId):
+ logger.debug("SubscribeNotification--get::> %s" % subscriptionId)
+ try:
+
+ resp_data = QuerySubscription().query_single_subscription(subscriptionId)
+
+ subscription_serializer = PkgmSubscriptionSerializer(data=resp_data)
+ if not subscription_serializer.is_valid():
+ raise VnfPkgSubscriptionException(subscription_serializer.errors)
+
+ return Response(data=subscription_serializer.data, status=status.HTTP_200_OK)
+ except SubscriptionDoesNotExistsException as e:
+ logger.error(e.message)
+ logger.error(traceback.format_exc())
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_404_NOT_FOUND,
+ traceback.format_exc())
+ return Response(data=problem_details_serializer.data, status=status.HTTP_404_NOT_FOUND)
+ except Exception as e:
+ logger.error(e.message)
+ logger.error(traceback.format_exc())
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR,
+ traceback.format_exc())
+ return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
pass
+class SubscriptionDoesNotExistsException(CatalogException):
+ pass
+
+
class NsdmBadRequestException(CatalogException):
pass