main
py 33 lines 1.42 KB
Raw
1 from __future__ import annotations
2
3 from helpers.api import ApiHandler, Request, Response
4 from plugins._time_travel.helpers.time_travel import (
5 TimeTravelError,
6 TimeTravelService,
7 WorkspaceRejectedError,
8 _snapshot_public,
9 resolve_workspace,
10 )
11
12
13 class HistorySnapshot(ApiHandler):
14 async def process(self, input: dict, request: Request) -> dict | Response:
15 context_id = str(input.get("context_id") or "").strip()
16 workspace_id = str(input.get("workspace_id") or "").strip()
17 try:
18 workspace = resolve_workspace(
19 context_id,
20 workspace_id=workspace_id,
21 context_loader=self.use_context,
22 )
23 snapshot = TimeTravelService(workspace).snapshot(
24 trigger=str(input.get("trigger") or "manual"),
25 message=str(input.get("message") or ""),
26 metadata=input.get("metadata") if isinstance(input.get("metadata"), dict) else {},
27 changed_path_hints=input.get("changed_path_hints") if isinstance(input.get("changed_path_hints"), list) else None,
28 )
29 return {"ok": True, "snapshot": _snapshot_public(snapshot)}
30 except WorkspaceRejectedError as exc:
31 return {"ok": False, "locked": True, "error": str(exc)}
32 except TimeTravelError as exc:
33 return {"ok": False, "error": str(exc), "technical_details": getattr(exc, "stderr", "")}