feat(backend): Implement storage functions for context presets
This commit is contained in:
@@ -101,6 +101,7 @@ def default_project(name: str = "unnamed") -> dict[str, Any]:
|
||||
"output": {"output_dir": "./md_gen"},
|
||||
"files": {"base_dir": ".", "paths": [], "tier_assignments": {}},
|
||||
"screenshots": {"base_dir": ".", "paths": []},
|
||||
"context_presets": {},
|
||||
"gemini_cli": {"binary_path": "gemini"},
|
||||
"deepseek": {"reasoning_effort": "medium"},
|
||||
"agent": {
|
||||
@@ -248,6 +249,27 @@ def flat_config(proj: dict[str, Any], disc_name: Optional[str] = None, track_id:
|
||||
"history": history,
|
||||
},
|
||||
}
|
||||
# ── context presets ──────────────────────────────────────────────────────────
|
||||
|
||||
def save_context_preset(project_dict: dict, preset_name: str, files: list[str], screenshots: list[str]) -> None:
|
||||
"""Save a named context preset (files + screenshots) into the project dict."""
|
||||
if "context_presets" not in project_dict:
|
||||
project_dict["context_presets"] = {}
|
||||
project_dict["context_presets"][preset_name] = {
|
||||
"files": files,
|
||||
"screenshots": screenshots
|
||||
}
|
||||
|
||||
def load_context_preset(project_dict: dict, preset_name: str) -> dict:
|
||||
"""Return the files and screenshots for a named preset."""
|
||||
if "context_presets" not in project_dict or preset_name not in project_dict["context_presets"]:
|
||||
raise KeyError(f"Preset '{preset_name}' not found in project context_presets.")
|
||||
return project_dict["context_presets"][preset_name]
|
||||
|
||||
def delete_context_preset(project_dict: dict, preset_name: str) -> None:
|
||||
"""Remove a named preset if it exists."""
|
||||
if "context_presets" in project_dict:
|
||||
project_dict["context_presets"].pop(preset_name, None)
|
||||
# ── track state persistence ─────────────────────────────────────────────────
|
||||
|
||||
def save_track_state(track_id: str, state: 'TrackState', base_dir: Union[str, Path] = ".") -> None:
|
||||
|
||||
59
tests/test_context_presets.py
Normal file
59
tests/test_context_presets.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import pytest
|
||||
from src.project_manager import (
|
||||
save_context_preset,
|
||||
load_context_preset,
|
||||
delete_context_preset
|
||||
)
|
||||
|
||||
def test_save_context_preset():
|
||||
project_dict = {}
|
||||
preset_name = "test_preset"
|
||||
files = ["file1.py", "file2.py"]
|
||||
screenshots = ["screenshot1.png"]
|
||||
|
||||
save_context_preset(project_dict, preset_name, files, screenshots)
|
||||
|
||||
assert "context_presets" in project_dict
|
||||
assert preset_name in project_dict["context_presets"]
|
||||
assert project_dict["context_presets"][preset_name]["files"] == files
|
||||
assert project_dict["context_presets"][preset_name]["screenshots"] == screenshots
|
||||
|
||||
def test_load_context_preset():
|
||||
project_dict = {
|
||||
"context_presets": {
|
||||
"test_preset": {
|
||||
"files": ["file1.py"],
|
||||
"screenshots": ["screenshot1.png"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preset = load_context_preset(project_dict, "test_preset")
|
||||
|
||||
assert preset["files"] == ["file1.py"]
|
||||
assert preset["screenshots"] == ["screenshot1.png"]
|
||||
|
||||
def test_load_nonexistent_preset():
|
||||
project_dict = {"context_presets": {}}
|
||||
with pytest.raises(KeyError):
|
||||
load_context_preset(project_dict, "nonexistent")
|
||||
|
||||
def test_delete_context_preset():
|
||||
project_dict = {
|
||||
"context_presets": {
|
||||
"test_preset": {
|
||||
"files": ["file1.py"],
|
||||
"screenshots": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete_context_preset(project_dict, "test_preset")
|
||||
|
||||
assert "test_preset" not in project_dict["context_presets"]
|
||||
|
||||
def test_delete_nonexistent_preset_no_error():
|
||||
project_dict = {"context_presets": {}}
|
||||
# Should not raise error if it doesn't exist
|
||||
delete_context_preset(project_dict, "nonexistent")
|
||||
assert "nonexistent" not in project_dict["context_presets"]
|
||||
Reference in New Issue
Block a user