USAMA BHATTI
Feat: Added Visual Search, API Key Auth, and Docker Optimization
ba2fc46
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from backend.src.core.config import settings
# Connection Arguments
connect_args = {}
# Agar Postgres hai, to command timeout badha do
if "postgresql" in settings.DATABASE_URL:
connect_args = {
"command_timeout": 60, # 60 seconds tak wait karega query ka
"server_settings": {
"jit": "off" # JIT compilation off karne se kabhi kabhi speed fast hoti hai
}
}
if "sqlite" in settings.DATABASE_URL:
connect_args = {"check_same_thread": False}
# --- ROBUST ENGINE CREATION ---
engine = create_async_engine(
settings.DATABASE_URL,
echo=False,
connect_args=connect_args,
pool_size=20, # Pool size badhaya (Load handle karne ke liye)
max_overflow=40, # Overflow badhaya
pool_recycle=300, # Refresh every 5 mins
pool_pre_ping=True, # Connection check before query
pool_timeout=60 # 🔥 Timeout aur badha diya (30s -> 60s)
)
# Session Maker
AsyncSessionLocal = async_sessionmaker(
bind=engine,
class_=AsyncSession,
expire_on_commit=False,
autoflush=False,
)
# Dependency Injection
async def get_db():
async with AsyncSessionLocal() as session:
try:
yield session
except Exception:
# Agar koi logic error aaye to rollback karein
await session.rollback()
raise
finally:
# 🔥 FIX: Graceful Cleanup
# Agar connection pehle hi close ho gaya ho (heavy load ki wajah se),
# to dobara close karne par crash na ho.
try:
await session.close()
except Exception:
pass