refactor: архитектура сервера — obd/ brain/ api/
- obd/protocol.py — ELM327 стейт-машина AndrOBD (подробные докстринги) - brain/client.py — LLM-клиент Diagnoser - brain/prompts.py — системные промпты - api/db.py — SQLite (sessions + старые таблицы) - api/scripts.py — сборка диагностических скриптов - api/parser.py — парсинг ответов ELM327 - api/routes.py — все REST-эндпоинты - api/config.py — загрузка конфига - web/app.py — точка входа Flask (упрощена) Удалено: elmer/elm.py, elmer/elm_proto.py, web/raw_endpoint.py
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
"""Загрузка конфигурации из 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)
|
||||
Reference in New Issue
Block a user