Files
ruminar-ComfyUI-PromptRando…/server_routes.py
T
るみなー先生 08b86f3683 feat: update project version and description; add runtime state management and server routes
- Bump version to 0.6.0 and enhance project description in pyproject.toml.
- Introduce runtime state management with RuntimeCandidateState and RuntimeCandidateStateStore classes to handle candidate updates and state retrieval.
- Implement server routes for updating and reading runtime candidate states, handling various request scenarios and errors.
- Add tests for runtime layout and prompt random choice functionality, ensuring robust validation and state management.
- Enhance frontend with runtime candidate editor, including UI updates and synchronization with server state.
2026-08-19 20:39:39 +09:00

71 lines
2.6 KiB
Python

from __future__ import annotations
try:
from aiohttp import web
from server import PromptServer
except ImportError:
web = None
PromptServer = None
try:
from .candidate_parser import classify_runtime_text
from .runtime_state import (
RUNTIME_CANDIDATE_STATE_STORE,
StaleRuntimeCandidateUpdate,
)
except ImportError:
from candidate_parser import classify_runtime_text
from runtime_state import (
RUNTIME_CANDIDATE_STATE_STORE,
StaleRuntimeCandidateUpdate,
)
if PromptServer is not None and web is not None:
@PromptServer.instance.routes.post(
"/prompt_random_choice/runtime_candidate_state"
)
async def update_runtime_candidate_state(request):
try:
data = await request.json()
if not isinstance(data, dict):
raise TypeError("request body must be a JSON object")
node_kind = data.get("node_kind", "")
text = data.get("text")
if not isinstance(text, str):
raise TypeError("text must be a string")
status, error = classify_runtime_text(text, is_ex=node_kind == "ex")
state = RUNTIME_CANDIDATE_STATE_STORE.update(
state_key=data.get("state_key", ""),
node_kind=node_kind,
text=text,
input_status=status,
error=error,
client_id=data.get("client_id", ""),
client_sequence=data.get("client_sequence"),
)
return web.json_response({"ok": True, "state": state.to_dict()})
except StaleRuntimeCandidateUpdate as exc:
return web.json_response({"ok": False, "error": str(exc)}, status=409)
except (TypeError, ValueError) as exc:
return web.json_response({"ok": False, "error": str(exc)}, status=400)
except Exception as exc:
return web.json_response(
{"ok": False, "error": f"Unexpected Runtime state error: {exc}"},
status=500,
)
@PromptServer.instance.routes.get(
"/prompt_random_choice/runtime_candidate_state/{state_key}"
)
async def read_runtime_candidate_state(request):
state_key = request.match_info.get("state_key", "")
state = RUNTIME_CANDIDATE_STATE_STORE.get(state_key)
if state is None:
return web.json_response(
{"ok": False, "error": "Runtime candidate state not found"},
status=404,
)
return web.json_response({"ok": True, "state": state.to_dict()})