message_flow/sagas/orchestration_simple_dsl/local_step_builder.py (27 lines of code) (raw):

from typing import Callable, Generic, Optional, TypeVar from ..orchestration import SagaDefinition # type: ignore from .local_step import LocalStep from .simple_saga_definition_builder import SimpleSagaDefinitionBuilder __all__ = ["LocalStepBuilder"] Data = TypeVar("Data") class LocalStepBuilder(Generic[Data]): def __init__( self, parent: SimpleSagaDefinitionBuilder[Data], local_function: Callable[[Data], None], ) -> None: self._parent = parent self._local_function = local_function self._compensation: Optional[Callable[[Data], None]] = None def with_compensation( self, local_compensation: Callable[[Data], None] ) -> "LocalStepBuilder[Data]": self._compensation = local_compensation return self def step(self): from .step_builder import StepBuilder self._parent.add_step(LocalStep(self._local_function, self._compensation)) return StepBuilder[Data](self._parent) def build(self) -> SagaDefinition[Data]: self._parent.add_step(LocalStep(self._local_function, self._compensation)) return self._parent.build()