Skip to content

Commit 4abd2ab

Browse files
committed
feat: Ignore missing event
1 parent 455adf1 commit 4abd2ab

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

statemachine/event.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def trigger_wrapper():
2929
return machine._process(trigger_wrapper)
3030

3131
def _trigger(self, trigger_data: TriggerData):
32+
event_data = None
3233
state = trigger_data.machine.current_state
3334
for transition in state.transitions:
3435
if not transition.match(trigger_data.event):
@@ -39,9 +40,10 @@ def _trigger(self, trigger_data: TriggerData):
3940
event_data.executed = True
4041
break
4142
else:
42-
raise TransitionNotAllowed(trigger_data.event, state)
43+
if not trigger_data.machine.ignore_missing_event:
44+
raise TransitionNotAllowed(trigger_data.event, state)
4345

44-
return event_data.result
46+
return event_data.result if event_data else None
4547

4648

4749
def trigger_event_factory(event):

statemachine/statemachine.py

+2
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ def __init__(
3535
state_field: str = "state",
3636
start_value: Any = None,
3737
rtc: bool = True,
38+
ignore_missing_event: bool = False,
3839
):
3940
self.model = model if model else Model()
4041
self.state_field = state_field
4142
self.start_value = start_value
43+
self.ignore_missing_event = ignore_missing_event
4244
self.__rtc = rtc
4345
self.__processing: bool = False
4446
self._external_queue: deque = deque()

tests/examples/traffic_light_nested_machine.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class red(State.Builder, enter="reset_elapsed"):
3434
def __init__(self, seconds_to_turn_state=5, seconds_running=20):
3535
self.seconds_to_turn_state = seconds_to_turn_state
3636
self.seconds_running = seconds_running
37-
super().__init__(queued=True)
37+
super().__init__(ignore_missing_event=True)
3838

3939
def on_timer(self, event: str, source: State, target: State):
4040
print(f".. Running {event} from {source.id} to {target.id}")

0 commit comments

Comments
 (0)