Esempio n. 1
0
def test_multiple_response_types(response_transmute_func):
    """ multiple response types should be indicated as such in
    the swagger documentation.
    """
    routes = SwaggerSpec()
    routes.add_func(response_transmute_func, default_context)
    definition = routes.swagger_definition()
    path = definition["paths"]["/api/v1/create_if_authorized/"]
    responses = path["get"]["responses"]
    assert responses["201"] == swagger_schema.Response({
        "description": "",
        "schema": {
            "type": "boolean"
        },
        "headers": {
            "location": {
                "type": "string"
            }
        }
    }).to_primitive()
    assert responses["401"] == swagger_schema.Response({
        "description": "unauthorized",
        "schema": {
            "type": "string"
        }
    }).to_primitive()
    assert "200" not in responses
    assert "400" in responses
Esempio n. 2
0
def _generate_swagger_json(app, context, **kwargs):
    spec = SwaggerSpec()
    for handler in _get_handlers(app):
        for m in METHODS:
            method = getattr(handler, m)
            if hasattr(method, "transmute_func"):
                spec.add_func(method.transmute_func, context)
    return spec.swagger_definition(**kwargs)
Esempio n. 3
0
def _generate_swagger_json(app, context, **kwargs):
    spec = SwaggerSpec()
    for domain, specs in app.handlers:
        for s in specs:
            handler = s.handler_class
            for m in METHODS:
                method = getattr(handler, m)
                if hasattr(method, "transmute_func"):
                    spec.add_func(method.transmute_func, context)
    return spec.swagger_definition(**kwargs)
Esempio n. 4
0
def test_swagger_definition_generation(swagger_definition_kwargs,
                                       expected_info):
    """
    swagger routes should be able to generate a proper
    spec.
    """
    routes = SwaggerSpec()
    assert routes.swagger_definition(**swagger_definition_kwargs) == {
        "info": expected_info,
        "paths": {},
        "swagger": "2.0",
    }
Esempio n. 5
0
def test_swagger_definition_generation():
    """
    swagger routes should be ablo to generate a proper
    spec.
    """
    routes = SwaggerSpec()
    assert routes.swagger_definition() == {
        "info": {"title": "example", "version": "1.0"},
        "paths": {},
        "swagger": "2.0",
        "basePath": "/"
    }
Esempio n. 6
0
def test_swagger_transmute_func(transmute_func):
    """
    swagger routes should be ablo to generate a proper
    spec.
    """
    routes = SwaggerSpec()
    routes.add_func(transmute_func, default_context)
    assert routes.swagger_definition() == {
        "info": {"title": "example", "version": "1.0"},
        "paths": {
            "/api/v1/multiply": transmute_func.get_swagger_path(default_context).to_primitive(),
        },
        "swagger": "2.0",
        "basePath": "/"
    }
Esempio n. 7
0
def test_swagger_add_path(transmute_func):
    """
    add_path should add the specified path to the main swagger object.
    """
    routes = SwaggerSpec()
    swagger_path = transmute_func.get_swagger_path(default_context)
    for p in transmute_func.paths:
        routes.add_path(p, swagger_path)
    assert routes.swagger_definition() == {
        "info": {"title": "example", "version": "1.0"},
        "paths": {
            "/api/v1/multiply": transmute_func.get_swagger_path(default_context).to_primitive(),
        },
        "swagger": "2.0",
        "basePath": "/"
    }
Esempio n. 8
0
def create_swagger_json_handler(app, **kwargs):
    """
    Create a handler that returns the swagger definition
    for an application.

    This method assumes the application is using the
    TransmuteUrlDispatcher as the router.
    """

    spec = getattr(app, SWAGGER_ATTR_NAME, SwaggerSpec())
    _add_blueprint_specs(app, spec)
    spec_dict = spec.swagger_definition(**kwargs)
    encoded_spec = json.dumps(spec_dict).encode("UTF-8")

    def swagger():
        return Response(
            encoded_spec,
            # we allow CORS, so this can be requested at swagger.io
            headers={
                "Access-Control-Allow-Origin": "*"
            },
            content_type="application/json",
        )

    return swagger
Esempio n. 9
0
def test_basepath_override():
    assert SwaggerSpec().swagger_definition(base_path="dummy_path") == {
        'basePath': 'dummy_path',
        'info': {
            'title': 'example',
            'version': '1.0'
        },
        'paths': {},
        'swagger': '2.0'
    }
Esempio n. 10
0
def test_basepath_override():
    assert SwaggerSpec().swagger_definition(base_path="dummy_path") == {
        "basePath": "dummy_path",
        "info": {
            "title": "example",
            "version": "1.0"
        },
        "paths": {},
        "swagger": "2.0",
    }
Esempio n. 11
0
 def decorator(fn):
     fn = describe(**kwargs)(fn)
     transmute_func = TransmuteFunction(fn)
     routes, handler = create_routes_and_handler(transmute_func, context)
     for r in routes:
         # push swagger info.
         if not hasattr(app_or_blueprint, SWAGGER_ATTR_NAME):
             setattr(app_or_blueprint, SWAGGER_ATTR_NAME, SwaggerSpec())
         swagger_obj = getattr(app_or_blueprint, SWAGGER_ATTR_NAME)
         swagger_obj.add_func(transmute_func, context)
         app_or_blueprint.route(r, methods=transmute_func.methods)(handler)
     return handler
Esempio n. 12
0
def test_swagger_parameter_description():
    """
    if parameter descriptions are added to a function, they
    should appear in the swagger json.
    """
    parameter_descriptions = {
        "left": "the left operand",
        "right": "the right operand",
        "header": "the header",
        "path": "the path",
        "return": "the result",
    }

    @describe(
        paths="/api/v1/adopt/{path}",
        parameter_descriptions=parameter_descriptions,
        header_parameters=["header"],
    )
    @annotate({
        "left": int,
        "right": int,
        "header": str,
        "path": str,
        "return": int
    })
    def adopt(left, right, header, path):
        return left + right

    func = TransmuteFunction(adopt)

    routes = SwaggerSpec()
    routes.add_func(func, default_context)
    spec = routes.swagger_definition()

    params = spec["paths"]["/api/v1/adopt/{path}"]["get"]["parameters"]
    for param in spec["paths"]["/api/v1/adopt/{path}"]["get"]["parameters"]:
        assert parameter_descriptions[param["name"]] == param["description"]
    assert (parameter_descriptions["return"] == spec["paths"]
            ["/api/v1/adopt/{path}"]["get"]["responses"]["200"]["schema"]
            ["description"])
Esempio n. 13
0
def test_swagger_get_post(transmute_func, transmute_func_post):
    """
    adding different paths of diffrent methods should have both
    present in the spec.
    """
    routes = SwaggerSpec()
    routes.add_func(transmute_func, default_context)
    routes.add_func(transmute_func_post, default_context)
    spec = routes.swagger_definition()
    assert "get" in spec["paths"]["/api/v1/multiply"]
    assert "post" in spec["paths"]["/api/v1/multiply"]
Esempio n. 14
0
def get_swagger_spec(app):
    if not hasattr(app, SWAGGER_KEY):
        setattr(app, SWAGGER_KEY, SwaggerSpec())
    return getattr(app, SWAGGER_KEY)
Esempio n. 15
0
def get_swagger_spec(app):
    if APP_KEY not in app:
        app[APP_KEY] = SwaggerSpec()
    return app[APP_KEY]