40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Загрузка конфигурации из config.yaml."""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
CONFIG_PATH = Path(os.environ.get("ELMER_CONFIG", Path(__file__).parent.parent / "config.yaml"))
|
|
|
|
|
|
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)
|