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
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
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)
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' }
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", }
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)
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"]
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
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", }
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": "/" }
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": "/" }
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": "/" }
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"])
def get_swagger_spec(app): if not hasattr(app, SWAGGER_KEY): setattr(app, SWAGGER_KEY, SwaggerSpec()) return getattr(app, SWAGGER_KEY)
def get_swagger_spec(app): if APP_KEY not in app: app[APP_KEY] = SwaggerSpec() return app[APP_KEY]