apispec-webframeworks
apispec-webframeworks copied to clipboard
Flask extension does not support blueprints
Issue by deckar01
Wednesday Apr 27, 2016 at 17:42 GMT
Originally opened as https://github.com/marshmallow-code/apispec/issues/68
I have organized my views with Flask blueprints, but am unable to document them in the view file, because it is not executed in the application context.
# app/views/example.py
from flask import Blueprint
example_view = Blueprint('example_view', __name__)
from app.spec import spec
@bp.route('example', methods=['GET'])
def get_example():
"""An example.
---
get:
description: Get an example
responses:
200:
description: An example
schema: ExampleSchema
"""
return 'example', 200
spec.add_path(view=get_example)
...
File "/usr/local/lib/python2.7/site-packages/apispec/core.py", line 170, in add_path
self, path=path, operations=operations, **kwargs
File "/usr/local/lib/python2.7/site-packages/apispec/ext/flask.py", line 62, in path_from_view
rule = _rule_for_view(view)
File "/usr/local/lib/python2.7/site-packages/apispec/ext/flask.py", line 38, in _rule_for_view
view_funcs = current_app.view_functions
File "/usr/local/lib/python2.7/site-packages/werkzeug/local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "/usr/local/lib/python2.7/site-packages/werkzeug/local.py", line 302, in _get_current_object
return self.__local()
File "/usr/local/lib/python2.7/site-packages/flask/globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
Is there a way to keep the spec declarations with the blueprint? (It seems like there might not be.)
Do you think it would be useful to add the ability to add all the views from a blueprint at once?
I noticed that the flask extension seems to acknowledge that a view could contain multiple paths, but assumes it only contains one. apispec/ext/flask.py#L46
Maybe something like spec.add_paths()
could be added to handle compound view objects?