Spaces:
Paused
Paused
File size: 2,175 Bytes
3dfb537 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | from helpers import runtime
from helpers.extension import Extension
from helpers.print_style import PrintStyle
from helpers.state_monitor import get_state_monitor, _ws_debug_enabled
from helpers.state_snapshot import (
StateRequestValidationError,
parse_state_request_payload,
)
class StateSync(Extension):
async def execute(
self,
instance=None,
sid: str = "",
event_type: str = "",
data: dict | None = None,
response_data: dict | None = None,
**kwargs,
):
if instance is None or data is None:
return
if event_type != "state_request":
return
correlation_id = data.get("correlationId")
try:
request = parse_state_request_payload(data)
except StateRequestValidationError as exc:
PrintStyle.warning(
f"[WebuiHandler] INVALID_REQUEST sid={sid} reason={exc.reason} details={exc.details!r}"
)
if response_data is not None:
response_data["code"] = "INVALID_REQUEST"
response_data["message"] = str(exc)
return
if _ws_debug_enabled():
PrintStyle.debug(
f"[WebuiHandler] state_request sid={sid} context={request.context!r} "
f"log_from={request.log_from} notifications_from={request.notifications_from} timezone={request.timezone!r} "
f"correlation_id={correlation_id}"
)
seq_base = 1
monitor = get_state_monitor()
monitor.update_projection(
instance.namespace,
sid,
request=request,
seq_base=seq_base,
)
monitor.mark_dirty(
instance.namespace,
sid,
reason="webui_ws_event.StateSync.state_request",
)
if _ws_debug_enabled():
PrintStyle.debug(
f"[WebuiHandler] state_request accepted sid={sid} seq_base={seq_base}"
)
if response_data is not None:
response_data["runtime_epoch"] = runtime.get_runtime_id()
response_data["seq_base"] = seq_base
|