Files
docker-images/python-tools/app/config.py
T

59 lines
1.7 KiB
Python

"""Runtime configuration."""
from __future__ import annotations
import os
import sys
from dataclasses import dataclass
from pathlib import Path
@dataclass(frozen=True)
class Settings:
task_root: Path
state_root: Path
credentials_root: Path
python_executable: str
timezone_name: str | None
allowed_proxy_ips: frozenset[str]
cancel_grace_seconds: float
@property
def database_path(self) -> Path:
return self.state_root / "server-maintenance.sqlite3"
@classmethod
def from_environment(cls) -> "Settings":
allowed_proxy_ips = frozenset(
value.strip()
for value in os.environ.get(
"SERVER_MAINTENANCE_ALLOWED_PROXY_IPS", ""
).split(",")
if value.strip()
)
return cls(
task_root=Path(
os.environ.get("SERVER_MAINTENANCE_TASK_ROOT", "/opt/tasks")
),
state_root=Path(
os.environ.get(
"SERVER_MAINTENANCE_STATE_ROOT",
"/var/lib/server-maintenance",
)
),
credentials_root=Path(
os.environ.get(
"SERVER_MAINTENANCE_CREDENTIALS_ROOT",
"/opt/credentials",
)
),
python_executable=os.environ.get(
"SERVER_MAINTENANCE_PYTHON", sys.executable
),
timezone_name=os.environ.get("TZ") or None,
allowed_proxy_ips=allowed_proxy_ips,
cancel_grace_seconds=float(
os.environ.get("SERVER_MAINTENANCE_CANCEL_GRACE_SECONDS", "10")
),
)