Files
sortof/api/db.py

35 lines
908 B
Python

"""asyncpg pool factory. DSN is built from /opt/sortof/.env at startup."""
from __future__ import annotations
import os
import urllib.parse
from pathlib import Path
import asyncpg
from dotenv import load_dotenv
ENV_PATH = Path(__file__).resolve().parent.parent / ".env"
def _build_dsn() -> str:
load_dotenv(ENV_PATH)
explicit = os.environ.get("DATABASE_URL")
if explicit:
return explicit
user = os.environ["POSTGRES_USER"]
pw = urllib.parse.quote(os.environ["POSTGRES_PASSWORD"], safe="")
name = os.environ["POSTGRES_DB"]
host = os.environ.get("POSTGRES_HOST", "127.0.0.1")
port = os.environ.get("POSTGRES_PORT", "5439")
return f"postgresql://{user}:{pw}@{host}:{port}/{name}"
async def create_pool() -> asyncpg.Pool:
return await asyncpg.create_pool(
dsn=_build_dsn(),
min_size=1,
max_size=8,
command_timeout=15,
)