我使用自定义manage.py脚本为我的烧瓶应用程序,它是使用工厂模式创建的。
此脚本需要能够运行服务器并运行我的测试。我使用外部工具来运行测试,因此我不需要创建应用程序来运行测试。如何在运行某些命令时才创建应用程序?
我的脚本目前看起来像:
import subprocess
import sys
from flask import current_app
from flask.cli import FlaskGroup
import click
from quizApp import create_app
@click.pass_context
def get_app(ctx, _):
"""Create an app with the correct config.
"""
return create_app(ctx.find_root().params["config"])
@click.option("-c", "--config", default="development",
help="Name of config to use for the app")
@click.group(cls=FlaskGroup, create_app=get_app)
def cli(**_):
"""Define the top level group.
"""
pass
@cli.command("test")
def test():
"""Set the app config to testing and run pytest, passing along command
line args.
"""
# This looks stupid, but see
# https://github.com/pytest-dev/pytest/issues/1357
sys.exit(subprocess.call(['py.test',
'--cov=quizApp',
'--flake8',
'--pylint',
'./']))
if __name__ == '__main__':
cli()
我尝试创建第二组,但似乎只有一个组可以"运行"一次,所以我不确定如何解决这个问题。
答案 0 :(得分:2)
将with_appcontext
参数用于其他命令:
@click.group(cls=FlaskGroup, create_app=get_app)
def cli(**_):
pass
@cli.command(with_appcontext=false)
def extra():
pass
答案 1 :(得分:0)
你需要添加:
cli.add_command(test)
之前:
if __name__ == '__main__':
cli()
我不确定这是否是你唯一需要做的事情。我也研究这个并感到困惑。但是如果要在FlaskGroup中添加命令,则必须这样做。当我想在烧瓶项目中使用Factory和CLI时,我感到困惑。也许最后你需要尝试Flask-Script扩展,至少它可以工作。