mirror of
https://github.com/usestrix/strix.git
synced 2026-08-21 02:45:31 +02:00
fix: preserve structured persisted config values
This commit is contained in:
@@ -63,7 +63,7 @@ def persist_current() -> None:
|
||||
target = _override or _DEFAULT_PATH
|
||||
target.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
env_block: dict[str, str] = _read_persisted_env(target)
|
||||
env_block: dict[str, Any] = _read_persisted_env(target)
|
||||
for sub_name in s.model_fields:
|
||||
sub_model = getattr(s, sub_name)
|
||||
if not isinstance(sub_model, BaseModel):
|
||||
@@ -78,7 +78,7 @@ def persist_current() -> None:
|
||||
write_secret_text(target, json.dumps({"env": env_block}, indent=2))
|
||||
|
||||
|
||||
def _read_persisted_env(path: Path) -> dict[str, str]:
|
||||
def _read_persisted_env(path: Path) -> dict[str, Any]:
|
||||
"""Read the ``{"env": {...}}`` block already stored at ``path``."""
|
||||
if not path.exists():
|
||||
return {}
|
||||
@@ -90,9 +90,9 @@ def _read_persisted_env(path: Path) -> dict[str, str]:
|
||||
if not isinstance(env_block, dict):
|
||||
return {}
|
||||
return {
|
||||
str(key).upper(): str(value)
|
||||
str(key).upper(): value
|
||||
for key, value in env_block.items()
|
||||
if isinstance(value, str | int | float) and str(value)
|
||||
if value is not None and value != ""
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -245,6 +245,32 @@ def test_persist_current_env_wins_over_persisted_value(
|
||||
assert json.loads(target.read_text(encoding="utf-8"))["env"]["STRIX_LLM"] == "env-model"
|
||||
|
||||
|
||||
def test_persist_current_preserves_dict_valued_key(
|
||||
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
monkeypatch.delenv("STRIX_LLM", raising=False)
|
||||
monkeypatch.delenv("LLM_EXTRA_HEADERS", raising=False)
|
||||
target = tmp_path / "cli-config.json"
|
||||
target.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"env": {
|
||||
"STRIX_LLM": "file-model",
|
||||
"LLM_EXTRA_HEADERS": {"X-Foo": "bar"},
|
||||
}
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
loader.apply_config_override(target)
|
||||
|
||||
loader.persist_current()
|
||||
|
||||
persisted_env = json.loads(target.read_text(encoding="utf-8"))["env"]
|
||||
assert persisted_env["STRIX_LLM"] == "file-model"
|
||||
assert persisted_env["LLM_EXTRA_HEADERS"] == {"X-Foo": "bar"}
|
||||
|
||||
|
||||
def test_persist_current_sets_0600_mode(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.setenv("STRIX_LLM", "persisted-model")
|
||||
target = tmp_path / "cli-config.json"
|
||||
|
||||
Reference in New Issue
Block a user