generated from nathanwoodburn/python-webserver-template
78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
import os
|
|
from dataclasses import dataclass
|
|
from typing import List
|
|
|
|
|
|
def _split_csv(value: str) -> List[str]:
|
|
return [item.strip() for item in value.split(",") if item.strip()]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AppConfig:
|
|
app_name: str
|
|
database_path: str
|
|
poll_interval_seconds: int
|
|
scheduler_enabled: bool
|
|
admin_token: str
|
|
request_timeout_seconds: int
|
|
|
|
proxmox_enabled: bool
|
|
proxmox_endpoints: List[str]
|
|
proxmox_token_id: str
|
|
proxmox_token_secret: str
|
|
proxmox_user: str
|
|
proxmox_password: str
|
|
proxmox_verify_tls: bool
|
|
|
|
docker_enabled: bool
|
|
docker_hosts: List[str]
|
|
docker_bearer_token: str
|
|
docker_agent_endpoints: List[str]
|
|
docker_agent_token: str
|
|
|
|
coolify_enabled: bool
|
|
coolify_endpoints: List[str]
|
|
coolify_api_token: str
|
|
|
|
|
|
def _bool_env(name: str, default: bool) -> bool:
|
|
value = os.getenv(name)
|
|
if value is None:
|
|
return default
|
|
return value.strip().lower() in {"1", "true", "yes", "on"}
|
|
|
|
|
|
def load_config() -> AppConfig:
|
|
base_dir = os.getenv("BASE_DIR", os.getcwd())
|
|
os.makedirs(base_dir, exist_ok=True)
|
|
|
|
docker_hosts = _split_csv(os.getenv("DOCKER_HOSTS", ""))
|
|
if not docker_hosts:
|
|
single_docker_host = os.getenv("DOCKER_HOST", "").strip()
|
|
if single_docker_host:
|
|
docker_hosts = [single_docker_host]
|
|
|
|
return AppConfig(
|
|
app_name=os.getenv("APP_NAME", "Home Lab Inventory"),
|
|
database_path=os.getenv("DATABASE_PATH", os.path.join(base_dir, "inventory.db")),
|
|
poll_interval_seconds=int(os.getenv("POLL_INTERVAL_SECONDS", "300")),
|
|
scheduler_enabled=_bool_env("SCHEDULER_ENABLED", True),
|
|
admin_token=os.getenv("ADMIN_TOKEN", ""),
|
|
request_timeout_seconds=int(os.getenv("REQUEST_TIMEOUT_SECONDS", "10")),
|
|
proxmox_enabled=_bool_env("PROXMOX_ENABLED", True),
|
|
proxmox_endpoints=_split_csv(os.getenv("PROXMOX_ENDPOINTS", "")),
|
|
proxmox_token_id=os.getenv("PROXMOX_TOKEN_ID", ""),
|
|
proxmox_token_secret=os.getenv("PROXMOX_TOKEN_SECRET", ""),
|
|
proxmox_user=os.getenv("PROXMOX_USER", ""),
|
|
proxmox_password=os.getenv("PROXMOX_PASSWORD", ""),
|
|
proxmox_verify_tls=_bool_env("PROXMOX_VERIFY_TLS", False),
|
|
docker_enabled=_bool_env("DOCKER_ENABLED", True),
|
|
docker_hosts=docker_hosts,
|
|
docker_bearer_token=os.getenv("DOCKER_BEARER_TOKEN", ""),
|
|
docker_agent_endpoints=_split_csv(os.getenv("DOCKER_AGENT_ENDPOINTS", "")),
|
|
docker_agent_token=os.getenv("DOCKER_AGENT_TOKEN", ""),
|
|
coolify_enabled=_bool_env("COOLIFY_ENABLED", True),
|
|
coolify_endpoints=_split_csv(os.getenv("COOLIFY_ENDPOINTS", "")),
|
|
coolify_api_token=os.getenv("COOLIFY_API_TOKEN", ""),
|
|
)
|