from sqlalchemy import MetaData, event, text from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from config import DATABASE_URL engine = create_async_engine( DATABASE_URL, echo=False, pool_size=5, max_overflow=10, pool_recycle=300 ) async_session = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) metadata = MetaData() async def init_extensions(): """Initialize PostGIS and TimescaleDB extensions on first connection.""" async with engine.connect() as conn: await conn.execute(text("CREATE EXTENSION IF NOT EXISTS postgis")) await conn.execute(text("CREATE EXTENSION IF NOT EXISTS timescaledb")) await conn.commit()