generated from nathanwoodburn/python-webserver-template
feat: Initial code
This commit is contained in:
77
config.py
Normal file
77
config.py
Normal file
@@ -0,0 +1,77 @@
|
||||
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", ""),
|
||||
)
|
||||
Reference in New Issue
Block a user