Source code for ralph.mcp.tools.bridge._lazy_tool_handler
"""LazyToolHandler class."""
from __future__ import annotations
from importlib import import_module
from typing import TYPE_CHECKING, cast
if TYPE_CHECKING:
from types import ModuleType
from ralph.mcp.tools.bridge._types import JsonObject, ToolHandler
[docs]
class LazyToolHandler:
"""Lazy wrapper that imports the real MCP tool handler on demand."""
def __init__(
self,
*,
module_name: str,
handler_name: str,
session: object,
workspace: object,
extra_kwargs: dict[str, object] | None = None,
) -> None:
self._module_name = module_name
self._handler_name = handler_name
self._session = session
self._workspace = workspace
self._extra_kwargs: dict[str, object] = extra_kwargs if extra_kwargs is not None else {}
def __call__(
self,
host_session: object | None,
workspace: object | None,
params: JsonObject,
) -> object:
del host_session, workspace
module: ModuleType = import_module(self._module_name)
handler = cast("ToolHandler", getattr(module, self._handler_name))
return handler(self._session, self._workspace, params, **self._extra_kwargs)