from __future__ import annotations from sqlalchemy import create_engine from sqlalchemy.engine import Engine from sqlalchemy.orm import Session, sessionmaker from app.core.config import get_settings _engine: Engine | None = None _session_factory: sessionmaker[Session] | None = None def configure_session_factory() -> None: global _engine, _session_factory settings = get_settings() if _engine is not None: _engine.dispose() _engine = create_engine( settings.resolved_database_url, echo=settings.sqlalchemy_echo, pool_pre_ping=True, ) _session_factory = sessionmaker(bind=_engine, autoflush=False, autocommit=False) def get_engine() -> Engine: global _engine if _engine is None: configure_session_factory() return _engine def get_session_factory() -> sessionmaker[Session]: global _session_factory if _session_factory is None: configure_session_factory() return _session_factory