From 09a21ea186aff5cbee6dcc5573f570f49c251812 Mon Sep 17 00:00:00 2001 From: "ying.yunlong" Date: Thu, 25 Jan 2018 13:14:02 +0800 Subject: [PATCH] Refactor vfc-vnfres swagger function. Change-Id: If403d965ddaf7f6d270ebb490a98025e8506f88b Issue-ID: VFC-679 Signed-off-by: ying.yunlong --- res/res/resources/tests.py | 4 ---- res/res/resources/urls.py | 2 -- res/res/resources/views.py | 17 +++-------------- res/res/swagger/__init__.py | 13 +++++++++++++ res/res/{resources => swagger}/swagger.json | 0 res/res/swagger/tests.py | 29 +++++++++++++++++++++++++++++ res/res/swagger/urls.py | 20 ++++++++++++++++++++ res/res/swagger/views.py | 27 +++++++++++++++++++++++++++ res/res/urls.py | 1 + 9 files changed, 93 insertions(+), 20 deletions(-) create mode 100644 res/res/swagger/__init__.py rename res/res/{resources => swagger}/swagger.json (100%) create mode 100644 res/res/swagger/tests.py create mode 100644 res/res/swagger/urls.py create mode 100644 res/res/swagger/views.py diff --git a/res/res/resources/tests.py b/res/res/resources/tests.py index a6b9ead..7f5026e 100644 --- a/res/res/resources/tests.py +++ b/res/res/resources/tests.py @@ -219,7 +219,3 @@ class ResourceTest(TestCase): response = self.client.get("/api/vnfres/v1/%s/volumes" % self.nf_inst_id) self.assertEqual(self.volumes_data, response.data) self.failUnlessEqual(status.HTTP_200_OK, response.status_code) - - def test_swagger_ok(self): - resp = self.client.get("/api/vnfres/v1/swagger.json", format="json") - self.assertEqual(resp.status_code, status.HTTP_200_OK, resp.content) diff --git a/res/res/resources/urls.py b/res/res/resources/urls.py index 5bcfb9a..e282e86 100644 --- a/res/res/resources/urls.py +++ b/res/res/resources/urls.py @@ -16,7 +16,6 @@ from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns from res.resources import views -from res.resources.views import SwaggerJsonView urlpatterns = [ url(r'^api/vnfres/v1/vnfs/(?P[0-9a-zA-Z\-\_]+)$', views.get_vnf, name='get_vnf'), @@ -27,7 +26,6 @@ urlpatterns = [ url(r'^api/vnfres/v1/(?P[0-9a-zA-Z\-\_]+)/subnets$', views.get_subnets, name='get_subnets'), url(r'^api/vnfres/v1/(?P[0-9a-zA-Z\-\_]+)/cps$', views.getCps.as_view(), name='get_cps'), url(r'^api/vnfres/v1/(?P[0-9a-zA-Z\-\_]+)/volumes$', views.getVolumes.as_view(), name='get_volumes'), - url(r'^api/vnfres/v1/swagger.json$', SwaggerJsonView.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns) diff --git a/res/res/resources/views.py b/res/res/resources/views.py index 049f584..70c38b3 100644 --- a/res/res/resources/views.py +++ b/res/res/resources/views.py @@ -12,9 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import json import logging -import os import traceback from drf_yasg.utils import swagger_auto_schema @@ -23,11 +21,11 @@ from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.views import APIView -from res.pub.exceptions import VNFRESException -from res.pub.utils.values import ignore_case_get -from res.pub.utils.syscomm import fun_name from res.pub.database.models import NfInstModel, StorageInstModel, NetworkInstModel, VLInstModel, \ VNFCInstModel, VmInstModel, FlavourInstModel, SubNetworkInstModel, CPInstModel +from res.pub.exceptions import VNFRESException +from res.pub.utils.syscomm import fun_name +from res.pub.utils.values import ignore_case_get from res.resources.serializers import VolumeInfoSerializer, NoneSerializer, CpsInfoSerializer logger = logging.getLogger(__name__) @@ -388,12 +386,3 @@ def fill_volumes_data(v): "size": v.size } return volumes_data - - -class SwaggerJsonView(APIView): - def get(self, request): - json_file = os.path.join(os.path.dirname(__file__), 'swagger.json') - f = open(json_file) - json_data = json.JSONDecoder().decode(f.read()) - f.close() - return Response(json_data) diff --git a/res/res/swagger/__init__.py b/res/res/swagger/__init__.py new file mode 100644 index 0000000..342c2a8 --- /dev/null +++ b/res/res/swagger/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/res/res/resources/swagger.json b/res/res/swagger/swagger.json similarity index 100% rename from res/res/resources/swagger.json rename to res/res/swagger/swagger.json diff --git a/res/res/swagger/tests.py b/res/res/swagger/tests.py new file mode 100644 index 0000000..03bb77f --- /dev/null +++ b/res/res/swagger/tests.py @@ -0,0 +1,29 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import unittest + +from rest_framework import status +from rest_framework.test import APIClient + + +class SwaggerViewTest(unittest.TestCase): + def setUp(self): + self.client = APIClient() + + def tearDown(self): + pass + + def test_swagger_ok(self): + resp = self.client.get("/api/vnfres/v1/swagger.json", format="json") + self.assertEqual(resp.status_code, status.HTTP_200_OK, resp.content) diff --git a/res/res/swagger/urls.py b/res/res/swagger/urls.py new file mode 100644 index 0000000..3cfa7a6 --- /dev/null +++ b/res/res/swagger/urls.py @@ -0,0 +1,20 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from django.conf.urls import url + +from res.swagger.views import SwaggerJsonView + +urlpatterns = [ + url(r'^api/vnfres/v1/swagger.json$', SwaggerJsonView.as_view()), +] diff --git a/res/res/swagger/views.py b/res/res/swagger/views.py new file mode 100644 index 0000000..cc5a4a3 --- /dev/null +++ b/res/res/swagger/views.py @@ -0,0 +1,27 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import json +import os + +from rest_framework.response import Response +from rest_framework.views import APIView + + +class SwaggerJsonView(APIView): + def get(self, request): + json_file = os.path.join(os.path.dirname(__file__), 'swagger.json') + f = open(json_file) + json_data = json.JSONDecoder().decode(f.read()) + f.close() + return Response(json_data) diff --git a/res/res/urls.py b/res/res/urls.py index b9c08ca..83bbdaf 100644 --- a/res/res/urls.py +++ b/res/res/urls.py @@ -37,6 +37,7 @@ SchemaView = get_schema_view( urlpatterns = [ url(r'^', include('res.samples.urls')), + url(r'^', include('res.swagger.urls')), url(r'^', include('res.resources.urls')), url(r'^swagger(?P.json|.yaml)$', SchemaView.without_ui(cache_timeout=0), name='schema-json'), url(r'^swagger/$', SchemaView.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), -- 2.16.6