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]