from __future__ import annotations from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from packages.adapters.sqlalchemy_impl.models import Base def build_engine( database_url: str, *, pool_size: int = 20, max_overflow: int = 40, pool_timeout: int = 30, pool_recycle: int = 3600, ): return create_engine( database_url, pool_size=pool_size, max_overflow=max_overflow, pool_timeout=pool_timeout, pool_recycle=pool_recycle, ) def build_session_factory( database_url: str, *, pool_size: int = 20, max_overflow: int = 40, pool_timeout: int = 30, pool_recycle: int = 3600, ): engine = build_engine( database_url, pool_size=pool_size, max_overflow=max_overflow, pool_timeout=pool_timeout, pool_recycle=pool_recycle, ) session_factory = sessionmaker(autocommit=False, autoflush=False, bind=engine) return engine, session_factory def initialize_database(engine) -> None: Base.metadata.create_all(bind=engine)