Конфликты конечной точки маршрута при создании документа sphinx для api колбы restful
Я пытаюсь создать документацию для веб-приложения Flask, которое включает встроенный в него REST-подобный API. Я использую sphinx, в частности расширение httpdomain из sphinxcontrib, использую модуль autohttp.flask для автоматической генерации моих документов Flask и модуль autohttp.qrefflask для автоматической генерации быстрой справочной таблицы, которая будет сопровождать его. Тем не менее, когда я пытаюсь построить мои документы сфинкса (make html
), Я сталкиваюсь с ошибкой конфликтующих конечных точек маршрута
Exception occurred:
File "/Users/../anaconda2/lib/python2.7/site-packages/flask/app.py", line 1051, in add_url_rule
'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: api.View1:add_config
Я действительно беспокоюсь о создании документации для моего API и ни одного из веб-маршрутов Flask, поэтому я ограничил свою документацию sphinx только созданием чертежей API. Вот мой сфинкс api.rst
.. qrefflask:: myapp.web:create_app(debug=True)
:undoc-static:
:endpoints:
:blueprints: api
:order: path
.. autoflask:: myapp.web:create_app(debug=True)
:undoc-static:
:endpoints:
:blueprints: api
:order: path
Мое приложение Flask и макет Blueprint выглядит следующим образом:
myapp/
api/
__init__.py (api blueprint defined here)
view1.py
view2.py
view3.py
web/
__init__.py (main Flask app created here via create_app)
Мне интересно, если это проблема с тем, как я регистрирую проект, и что сфинкс как-то регистрирует его дважды, но я не понимаю этого.
мой api.__init__.py
в основном есть мое определение Blueprint и несколько пользовательских обработчиков ошибок:
from flask import Blueprint, jsonify
theapi = Blueprint("api", __name__, url_prefix='/myapp/api')
@theapi.errorhandler(500)
def internal_server_error(err):
messages = {'error': 'internal_server_error',
'message': err.description,
'traceback': get_traceback(asstring=True)}
return jsonify({
'api_error': messages,
}), 500
в то время как мое главное приложение для создания Flask, web.__init__.py
просто импортирует это и регистрирует все:
def create_app(debug=False, local=False):
from myapp.api import theapi as api
from myapp.api.view1 import View1
...
app = Flask(__name__, static_url_path='/myapp/static')
...
View1.register(api)
app.register_blueprint(api)
return app
Если я перенесу определение api blueprint и error_handlers в основное приложение, то все будет работать нормально. Но тогда это ломает модульность этого. Я хотел бы сохранить свои вещи API внутри модуля API. Кроме того, если удалить основное поколение автофлакс или qrefflask, и использовать только один, все работает нормально. Но мне бы очень хотелось иметь краткое справочное руководство. Сам код работает нормально, но чертову документацию не удается собрать. У кого-нибудь есть предложения?