1from os import environ
 2
 3from plain.runtime.secret import Secret
 4
 5from . import database_url
 6
 7# Connection behavior (always have defaults)
 8POSTGRES_PORT: int | None = None
 9POSTGRES_CONN_MAX_AGE: int = 600
10POSTGRES_CONN_HEALTH_CHECKS: bool = True
11POSTGRES_OPTIONS: dict = {}
12POSTGRES_TIME_ZONE: str | None = None
13
14if "DATABASE_URL" in environ:
15    _db_url = environ["DATABASE_URL"]
16    if _db_url.lower() == "none":
17        # Explicitly disable database (e.g. during Docker builds)
18        POSTGRES_HOST: str = ""
19        POSTGRES_DATABASE: str = ""
20        POSTGRES_USER: str = ""
21        POSTGRES_PASSWORD: Secret[str] = ""
22    else:
23        _parsed = database_url.parse_database_url(_db_url)
24        POSTGRES_HOST: str = _parsed["HOST"]
25        POSTGRES_DATABASE: str = _parsed["DATABASE"] or ""
26        POSTGRES_USER: str = _parsed["USER"]
27        POSTGRES_PASSWORD: Secret[str] = _parsed["PASSWORD"]
28        if _parsed["PORT"]:
29            POSTGRES_PORT = _parsed["PORT"]
30        if _parsed.get("OPTIONS"):
31            POSTGRES_OPTIONS = _parsed["OPTIONS"]
32else:
33    # Individual settings are required when no DATABASE_URL is provided.
34    # Set via PLAIN_POSTGRES_* environment variables or in app/settings.py.
35    POSTGRES_HOST: str
36    POSTGRES_DATABASE: str
37    POSTGRES_USER: str
38    POSTGRES_PASSWORD: Secret[str]