Выполнять команду CLI Flask, только если приложение находится в режиме разработки
Я интегрировал Flask-Migrate в свой проект. Когда я использую режим разработки (FLASK_ENV='development'
) Я бы нормально позвонила flask db migrate
применить изменения к базе данных SQLite. Но в режиме тестирования (FLASK_ENV='testing'
) Я использую внутреннюю память (sqlite:///:memory:
) и нет смысла называть db migrate
потому что это приведет к ошибке. Есть ли какой-нибудь способ создать хук pre_execute в CLI Flask, чтобы проверить, какой ENV используется перед выполнением команды? Так, например, если FLASK_ENV установлен в testing
чем звонить 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)
Вопрос: Как я могу прервать выполнение команды cli под определенным FLASK_ENV
установка?
Редактировать: я загружаю FLASK_ENV
значение от .env
файл.
1 ответ
Хорошо, может быть, сначала я попытался решить проблему с неправильным подходом, но я наконец нашел способ справиться с ошибкой, упомянутой в моем вопросе. Потому что я загружаю значение 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
Режим без изменения значения в файле.