studio / auth /database.py
Ava2lon's picture
Upload 170 files
345855e verified
Raw
History Blame Contribute Delete
2.42 kB
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy.exc import OperationalError
# ==========================================================
# DATABASE URL
# ==========================================================
DATABASE_URL = os.getenv("DATABASE_URL")
if not DATABASE_URL:
raise RuntimeError(
"DATABASE_URL environment variable is not set"
)
# ==========================================================
# SUPABASE ENTERPRISE ENGINE CONFIG
# ==========================================================
# Optimized for:
# - Supabase Pooler
# - FastAPI async workload
# - Background workers
# - Long-running autonomous services
engine = create_engine(
DATABASE_URL,
# --- Pool Stability ---
pool_pre_ping=True, # validates dead connections
pool_recycle=300, # refresh connections
pool_size=5, # safe baseline
max_overflow=10, # burst capacity
# --- Reliability ---
echo=False,
future=True,
# --- Supabase Requirement ---
connect_args={
"sslmode": "require",
"connect_timeout": 10,
},
)
# ==========================================================
# SESSION FACTORY
# ==========================================================
SessionLocal = sessionmaker(
autocommit=False,
autoflush=False,
bind=engine,
)
# ==========================================================
# BASE MODEL
# ==========================================================
Base = declarative_base()
# ==========================================================
# DEPENDENCY (FASTAPI)
# ==========================================================
def get_db():
"""
FastAPI dependency injection session.
Ensures connection cleanup even on crash.
"""
db = SessionLocal()
try:
yield db
finally:
db.close()
# ==========================================================
# CONNECTION TEST (STARTUP SAFE)
# ==========================================================
def verify_database_connection():
"""
Validates database connectivity during startup.
Prevents silent runtime failures.
"""
try:
with engine.connect() as conn:
conn.execute("SELECT 1")
except OperationalError as e:
raise RuntimeError(
f"Database connection failed: {str(e)}"
)