from datetime import datetime import sqlalchemy as sa import sqlalchemy.pool from fansifter_common.adapters.db import Database from fansifter_common.adapters.db.models import ModelMixin from fansifter_common.adapters.db.types import NaiveUTCDateTime from fansifter_common.utils.functional import lazy_proxy from sqlalchemy.orm import DeclarativeBase, MappedAsDataclass from app.config import settings def get_postgres_db() -> Database: return Database( url=settings.pg_url, engine_args={ "poolclass": sqlalchemy.pool.QueuePool, "pool_size": settings.pg_pool_size, "max_overflow": settings.pg_pool_max_overflow, "pool_recycle": settings.pg_pool_recycle, }, ) postgres_db = lazy_proxy(get_postgres_db) class PgModel(ModelMixin, MappedAsDataclass, DeclarativeBase): """Base for models backed by ows-text-campaigns' Postgres database (read-only).""" __db__ = postgres_db type_annotation_map = { str: sa.Text, datetime: NaiveUTCDateTime, }