from __future__ import annotations from typing import Any import asyncpg from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine def asyncpg_dsn(url: str) -> str: if url.startswith("postgresql+asyncpg://"): return url.replace("postgresql+asyncpg://", "postgresql://", 1) return url def create_postgres_engine(url: str, **engine_options: Any) -> AsyncEngine: dsn = asyncpg_dsn(url) async def connect(): return await asyncpg.connect(dsn=dsn) return create_async_engine( "postgresql+asyncpg://", async_creator=connect, **engine_options, )