Source code for statemachine.event_data

from dataclasses import dataclass
from dataclasses import field
from typing import TYPE_CHECKING
from typing import Any

if TYPE_CHECKING:
    from .state import State
    from .statemachine import StateMachine
    from .transition import Transition


[docs] @dataclass class TriggerData: machine: "StateMachine" event: str """The Event that was triggered.""" model: Any = field(init=False) """A reference to the underlying model that holds the current :ref:`State`.""" args: tuple = field(default_factory=tuple) """All positional arguments provided on the :ref:`Event`.""" kwargs: dict = field(default_factory=dict) """All keyword arguments provided on the :ref:`Event`.""" def __post_init__(self): self.model = self.machine.model
[docs] @dataclass class EventData: trigger_data: TriggerData """The :ref:`TriggerData` of the :ref:`event`.""" transition: "Transition" """The :ref:`Transition` instance that was activated by the :ref:`Event`.""" state: "State" = field(init=False) """The current :ref:`State` of the :ref:`statemachine`.""" source: "State" = field(init=False) """The :ref:`State` which :ref:`statemachine` was in when the Event started.""" target: "State" = field(init=False) """The destination :ref:`State` of the :ref:`transition`.""" result: "Any | None" = None executed: bool = False def __post_init__(self): self.state = self.transition.source self.source = self.transition.source self.target = self.transition.target @property def machine(self): return self.trigger_data.machine @property def event(self): return self.trigger_data.event @property def args(self): return self.trigger_data.args @property def extended_kwargs(self): kwargs = self.trigger_data.kwargs.copy() kwargs["event_data"] = self kwargs["machine"] = self.trigger_data.machine kwargs["event"] = self.trigger_data.event kwargs["model"] = self.trigger_data.model kwargs["transition"] = self.transition kwargs["state"] = self.state kwargs["source"] = self.source kwargs["target"] = self.target return kwargs