mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-19 06:30:07 +00:00
* refactor: process isolation support for node replacement API - Move REGISTERED_NODE_REPLACEMENTS global to NodeReplaceManager instance state - Add NodeReplacement class to ComfyAPI_latest with async register() method - Deprecate module-level register_node_replacement() function - Call register_replacements() from comfy_entrypoint() This enables pyisolate compatibility where extensions run in separate processes and communicate via RPC. The async API allows registration calls to cross process boundaries. Refs: TDD-002 Amp-Thread-ID: https://ampcode.com/threads/T-019c2b33-ac55-76a9-9c6b-0246a8625f21 * fix: remove whitespace and deprecation cruft Amp-Thread-ID: https://ampcode.com/threads/T-019c2be8-0b34-747e-b1f7-20a1a1e6c9df
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from aiohttp import web
|
|
|
|
from typing import TYPE_CHECKING
|
|
if TYPE_CHECKING:
|
|
from comfy_api.latest._node_replace import NodeReplace
|
|
|
|
|
|
class NodeReplaceManager:
|
|
"""Manages node replacement registrations."""
|
|
|
|
def __init__(self):
|
|
self._replacements: dict[str, list[NodeReplace]] = {}
|
|
|
|
def register(self, node_replace: NodeReplace):
|
|
"""Register a node replacement mapping."""
|
|
self._replacements.setdefault(node_replace.old_node_id, []).append(node_replace)
|
|
|
|
def get_replacement(self, old_node_id: str) -> list[NodeReplace] | None:
|
|
"""Get replacements for an old node ID."""
|
|
return self._replacements.get(old_node_id)
|
|
|
|
def has_replacement(self, old_node_id: str) -> bool:
|
|
"""Check if a replacement exists for an old node ID."""
|
|
return old_node_id in self._replacements
|
|
|
|
def as_dict(self):
|
|
"""Serialize all replacements to dict."""
|
|
return {
|
|
k: [v.as_dict() for v in v_list]
|
|
for k, v_list in self._replacements.items()
|
|
}
|
|
|
|
def add_routes(self, routes):
|
|
@routes.get("/node_replacements")
|
|
async def get_node_replacements(request):
|
|
return web.json_response(self.as_dict())
|