仅在应用处于开发模式时才执行Flask CLI命令

时间:2019-02-18 18:43:09

标签: python flask flask-migrate flask-cli

我将Flask-Migrate集成到了我的项目中。使用开发模式(flask db migrate)时,我通常会调用FLASK_ENV='testing'将更改应用于SQLite数据库。但是,在测试模式(sqlite:///:memory:)中,我使用的是内部存储器(db migrate),因此无法调用testing,因为它将最终抛出error。有什么方法可以在Flask CLI中创建“ pre_execute”挂钩,以在执行命令之前检查使用哪个ENV?因此,例如,如果FLASK_ENV设置为flask db init,则调用@click.group(cls=FlaskGroup, create_app=create_app) def cli(): ''' Main entry point. ''' if app.config.ENV == ENV.TESTING: print('Running in TESTING mode...Aborting!') sys.exit(1) 将导致中止命令的执行。我已经尝试过类似的方法,但是没有用:

FLASK_ENV

问题:如何在某些FLASK_ENV设置下中止cli命令的执行?

编辑:我正在从.env文件中加载{{1}}值。

1 个答案:

答案 0 :(得分:0)

好的,也许一开始我尝试用错误的方法解决问题,但是我终于找到了解决问题中提到的错误的方法。因为我从文件加载了FLASK_ENV的值,所以每次我要切换环境时都需要手动更改它。因此,我要做的就是修改测试CLI命令,以在每次执行FLASK_ENV之前将testing的值设置为pytest

@click.command()
def test():
    '''
    Run tests.
    '''
    os.environ['FLASK_ENV'] = ENV.TESTING
    pytest.main(['--rootdir', './tests'])

现在,即使FLASK_ENV文件中的development设置为.env,我仍然可以在testing模式下运行测试,而无需更改文件中的值。