2026-01-07 16:24:01 +08:00

51 lines
1.4 KiB
Python
Executable File

"""Base classes for payload processors applied on edges."""
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any, Generic, TypeVar
from entity.messages import Message
from runtime.node.executor import ExecutionContext
from utils.log_manager import LogManager
from utils.function_manager import FunctionManager
TConfig = TypeVar("TConfig")
@dataclass(slots=True)
class ProcessorFactoryContext:
"""Context passed to processor implementations."""
function_manager: "FunctionManager | None" = None
log_manager: "LogManager | None" = None
class EdgePayloadProcessor(Generic[TConfig], ABC):
"""Base payload processor API."""
label: str | None = None
metadata: dict[str, Any] | None = None
def __init__(self, config: TConfig, ctx: ProcessorFactoryContext) -> None:
self.config = config
self.ctx = ctx
@abstractmethod
def transform(
self,
payload: Message,
*,
source_result: Message,
from_node: Any,
edge_link: Any,
log_manager: LogManager,
context: ExecutionContext,
) -> Message | None:
"""Return transformed payload or None to drop the message."""
def _clone(self, payload: Message) -> Message:
return payload.clone()
def _text(self, payload: Message) -> str:
return payload.text_content()