30 lines
791 B
Python
30 lines
791 B
Python
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.engine import Engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.pool import NullPool
|
|
|
|
_ENGINE: Engine | None = None
|
|
_SESSION_FACTORY: sessionmaker | None = None
|
|
|
|
|
|
def database_url() -> str:
|
|
return os.getenv("DATABASE_URL", "postgresql+psycopg://agent:agent@db:5432/agent")
|
|
|
|
|
|
def get_engine() -> Engine:
|
|
global _ENGINE
|
|
if _ENGINE is None:
|
|
_ENGINE = create_engine(database_url(), poolclass=NullPool, future=True)
|
|
return _ENGINE
|
|
|
|
|
|
def get_session_factory() -> sessionmaker:
|
|
global _SESSION_FACTORY
|
|
if _SESSION_FACTORY is None:
|
|
_SESSION_FACTORY = sessionmaker(bind=get_engine(), autoflush=False, autocommit=False)
|
|
return _SESSION_FACTORY
|