Fail fast on invalid config files

This commit is contained in:
chengyongru 2026-06-10 16:20:06 +08:00 committed by Xubin Ren
parent 5d7f2e60c2
commit aee656eb9f
2 changed files with 31 additions and 3 deletions

View File

@ -7,7 +7,6 @@ from pathlib import Path
from typing import Any
import pydantic
from loguru import logger
from pydantic import BaseModel
from nanobot.config.schema import Config, _resolve_tool_config_refs
@ -55,8 +54,7 @@ def load_config(config_path: Path | None = None) -> Config:
data = _migrate_config(data)
config = Config.model_validate(data)
except (json.JSONDecodeError, ValueError, pydantic.ValidationError) as e:
logger.warning("Failed to load config from {}: {}", path, e)
logger.warning("Using default configuration.")
raise ValueError(f"Failed to load config from {path}: {e}") from e
_apply_ssrf_whitelist(config)
return config

View File

@ -0,0 +1,30 @@
import json
import pytest
from nanobot.config.loader import load_config
def test_load_config_missing_file_uses_defaults(tmp_path) -> None:
config = load_config(tmp_path / "missing.json")
assert config.agents.defaults.model
def test_load_config_invalid_json_fails_fast(tmp_path) -> None:
config_path = tmp_path / "config.json"
config_path.write_text("{broken json", encoding="utf-8")
with pytest.raises(ValueError, match="Failed to load config"):
load_config(config_path)
def test_load_config_invalid_schema_fails_fast(tmp_path) -> None:
config_path = tmp_path / "config.json"
config_path.write_text(
json.dumps({"tools": {"exec": {"timeout": -1}}}),
encoding="utf-8",
)
with pytest.raises(ValueError, match="Failed to load config"):
load_config(config_path)