У меня есть приложение Flask, которое создается с помощью метода фабрики приложений:
appname / __ init __. Py
from flask import Flask
def create_app():
app = Flask(__name__)
with app.app_context():
from appname.db import db_session
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
return app
if __name__ == "__main__":
app = create_app()
app.run(port=5050)
URI для моей базы данных хранитсяв переменной окружения и создан с использованием стандартного шаблона SQLAlchemy:
appname / db.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import os
engine = create_engine(os.environ.get('DATABASE_URI'), echo=True)
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
Base.metadata.create_all(bind=engine)
Эта настройка отлично работает для разработки, но я не могу понять,как установить переменную DATABASE_URI
для pytest.Сейчас я должен указать это вместе с командой pytest
:
DATABASE_URI='postgresql://me@localhost/appname' pipenv run pytest
Хотя это работает, я должен представить, что есть лучший способ предопределить среду для моего набора тестов.Каков наилучший способ установки этих переменных среды?