main
py 33 lines 1.21 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 resolve_workspace,
9 )
10
11
12 class HistoryTravel(ApiHandler):
13 async def process(self, input: dict, request: Request) -> dict | Response:
14 context_id = str(input.get("context_id") or "").strip()
15 workspace_id = str(input.get("workspace_id") or "").strip()
16 try:
17 workspace = resolve_workspace(
18 context_id,
19 workspace_id=workspace_id,
20 context_loader=self.use_context,
21 )
22 return TimeTravelService(workspace).travel(
23 commit_hash=str(input.get("commit_hash") or ""),
24 metadata=input.get("metadata") if isinstance(input.get("metadata"), dict) else {},
25 )
26 except WorkspaceRejectedError as exc:
27 return {"ok": False, "locked": True, "error": str(exc)}
28 except TimeTravelError as exc:
29 return {
30 "ok": False,
31 "error": str(exc),
32 "technical_details": getattr(exc, "stderr", "") or str(exc),
33 }