Close repository requests with manual lock sessions
This commit is contained in:
@@ -538,6 +538,7 @@ def confirm_manual_lock(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
"base_id": base_id, "layer": str(config.get("layer") or "base"), "backend": config.get("backend"),
|
||||
"objects": plan["lock_objects"], "created_at": time.time(), "status": "manual_confirmed",
|
||||
"verification": "user_confirmation_only", "automatically_verified": False,
|
||||
**({"request_id": request_id} if request_id else {}),
|
||||
}
|
||||
if isinstance(request, dict):
|
||||
request["status"] = "confirmed_by_user"
|
||||
@@ -571,13 +572,34 @@ def close_manual_lock(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
session = (state.get("sessions") or {}).get(session_id)
|
||||
if not isinstance(session, dict):
|
||||
return {"schema": "onec_repository_lock_close.v1", "method": METHOD_CLOSE, "status": "not_found", "lock_session_id": session_id}
|
||||
if session.get("status") != "manual_confirmed":
|
||||
if session.get("status") not in {"manual_confirmed", "closed"}:
|
||||
return {"schema": "onec_repository_lock_close.v1", "method": METHOD_CLOSE, "status": "blocked", "error": "manual_confirmation_not_active", "lock_session_id": session_id}
|
||||
already_closed = session.get("status") == "closed"
|
||||
session["status"] = "closed"
|
||||
session["closed_at"] = time.time()
|
||||
_audit(state, "manual_lock_closed", lock_session_id=session_id, base_id=session.get("base_id"), objects=session.get("objects"))
|
||||
closed_at = float(session.get("closed_at") or time.time())
|
||||
session["closed_at"] = closed_at
|
||||
request_id = str(session.get("request_id") or "").strip()
|
||||
request = (state.get("requests") or {}).get(request_id) if request_id else None
|
||||
if not isinstance(request, dict):
|
||||
request_id = next(
|
||||
(
|
||||
str(candidate_id)
|
||||
for candidate_id, candidate in (state.get("requests") or {}).items()
|
||||
if isinstance(candidate, dict) and candidate.get("lock_session_id") == session_id
|
||||
),
|
||||
"",
|
||||
)
|
||||
request = (state.get("requests") or {}).get(request_id) if request_id else None
|
||||
if isinstance(request, dict):
|
||||
request["status"] = "closed"
|
||||
request["closed_at"] = closed_at
|
||||
if not already_closed:
|
||||
_audit(state, "manual_lock_closed", request_id=request_id or None, lock_session_id=session_id, base_id=session.get("base_id"), objects=session.get("objects"))
|
||||
_write_state(state)
|
||||
return {"schema": "onec_repository_lock_close.v1", "method": METHOD_CLOSE, "status": "closed", "lock_session_id": session_id}
|
||||
return {
|
||||
"schema": "onec_repository_lock_close.v1", "method": METHOD_CLOSE, "status": "closed",
|
||||
"lock_session_id": session_id, "request_id": request_id or None,
|
||||
}
|
||||
|
||||
|
||||
def write_gate(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
|
||||
Reference in New Issue
Block a user