"""Загрузка конфигурации из config.yaml.""" import os from functools import lru_cache from pathlib import Path import yaml CONFIG_PATH = Path(os.environ.get("ELMER_CONFIG", Path(__file__).parent.parent / "config.yaml")) @lru_cache(maxsize=1) def load() -> dict: """Читает config.yaml, подставляет переменные окружения в значения.""" if not CONFIG_PATH.exists(): raise FileNotFoundError(f"Конфиг не найден: {CONFIG_PATH}") with open(CONFIG_PATH) as f: config = yaml.safe_load(f) # Подстановка ${VAR} из переменных окружения _resolve_env(config) return config def _resolve_env(obj): """Рекурсивно заменяет ${VAR} на os.environ['VAR'].""" if isinstance(obj, dict): for k, v in obj.items(): if isinstance(v, str) and v.startswith("${") and v.endswith("}"): env_var = v[2:-1] obj[k] = os.environ.get(env_var, "") else: _resolve_env(v) elif isinstance(obj, list): for i, v in enumerate(obj): if isinstance(v, str) and v.startswith("${") and v.endswith("}"): env_var = v[2:-1] obj[i] = os.environ.get(env_var, "") else: _resolve_env(v)