diff options
Diffstat (limited to 'result_collection_api/tornado_swagger_ui/tornado_swagger/views.py')
-rw-r--r-- | result_collection_api/tornado_swagger_ui/tornado_swagger/views.py | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/result_collection_api/tornado_swagger_ui/tornado_swagger/views.py b/result_collection_api/tornado_swagger_ui/tornado_swagger/views.py deleted file mode 100644 index 7624023..0000000 --- a/result_collection_api/tornado_swagger_ui/tornado_swagger/views.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -import urlparse -import json -import inspect -import tornado.web -import tornado.template -from settings import SWAGGER_VERSION, \ - SWAGGER_API_LIST, \ - SWAGGER_API_SPEC -from settings import models - -__author__ = 'serena' - - -def json_dumps(obj, pretty=False): - return json.dumps(obj, sort_keys=True, indent=4, separators=(',', ': ')) \ - if pretty else json.dumps(obj) - - -class SwaggerUIHandler(tornado.web.RequestHandler): - def initialize(self, static_path, **kwds): - self.static_path = static_path - - def get_template_path(self): - return self.static_path - - def get(self): - discovery_url = \ - urlparse.urljoin(self.request.full_url(), - self.reverse_url(SWAGGER_API_LIST)) - self.render('index.html', discovery_url=discovery_url) - - -class SwaggerResourcesHandler(tornado.web.RequestHandler): - def initialize(self, api_version, exclude_namespaces, **kwds): - self.api_version = api_version - self.exclude_namespaces = exclude_namespaces - - 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), - 'produces': ["application/json"], - 'description': 'Test Api Spec', - 'apis': [{ - 'path': self.reverse_url(SWAGGER_API_SPEC), - 'description': 'Test Api Spec' - }] - } - - self.finish(json_dumps(resources, self.get_arguments('pretty'))) - - -class SwaggerApiHandler(tornado.web.RequestHandler): - def initialize(self, api_version, base_url, **kwds): - self.api_version = api_version - self.base_url = base_url - - def get(self): - self.set_header('content-type', 'application/json') - apis = self.find_api(self.application.handlers) - 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, - 'apis': [self.__get_api_spec__(path, spec, operations) - for path, spec, operations in apis], - 'models': self.__get_models_spec(models) - } - self.finish(json_dumps(specs, self.get_arguments('pretty'))) - - def __get_models_spec(self, models): - models_spec = {} - for model in models: - models_spec.setdefault(model.id, self.__get_model_spec(model)) - return models_spec - - @staticmethod - def __get_model_spec(model): - return { - 'description': model.summary, - 'id': model.id, - 'notes': model.notes, - 'properties': model.properties, - 'required': model.required - } - - @staticmethod - def __get_api_spec__(path, spec, operations): - return { - 'path': path, - 'description': spec.handler_class.__doc__, - 'operations': [{ - 'httpMethod': api.func.__name__.upper(), - 'nickname': api.nickname, - 'parameters': api.params.values(), - 'summary': api.summary, - 'notes': api.notes, - 'responseClass': api.responseClass, - 'responseMessages': api.responseMessages, - } for api in operations] - } - - @staticmethod - def find_api(host_handlers): - def get_path(url, args): - return url % tuple(['{%s}' % arg for arg in args]) - - def get_operations(cls): - return [member.rest_api - for (_, member) in inspect.getmembers(cls) - if hasattr(member, 'rest_api')] - - for host, handlers in host_handlers: - for spec in handlers: - for (_, mbr) in inspect.getmembers(spec.handler_class): - if inspect.ismethod(mbr) and hasattr(mbr, 'rest_api'): - path = get_path(spec._path, mbr.rest_api.func_args) - operations = get_operations(spec.handler_class) - yield path, spec, operations - break |