def test_config(pytestconfig: Config) -> Configuration: config = load_configuration("testing") if config.tests.testcontainers: config.database.dsn = pytestconfig.database_container.get_connection_url() redis_exposed_port = pytestconfig.redis_container.get_exposed_port( pytestconfig.redis_container.port_to_expose ) config.cache.dsn = f"redis://localhost:{redis_exposed_port}" config.database.dsn = config.database.dsn.replace("psycopg2", "asyncpg") return config
def pytest_configure(config: Config) -> None: app_config = load_configuration("testing") if app_config.tests.testcontainers: config.database_container = PostgresContainer( image="postgres:12", user="******", password="******", dbname="backend", ) config.redis_container = RedisContainer(image="redis:alpine") config.database_container.start() config.redis_container.start()
def pytest_unconfigure(config: Config) -> None: app_config = load_configuration("testing") if app_config.tests.testcontainers: config.database_container.stop() config.redis_container.stop()
import uvicorn from {{cookiecutter.project_slug}}.app_factory import create_app from {{cookiecutter.project_slug}}.config import load_configuration config = load_configuration() app = create_app(config) if __name__ == "__main__": uvicorn.run( "{{cookiecutter.project_slug}}.app:app", host=config.server.host, port=config.server.port, reload=config.debug, log_config=None, )
async def _create_user(username: str, password: str) -> None: config = load_configuration() engine = get_engine(config.database) async with AsyncSession(engine) as session: await session.run_sync(create_user, username, password)
async def _init_database() -> None: config = load_configuration() engine = get_engine(config.database) async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) await conn.run_sync(Base.metadata.create_all)