nodeslicer/infra/error_reporting/proxy.py
2026-10-15 14:13:39 +03:00

32 lines
1.2 KiB
Python

from __future__ import annotations
from typing import Any
from .formatter import format_node_failure_message
class NodeErrorReportingProxy:
"""Wraps Blender operator to ensure any operator.report({'ERROR'}, ...) calls
always report which node failed and the names of its inputs."""
def __init__(self, operator: Any, node: Any):
self._operator = operator
self._node = node
def report(self, type_set: set[str], message: str) -> None:
if self._operator and hasattr(self._operator, "report"):
if "ERROR" in type_set:
formatted_msg = format_node_failure_message(self._node, message)
print(f"[NodeSlicer ERROR] {formatted_msg}")
self._operator.report(type_set, formatted_msg)
else:
self._operator.report(type_set, message)
def __getattr__(self, name: str) -> Any:
return getattr(self._operator, name)
def wrap_operator_for_node(operator: Any, node: Any) -> NodeErrorReportingProxy | Any:
"""Wraps an operator with NodeErrorReportingProxy if operator is not None."""
if operator is None:
return None
return NodeErrorReportingProxy(operator, node)