Конфликты конечной точки маршрута при создании документа 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, и использовать только один, все работает нормально. Но мне бы очень хотелось иметь краткое справочное руководство. Сам код работает нормально, но чертову документацию не удается собрать. У кого-нибудь есть предложения?

0 ответов

Другие вопросы по тегам