Выполнять команду 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 Режим без изменения значения в файле.

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