Skip to content

Commit 6c202d6

Browse files
committed
this fixes #527
allow enums and states to be passed to `get_triggers` as well
1 parent 7293ff8 commit 6c202d6

File tree

5 files changed

+16
-4
lines changed

5 files changed

+16
-4
lines changed

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- Feature #517: Introduce `try/except` for finalize callbacks in `Machine` and `HierachicalMachine`. Thus, errors occurring in finalize callbacks will be suppressed and only the original error will be raised.
77
- Feature #520: Show references in graphs and markup. Introduce `MarkupMachine.format_references` to tweak reference formatting (thanks @StephenCarboni)
88
- Feature #485: Introduce `Machine.on_exception` to handle raised exceptions in callbacks (thanks @thedrow)
9+
- Feature #527: `Machine.get_triggers` now supports `State` and `Enum` as arguments (thanks @luup2k)
910

1011
## 0.8.7 (February 2021)
1112

tests/test_core.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,11 @@ def test_get_triggers(self):
871871
self.assertEqual(len(machine.get_triggers('B')), 0)
872872
self.assertEqual(len(machine.get_triggers('C')), 1)
873873
# self stuff machine should have to-transitions to every state
874-
self.assertEqual(len(self.stuff.machine.get_triggers('B')), len(self.stuff.machine.states))
874+
m = self.stuff.machine
875+
self.assertEqual(len(m.get_triggers('B')), len(m.states))
876+
trigger_name = m.get_triggers('B')
877+
trigger_state = m.get_triggers(m.states['B'])
878+
self.assertEqual(trigger_name, trigger_state)
875879

876880
def test_skip_override(self):
877881
local_mock = MagicMock()

tests/test_enum.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ def test_get_transitions(self):
148148
# we expect two return values. 'switch_to_yellow' and 'to_YELLOW'
149149
self.assertEqual(2, len(m.get_transitions(source=self.States.RED, dest=self.States.YELLOW)))
150150

151+
def test_get_triggers(self):
152+
m = self.machine_cls(states=self.States, initial=self.States.RED)
153+
trigger_name = m.get_triggers(m.state.name)
154+
trigger_enum = m.get_triggers(m.state)
155+
self.assertEqual(trigger_enum, trigger_name)
156+
151157

152158
@skipIf(enum is None, "enum is not available")
153159
class TestNestedStateEnums(TestEnumsAsStates):

transitions/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -890,8 +890,8 @@ def get_triggers(self, *args):
890890
Returns:
891891
list of transition/trigger names.
892892
"""
893-
states = set(args)
894-
return [t for (t, ev) in self.events.items() if any(state in ev.transitions for state in states)]
893+
names = set([state.name if hasattr(state, 'name') else state for state in args])
894+
return [t for (t, ev) in self.events.items() if any(name in ev.transitions for name in names)]
895895

896896
def add_transition(self, trigger, source, dest, conditions=None,
897897
unless=None, before=None, after=None, prepare=None, **kwargs):

transitions/extensions/nesting.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,8 @@ def get_triggers(self, *args):
710710
""" Extends transitions.core.Machine.get_triggers to also include parent state triggers. """
711711
triggers = []
712712
with self():
713-
for state_name in args:
713+
for state in args:
714+
state_name = state.name if hasattr(state, 'name') else state
714715
state_path = state_name.split(self.state_cls.separator)
715716
if len(state_path) > 1: # we only need to check substates when 'state_name' refers to a substate
716717
with self(state_path[0]):

0 commit comments

Comments
 (0)