"""SQLAlchemy engine + scoped session for the app.""" from __future__ import annotations from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, scoped_session, sessionmaker class Base(DeclarativeBase): pass _engine = None _Session: scoped_session | None = None def init_engine(url: str): global _engine, _Session _engine = create_engine(url, pool_pre_ping=True, future=True) _Session = scoped_session(sessionmaker(bind=_engine, expire_on_commit=False, future=True)) return _engine def get_engine(): if _engine is None: raise RuntimeError("Engine not initialized — call init_engine() in create_app") return _engine def db_session(): if _Session is None: raise RuntimeError("Session factory not initialized") return _Session