solve access testresults.opnfv.org/swagger/spec.html fail issue in testAPI 11/15311/3
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Wed, 8 Jun 2016 18:10:01 +0000 (02:10 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Wed, 8 Jun 2016 18:17:39 +0000 (02:17 +0800)
add swagger configuration in config.ini
add swagger.docs() process in server.py
add swagger configuration parse in config.py
add basePath() in settings.py
change 'basePath' item assignment in views.py

JIRA: FUNCTEST-305

Change-Id: I049991d4d53b78755ee971021ec0ad2458f5da60
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
utils/test/result_collection_api/etc/config.ini
utils/test/result_collection_api/opnfv_testapi/cmd/server.py
utils/test/result_collection_api/opnfv_testapi/common/config.py
utils/test/result_collection_api/opnfv_testapi/tornado_swagger/settings.py
utils/test/result_collection_api/opnfv_testapi/tornado_swagger/views.py

index f703cc6..16346bf 100644 (file)
@@ -5,8 +5,12 @@
 # Mongo auth url => mongodb://user1:pwd1@host1/?authSource=db1
 url = mongodb://127.0.0.1:27017/
 dbname = test_results_collection
+
 [api]
 # Listening port
 port = 8000
 # With debug_on set to true, error traces will be shown in HTTP responses
-debug = True
\ No newline at end of file
+debug = True
+
+[swagger]
+base_url = http://testresults.opnfv.org/test
\ No newline at end of file
index 9022b9a..c3d7346 100644 (file)
@@ -49,6 +49,8 @@ CONF = APIConfig().parse(args.config_file)
 client = motor.MotorClient(CONF.mongo_url)
 db = client[CONF.mongo_dbname]
 
+swagger.docs(base_url=CONF.swagger_base_url)
+
 
 def make_app():
     return swagger.Application(
index c444e67..ecab88a 100644 (file)
@@ -37,6 +37,7 @@ class APIConfig:
         self.api_port = None
         self.api_debug_on = None
         self._parser = None
+        self.swagger_base_url = None
 
     def _get_parameter(self, section, param):
         try:
@@ -78,6 +79,7 @@ class APIConfig:
 
         obj.api_port = obj._get_int_parameter("api", "port")
         obj.api_debug_on = obj._get_bool_parameter("api", "debug")
+        obj.swagger_base_url = obj._get_parameter("swagger", "base_url")
 
         return obj
 
@@ -85,7 +87,9 @@ class APIConfig:
         return "mongo_url = %s \n" \
                "mongo_dbname = %s \n" \
                "api_port = %s \n" \
-               "api_debug_on = %s \n" % (self.mongo_url,
-                                         self.mongo_dbname,
-                                         self.api_port,
-                                         self.api_debug_on)
+               "api_debug_on = %s \n" \
+               "swagger_base_url = %s \n" % (self.mongo_url,
+                                             self.mongo_dbname,
+                                             self.api_port,
+                                             self.api_debug_on,
+                                             self.swagger_base_url)
index 001d558..88d0d0f 100644 (file)
@@ -16,7 +16,7 @@ STATIC_PATH = os.path.join(os.path.dirname(os.path.normpath(__file__)),
                            'static')
 
 default_settings = {
-    'base_url': '/',
+    'base_url': '',
     'static_path': STATIC_PATH,
     'swagger_prefix': '/swagger',
     'api_version': 'v1.0',
@@ -26,3 +26,7 @@ default_settings = {
 }
 
 models = []
+
+
+def basePath():
+    return default_settings.get('base_url')
index 7190c67..2508319 100644 (file)
@@ -6,15 +6,14 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-import urlparse
-import json
 import inspect
+import json
 
-import tornado.web
 import tornado.template
+import tornado.web
 
 from settings import SWAGGER_VERSION, SWAGGER_API_LIST, SWAGGER_API_SPEC
-from settings import models
+from settings import models, basePath
 
 
 def json_dumps(obj, pretty=False):
@@ -30,9 +29,7 @@ class SwaggerUIHandler(tornado.web.RequestHandler):
         return self.static_path
 
     def get(self):
-        discovery_url = \
-            urlparse.urljoin(self.request.full_url(),
-                             self.reverse_url(SWAGGER_API_LIST))
+        discovery_url = basePath() + self.reverse_url(SWAGGER_API_LIST)
         self.render('index.html', discovery_url=discovery_url)
 
 
@@ -43,11 +40,10 @@ class SwaggerResourcesHandler(tornado.web.RequestHandler):
 
     def get(self):
         self.set_header('content-type', 'application/json')
-        u = urlparse.urlparse(self.request.full_url())
         resources = {
             'apiVersion': self.api_version,
             'swaggerVersion': SWAGGER_VERSION,
-            'basePath': '%s://%s' % (u.scheme, u.netloc),
+            'basePath': basePath(),
             'produces': ["application/json"],
             'description': 'Test Api Spec',
             'apis': [{
@@ -70,12 +66,10 @@ class SwaggerApiHandler(tornado.web.RequestHandler):
         if apis is None:
             raise tornado.web.HTTPError(404)
 
-        base_path = urlparse.urljoin(self.request.full_url(),
-                                     self.base_url)[:-1]
         specs = {
             'apiVersion': self.api_version,
             'swaggerVersion': SWAGGER_VERSION,
-            'basePath': base_path,
+            'basePath': basePath(),
             'apis': [self.__get_api_spec__(path, spec, operations)
                      for path, spec, operations in apis],
             'models': self.__get_models_spec(models)