Понятное сообщение при сломанном config.toml
Дублированный раздел ронял обновление трассировкой tomllib. Теперь ConfigError объясняет по-русски, что раздел объявлен дважды и какие разделы должны встречаться ровно один раз. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2f2df7d390
commit
4f6897855a
+18
-2
@@ -10,7 +10,11 @@ import tomllib
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
|
||||
__all__ = ["Settings", "load_settings", "BASE_DIR"]
|
||||
__all__ = ["Settings", "load_settings", "BASE_DIR", "ConfigError"]
|
||||
|
||||
|
||||
class ConfigError(RuntimeError):
|
||||
"""Настройки прочитать не удалось. Текст рассчитан на чтение человеком."""
|
||||
|
||||
# Корень пакета: при запуске из ZIP это папка, куда его распаковали.
|
||||
BASE_DIR = Path(os.environ.get("TALKSCORE_ASR_HOME") or Path(__file__).resolve().parent.parent)
|
||||
@@ -144,7 +148,19 @@ def load_settings(config_path: Path | None = None) -> Settings:
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(_DEFAULT_CONFIG.format(token=secrets.token_urlsafe(32)), encoding="utf-8")
|
||||
|
||||
data = tomllib.loads(path.read_text(encoding="utf-8"))
|
||||
try:
|
||||
data = tomllib.loads(path.read_text(encoding="utf-8"))
|
||||
except tomllib.TOMLDecodeError as exc:
|
||||
# Самая частая причина - раздел объявлен дважды: настройки дописывали
|
||||
# блоками, и рядом со старым [security] появился второй.
|
||||
raise ConfigError(
|
||||
f"не удалось прочитать {path}\n"
|
||||
f" {exc}\n\n"
|
||||
" Скорее всего, один и тот же раздел объявлен дважды.\n"
|
||||
" Каждый раздел ([server], [security], [processing], [webhook], [update])\n"
|
||||
" должен встречаться в файле ровно один раз, а все его настройки -\n"
|
||||
" идти внутри него одним блоком."
|
||||
) from exc
|
||||
server = data.get("server", {})
|
||||
security = data.get("security", {})
|
||||
proc = data.get("processing", {})
|
||||
|
||||
Reference in New Issue
Block a user