]>
git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blob - helpers/action.py
1 from transitions
.extensions
import HierarchicalMachine
as Machine
2 from . import debug_print
, error_print
12 'children': ['running']
26 'after': 'poll_loaded'
32 'after': 'poll_loaded'
37 'dest': 'loaded_running',
38 'after': 'finish_action',
39 # if a child has no transitions, then it is bubbled to the parent,
40 # and we don't want that. Not useful in that machine precisely.
41 'conditions': ['is_loaded']
44 'trigger': 'finish_action',
45 'source': 'loaded_running',
50 def __init__(self
, action
, key
, **kwargs
):
51 Machine(model
=self
, states
=self
.STATES
,
52 transitions
=self
.TRANSITIONS
, initial
='initial',
53 ignore_invalid_triggers
=True, queued
=True)
57 self
.mapping
= key
.parent
58 self
.arguments
= kwargs
59 self
.sleep_event
= None
60 self
.waiting_music
= None
62 def is_loaded_or_failed(self
):
63 return self
.is_loaded(allow_substates
=True) or self
.is_failed()
65 def callback_music_loaded(self
, success
):
71 # Machine states / events
72 def on_enter_loading(self
):
73 if hasattr(actions
, self
.action
):
74 if 'music' in self
.arguments
:
75 self
.arguments
['music'].subscribe_loaded(self
.callback_music_loaded
)
79 error_print("Unknown action {}".format(self
.action
))
82 def on_enter_loaded_running(self
):
83 debug_print(self
.description())
84 if hasattr(actions
, self
.action
):
85 getattr(actions
, self
.action
).run(self
, **self
.arguments
)
87 def poll_loaded(self
):
88 self
.key
.callback_action_ready(self
,
89 self
.is_loaded(allow_substates
=True))
91 # This one cannot be in the Machine state since it would be queued to run
92 # *after* the wait is ended...
94 if getattr(actions
, self
.action
, None) and\
95 hasattr(getattr(actions
, self
.action
), 'interrupt'):
96 return getattr(getattr(actions
, self
.action
), 'interrupt')(
97 self
, **self
.arguments
)
100 def music_list(self
, music
):
101 if music
is not None:
104 return self
.mapping
.open_files
.values()
106 def description(self
):
107 if hasattr(actions
, self
.action
):
108 return getattr(actions
, self
.action
)\
109 .description(self
, **self
.arguments
)
111 return "unknown action {}".format(self
.action
)