Flask-Script Как попасть в текущее приложение?

Я пытаюсь получить доступ к текущему экземпляру приложения из Flask-Script manager.command.

Эти ошибки выходят (url_map является свойством flask.app)

@manager.command
def my_function():
    x = app.url_map # this fails, because app is a callable
    print "hi"

Это работает, но мне не нравится добавлять символы рядом с приложением.

@manager.command
def my_function():
    x = app().url_map
    print "hi"

Отладчик показывает, что приложение является вызываемым. Это связано с тем, как я создаю экземпляр приложения. Я следую этой схеме:

def create_app(settings=None, app_name=None, blueprints=None):
    ...lots of stuff...
    app = flask.Flask(app_name)
    ...lots of stuff...
    return app


def create_manager(app):
    manager = Manager(app)


    @manager.command
    def my_function():
        x = app.url_map
        print "hi"


def main():
    manager = create_manager(create_app)
    manager.run()


if __name__ == "__main__":
    main()

Документы от flask-script говорят о параметрах приложения на Manager(app):

app - экземпляр Flask или вызываемый объект, возвращающий экземпляр Flask.

Я чувствую себя комфортно, потому что в документах сказано, что все в порядке.:-) Плюс я видел, как другие так делали.

Но теперь у меня есть эта периферийная команда, которую я хотел бы добавить, и она заставляет меня использовать приложение с паренами, и это пахнет неправильно. Что я делаю неправильно?

РЕДАКТИРОВАТЬ: я сделал несколько экспериментов. Это определенно неправильно. При добавлении паренов экземпляр приложения воссоздается во второй раз.

1 ответ

Использование flask.current_app

Это работает:

    import flask

... other stuff ...

    @manager.command
    def my_function():
        x = flask.current_app.url_map
        print "hi"

Я "перебил" это.:-)

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