"""Настройки веб-приложения из переменных окружения. Переменные задаются в ``docker-compose`` и/или в ``.env`` в корне репозитория (Compose подставляет их в ``environment`` процесса — отдельный ``env_file`` в коде не требуется). Автор: Сергей Антропов Сайт: https://devops.org.ru """ from __future__ import annotations from pydantic import Field, field_validator from pydantic_settings import BaseSettings, SettingsConfigDict _DEFAULT_TITLE = "Kind Clusters Dashboard" class Settings(BaseSettings): """Параметры HTTP-сервера и поведения UI.""" model_config = SettingsConfigDict( extra="ignore", case_sensitive=False, # Пустая строка из docker-compose (${VAR:-}) не должна затирать заголовок OpenAPI. env_ignore_empty=True, ) kind_k8s_web_host: str = Field(default="0.0.0.0", validation_alias="KIND_K8S_WEB_HOST") # Согласовано с дефолтом compose на хосте (8080); в контейнере процесс слушает 6000 через run_uvicorn.sh. kind_k8s_web_port: int = Field(default=8080, validation_alias="KIND_K8S_WEB_PORT") # Заголовок в OpenAPI / HTML; пустая строка из compose не должна ломать FastAPI. app_title: str = Field(default=_DEFAULT_TITLE, validation_alias="KIND_K8S_APP_TITLE") @field_validator("app_title", mode="before") @classmethod def _non_empty_title(cls, v: object) -> object: if v is None or (isinstance(v, str) and not v.strip()): return _DEFAULT_TITLE return v def get_settings() -> Settings: """Экземпляр настроек (для импорта в main и роутерах).""" return Settings()