EvaluationWorkspace

This commit is contained in:
2026-08-20 12:44:58 +02:00
parent ac4ab782b2
commit 2f1cd00e32
11 changed files with 746 additions and 33 deletions
+8 -11
View File
@@ -5,12 +5,13 @@ from datetime import datetime, timezone
from pathlib import Path
from typing import Any
STATE_FILENAME = ".copienator-gui.json"
from copienator import EvaluationWorkspace, atomic_write_json, read_json
class StateStore:
def __init__(self) -> None:
self.evaluation: Path | None = None
self.workspace: EvaluationWorkspace | None = None
self.data: dict[str, Any] = self._empty_data()
@staticmethod
@@ -18,10 +19,11 @@ class StateStore:
return {"version": 1, "steps": {}, "history": []}
def load(self, evaluation: Path) -> None:
self.evaluation = evaluation
path = evaluation / STATE_FILENAME
self.workspace = EvaluationWorkspace(evaluation)
self.evaluation = self.workspace.root
path = self.workspace.gui_state_file
try:
loaded = json.loads(path.read_text(encoding="utf-8"))
loaded = read_json(path, default=self._empty_data())
self.data = loaded if isinstance(loaded, dict) else self._empty_data()
except (OSError, json.JSONDecodeError):
self.data = self._empty_data()
@@ -30,14 +32,9 @@ class StateStore:
self.data.setdefault("history", [])
def save(self) -> None:
if not self.evaluation:
if not self.workspace:
return
path = self.evaluation / STATE_FILENAME
temporary = path.with_suffix(path.suffix + ".tmp")
temporary.write_text(
json.dumps(self.data, indent=2, ensure_ascii=False), encoding="utf-8"
)
temporary.replace(path)
atomic_write_json(self.workspace.gui_state_file, self.data)
def step(self, step_id: str) -> dict[str, Any]:
return self.data["steps"].setdefault(step_id, {})