feat: Initial code
All checks were successful
Check Code Quality / RuffCheck (push) Successful in 1m4s
Build Docker / BuildImage (push) Successful in 1m26s

This commit is contained in:
2026-03-26 23:07:05 +11:00
parent d8ede00901
commit 0ce79935d7
24 changed files with 2527 additions and 143 deletions

77
config.py Normal file
View 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", ""),
)