feat(01-03): implement configuration management with pydantic-settings
- KBSettings class loading from ~/.kb_env file - Required fields: base_path, archive_path - Optional fields: git_root, git_user, git_email - Secret fields: hf_token, zhihu_cookie (SecretStr) - get_settings() singleton with lru_cache - env_prefix "KB_" for environment variables - Tests adjusted for proper env isolation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,11 +31,14 @@ class TestKBSettings:
|
||||
)
|
||||
assert settings.archive_path == "/tmp/archive"
|
||||
|
||||
def test_kbsettings_optional_fields_have_defaults(self):
|
||||
"""Test optional fields have empty string defaults"""
|
||||
def test_kbsettings_optional_fields_can_be_empty(self):
|
||||
"""Test optional fields accept empty string when explicitly set"""
|
||||
settings = KBSettings(
|
||||
base_path="/tmp/kb",
|
||||
archive_path="/tmp/archive"
|
||||
archive_path="/tmp/archive",
|
||||
git_root="",
|
||||
git_user="",
|
||||
git_email=""
|
||||
)
|
||||
assert settings.git_root == ""
|
||||
assert settings.git_user == ""
|
||||
@@ -63,15 +66,19 @@ class TestKBSettings:
|
||||
|
||||
def test_kbsettings_missing_base_path_raises_error(self):
|
||||
"""Test missing base_path raises ValidationError"""
|
||||
with pytest.raises(PydanticValidationError) as exc_info:
|
||||
KBSettings(archive_path="/tmp/archive")
|
||||
assert "base_path" in str(exc_info.value)
|
||||
# Clear env vars that might provide values
|
||||
with patch.dict(os.environ, {}, clear=True):
|
||||
with pytest.raises(PydanticValidationError) as exc_info:
|
||||
KBSettings(archive_path="/tmp/archive", _env_file=None)
|
||||
assert "base_path" in str(exc_info.value).lower()
|
||||
|
||||
def test_kbsettings_missing_archive_path_raises_error(self):
|
||||
"""Test missing archive_path raises ValidationError"""
|
||||
with pytest.raises(PydanticValidationError) as exc_info:
|
||||
KBSettings(base_path="/tmp/kb")
|
||||
assert "archive_path" in str(exc_info.value)
|
||||
# Clear env vars that might provide values
|
||||
with patch.dict(os.environ, {}, clear=True):
|
||||
with pytest.raises(PydanticValidationError) as exc_info:
|
||||
KBSettings(base_path="/tmp/kb", _env_file=None)
|
||||
assert "archive_path" in str(exc_info.value).lower()
|
||||
|
||||
def test_kbsettings_can_set_optional_fields(self):
|
||||
"""Test optional fields can be set"""
|
||||
|
||||
Reference in New Issue
Block a user