Beispiel #1
0
def setup_swagger(routes: typing.List[tornado.web.URLSpec],
                  *,
                  swagger_url: str = '/api/doc',
                  api_base_url: str = '/',
                  description: str = 'Swagger API definition',
                  api_version: str = '1.0.0',
                  title: str = 'Swagger API',
                  contact: str = '',
                  schemes: list = None,
                  security_definitions: dict = None):
    swagger_schema = generate_doc_from_endpoints(
        routes,
        api_base_url=api_base_url,
        description=description,
        api_version=api_version,
        title=title,
        contact=contact,
        schemes=schemes,
        security_definitions=security_definitions,
    )

    _swagger_url = ('/{}'.format(swagger_url)
                    if not swagger_url.startswith('/') else swagger_url)
    _base_swagger_url = _swagger_url.rstrip('/')

    routes += [
        tornado.web.url(_swagger_url, SwaggerHomeHandler),
        tornado.web.url('{}/'.format(_base_swagger_url), SwaggerHomeHandler),
    ]

    with open(os.path.join(STATIC_PATH, 'ui.jinja2'), 'r') as f:
        SwaggerHomeHandler.SWAGGER_HOME_TEMPLATE = (f.read().replace(
            '{{ SWAGGER_SCHEMA }}', json.dumps(swagger_schema)))
Beispiel #2
0
def export_swagger(
    routes: typing.List[tornado.web.URLSpec],
    *,
    api_base_url: str = "/",
    description: str = "Swagger API definition",
    api_version: str = "1.0.0",
    title: str = "Swagger API",
    contact: str = "",
    schemes: list = None,
    security_definitions: dict = None,
    security: list = None,
    api_definition_version: str = API_SWAGGER_2
):
    """Export swagger schema as dict"""
    return generate_doc_from_endpoints(
        routes,
        api_base_url=api_base_url,
        description=description,
        api_version=api_version,
        title=title,
        contact=contact,
        schemes=schemes,
        security_definitions=security_definitions,
        security=security,
        api_definition_version=api_definition_version,
    )
def test_generate_doc_from_each_end_point():
    ExampleHandler.get.__doc__ = ENDPOINT_DOC
    routes = [
        tornado.web.url(r'/api/example', ExampleHandler, name='example'),
    ]

    docs = generate_doc_from_endpoints(routes,
                                       api_base_url='/',
                                       description='',
                                       api_version='',
                                       title='',
                                       contact='',
                                       security_definitions=None,
                                       schemes=[])
    assert docs
Beispiel #4
0
def setup_swagger(
    routes: typing.List[tornado.web.URLSpec],
    *,
    swagger_url: str = "/api/doc",
    api_base_url: str = "/",
    description: str = "Swagger API definition",
    api_version: str = "1.0.0",
    title: str = "Swagger API",
    contact: str = "",
    schemes: list = None,
    security_definitions: dict = None,
    security: list = None,
    display_models: bool = True,
    api_definition_version: str = API_SWAGGER_2
):
    """Inject swagger ui to application routes"""
    swagger_schema = generate_doc_from_endpoints(
        routes,
        api_base_url=api_base_url,
        description=description,
        api_version=api_version,
        title=title,
        contact=contact,
        schemes=schemes,
        security_definitions=security_definitions,
        security=security,
        api_definition_version=api_definition_version,
    )

    _swagger_ui_url = "/{}".format(swagger_url) if not swagger_url.startswith("/") else swagger_url
    _base_swagger_ui_url = _swagger_ui_url.rstrip("/")
    _swagger_spec_url = "{}/swagger.json".format(_swagger_ui_url)

    routes[:0] = [
        tornado.web.url(_swagger_ui_url, SwaggerUiHandler),
        tornado.web.url("{}/".format(_base_swagger_ui_url), SwaggerUiHandler),
        tornado.web.url(_swagger_spec_url, SwaggerSpecHandler),
    ]

    SwaggerSpecHandler.SWAGGER_SPEC = swagger_schema

    with open(os.path.join(STATIC_PATH, "ui.html"), "r", encoding="utf-8") as f:
        SwaggerUiHandler.SWAGGER_HOME_TEMPLATE = (
            f.read().replace("{{ SWAGGER_URL }}", _swagger_spec_url).replace("{{ DISPLAY_MODELS }}", str(-1 if not display_models else 1))
        )
def test_generate_doc_from_each_end_point():
    ExampleHandler.get.__doc__ = ENDPOINT_DOC
    routes = [
        tornado.web.url(r"/api/example", ExampleHandler, name="example"),
    ]

    docs = generate_doc_from_endpoints(
        routes,
        api_base_url="/",
        description="",
        api_version="",
        title="",
        contact="",
        security_definitions=None,
        schemes=[],
        security=None,
    )
    assert docs
Beispiel #6
0
def export_swagger(routes: typing.List[tornado.web.URLSpec],
                   *,
                   api_base_url: str = '/',
                   description: str = 'Swagger API definition',
                   api_version: str = '1.0.0',
                   title: str = 'Swagger API',
                   contact: str = '',
                   schemes: list = None,
                   security_definitions: dict = None):
    return generate_doc_from_endpoints(
        routes,
        api_base_url=api_base_url,
        description=description,
        api_version=api_version,
        title=title,
        contact=contact,
        schemes=schemes,
        security_definitions=security_definitions,
    )
Beispiel #7
0
def setup_swagger_for_mg(routes: typing.List[tuple],
                         *,
                         swagger_url: str = '/api/swagger',
                         api_base_url: str = '/',
                         description: str = 'Swagger API definition',
                         api_version: str = '1.0.0',
                         title: str = 'Swagger API',
                         contact: str = '',
                         schemes: list = None,
                         security_definitions: dict = None
                         ):
    routes_for_swagger = [tornado.web.url(x[0], x[1]) for x in routes if issubclass(tornado.web.RequestHandler, x[1])]
    swagger_schema = generate_doc_from_endpoints(
        routes_for_swagger,
        api_base_url=api_base_url,
        description=description,
        api_version=api_version,
        title=title,
        contact=contact,
        schemes=schemes,
        security_definitions=security_definitions,
    )

    _swagger_url = ('/{}'.format(swagger_url)
                    if not swagger_url.startswith('/')
                    else swagger_url)
    _base_swagger_url = _swagger_url.rstrip('/')

    routes.extend(
        [
            (_swagger_url, SwaggerHomeHandler),
            ('{}/'.format(_base_swagger_url), SwaggerHomeHandler),
        ]
    )

    with open(os.path.join(STATIC_PATH, 'ui.jinja2'), 'r') as f:
        SwaggerHomeHandler.SWAGGER_HOME_TEMPLATE = (
            f.read().replace(
                '{{ SWAGGER_SCHEMA }}',
                json.dumps(swagger_schema)
            )
        )