summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBharath Thiruveedula <bharath.thiruveedula@verizon.com>2019-03-12 12:25:07 +0530
committerBharath Thiruveedula <bharath.thiruveedula@verizon.com>2019-03-12 14:00:34 +0530
commit646a175ead24421d1bf69e3646ed55520e800d01 (patch)
treef3d7335ddc9a4398ecf62c802e920d84cae87c67
parent9ce8ab299e1d4c20e1ce2ad6f781baed32de51ba (diff)
Add VNFPKGM QueryAll Subscription API
Add SOL005 VNFPKGM Queryall Subscriptions API Issue-ID: VFC-1222 Change-Id: I173b58e8ba68c2c79f87a1094e3209318d2deaae Signed-off-by: Bharath Thiruveedula <bharath.thiruveedula@verizon.com>
-rwxr-xr-xcatalog/packages/biz/vnf_pkg_subscription.py22
-rw-r--r--catalog/packages/tests/test_vnf_pkg_subscription.py29
-rwxr-xr-xcatalog/packages/urls.py6
-rwxr-xr-xcatalog/packages/views/vnf_package_subscription_views.py37
4 files changed, 86 insertions, 8 deletions
diff --git a/catalog/packages/biz/vnf_pkg_subscription.py b/catalog/packages/biz/vnf_pkg_subscription.py
index 20bd68ed..e4772e5e 100755
--- a/catalog/packages/biz/vnf_pkg_subscription.py
+++ b/catalog/packages/biz/vnf_pkg_subscription.py
@@ -24,7 +24,8 @@ from rest_framework import status
from catalog.packages import const
from catalog.pub.database.models import VnfPkgSubscriptionModel
-from catalog.pub.exceptions import VnfPkgSubscriptionException, VnfPkgDuplicateSubscriptionException
+from catalog.pub.exceptions import VnfPkgSubscriptionException,\
+ VnfPkgDuplicateSubscriptionException
from catalog.pub.utils.values import ignore_case_get
@@ -136,3 +137,22 @@ class CreateSubscription(object):
vnf_pkg_id=json.dumps(self.vnf_pkg_id),
links=json.dumps(links))
logger.debug('Create Subscription[%s] success', self.subscription_id)
+
+
+class QuerySubscription(object):
+
+ def query_multi_subscriptions(self, params):
+ query_data = {}
+ logger.debug("QuerySubscription--get--multi--subscriptions--biz::> Check "
+ "for filters in query params %s" % params)
+ for query, value in params.iteritems():
+ if query in ROOT_FILTERS:
+ query_data[ROOT_FILTERS[query] + '__icontains'] = value
+ # Query the database with filters if the request has fields in request params, else fetch all records
+ if query_data:
+ subscriptions = VnfPkgSubscriptionModel.objects.filter(**query_data)
+ else:
+ subscriptions = VnfPkgSubscriptionModel.objects.all()
+ if not subscriptions.exists():
+ return []
+ return [subscription.toDict() for subscription in subscriptions]
diff --git a/catalog/packages/tests/test_vnf_pkg_subscription.py b/catalog/packages/tests/test_vnf_pkg_subscription.py
index 7c8b9f13..cd7b13ad 100644
--- a/catalog/packages/tests/test_vnf_pkg_subscription.py
+++ b/catalog/packages/tests/test_vnf_pkg_subscription.py
@@ -82,7 +82,7 @@ class TestNfPackageSubscription(TestCase):
@mock.patch("requests.get")
@mock.patch.object(uuid, 'uuid4')
- def test_create_duplicate_subscriptions(self, mock_uuid4, mock_requests):
+ def test_duplicate_subscriptions(self, mock_uuid4, mock_requests):
temp_uuid = "99442b18-a5c7-11e8-998c-bf1755941f13"
temp1_uuid = "00342b18-a5c7-11e8-998c-bf1755941f12"
mock_requests.return_value.status_code = 204
@@ -98,3 +98,30 @@ class TestNfPackageSubscription(TestCase):
mock_uuid4.return_value = temp_uuid
response = self.client.post("/api/vnfpkgm/v1/subscriptions", data=self.vnf_subscription_data, format='json')
self.assertEqual(303, response.status_code)
+
+ @mock.patch("requests.get")
+ @mock.patch.object(uuid, 'uuid4')
+ def test_get_subscriptions(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?usageState=IN_USE",
+ format='json')
+ self.assertEqual(200, response.status_code)
+ self.assertEqual(1, len(response.data))
+
+ @mock.patch("requests.get")
+ @mock.patch.object(uuid, 'uuid4')
+ def test_get_subscriptions_with_invalid_params(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?dummy=dummy",
+ format='json')
+ self.assertEqual(400, response.status_code)
diff --git a/catalog/packages/urls.py b/catalog/packages/urls.py
index 0add1d53..a4e3010b 100755
--- a/catalog/packages/urls.py
+++ b/catalog/packages/urls.py
@@ -15,7 +15,7 @@
from django.conf.urls import url
from catalog.packages.views import vnf_package_views
-from catalog.packages.views.vnf_package_subscription_views import SubscriptionsView
+from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView
from catalog.packages.views import catalog_views, ns_descriptor_views, pnf_descriptor_views, nsdm_subscription_views
@@ -49,7 +49,9 @@ urlpatterns = [
url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)$', vnf_package_views.vnf_package_rd, name='vnf_package_rd'),
url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/package_content$', vnf_package_views.package_content_ru, name='package_content_ru'),
url(r'^api/vnfpkgm/v1/vnf_packages/(?P<vnfPkgId>[0-9a-zA-Z\-\_]+)/package_content/upload_from_uri$', vnf_package_views.upload_from_uri_c, name='upload_from_uri_c'),
- url(r'^api/vnfpkgm/v1/subscriptions$', SubscriptionsView.as_view(), name='subscriptions_create_query'),
+
+ # 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<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'),
diff --git a/catalog/packages/views/vnf_package_subscription_views.py b/catalog/packages/views/vnf_package_subscription_views.py
index d7449a89..546382e7 100755
--- a/catalog/packages/views/vnf_package_subscription_views.py
+++ b/catalog/packages/views/vnf_package_subscription_views.py
@@ -22,11 +22,11 @@ from rest_framework.views import APIView
from rest_framework.response import Response
from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer, \
- PkgmSubscriptionSerializer
+ PkgmSubscriptionSerializer, PkgmSubscriptionsSerializer
from catalog.packages.serializers.response import ProblemDetailsSerializer
-from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription
+from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription, QuerySubscription
from catalog.packages.views.common import validate_data
-from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException
+from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException, VnfPkgSubscriptionException
logger = logging.getLogger(__name__)
VALID_FILTERS = ["callbackUri", "notificationTypes", "vnfdId", "vnfPkgId", "operationalState", "usageState"]
@@ -42,7 +42,7 @@ def get_problem_details_serializer(status_code, error_message):
return problem_details_serializer
-class SubscriptionsView(APIView):
+class CreateQuerySubscriptionView(APIView):
@swagger_auto_schema(
request_body=PkgmSubscriptionRequestSerializer,
@@ -70,3 +70,32 @@ class SubscriptionsView(APIView):
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)
+
+ @swagger_auto_schema(
+ responses={
+ status.HTTP_200_OK: PkgmSubscriptionSerializer(),
+ status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),
+ status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()
+ }
+ )
+ def get(self, request):
+ logger.debug("SubscribeNotification--get::> %s" % request.query_params)
+ try:
+ if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_400_BAD_REQUEST,
+ "Not a valid filter")
+ return Response(data=problem_details_serializer.data, status=status.HTTP_400_BAD_REQUEST)
+ resp_data = QuerySubscription().query_multi_subscriptions(request.query_params)
+
+ subscriptions_serializer = PkgmSubscriptionsSerializer(data=resp_data)
+ if not subscriptions_serializer.is_valid():
+ raise VnfPkgSubscriptionException(subscriptions_serializer.errors)
+
+ return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)
+
+ 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)