message_flow/sagas/orchestration/saga.py (21 lines of code) (raw):
from typing import Protocol, TypeVar
from message_flow.sagas.orchestration.saga_definition import SagaDefinition
__all__ = ["Saga"]
Data = TypeVar("Data")
class Saga(Protocol[Data]):
@property
def saga_definition(self) -> SagaDefinition[Data]:
if hasattr(self, "_saga_definition"):
return self._saga_definition # type: ignore
raise RuntimeError("Please define _saga_defenition attribute")
@property
def saga_type(self) -> str:
return self.__class__.__name__
def on_starting(self, saga_id: str, data: Data) -> None:
...
def on_saga_completed_successfully(self, saga_id: str, data: Data) -> None:
...
def on_saga_rolled_back(self, saga_id: str, data: Data) -> None:
...
def on_saga_failed(self, saga_id: str, data: Data) -> None:
...