Release: 9884b22fc1e8af73e10e88e52951e585
This commit is contained in:
parent
ddf94e9881
commit
23a502dc31
21
__init__.py
21
__init__.py
@ -72,6 +72,7 @@ class state_machine(object):
|
||||
self.__state_change_callbacks__ = {}
|
||||
self.__log_lvl__ = log_lvl
|
||||
self.__set_state__(default_state, '__init__')
|
||||
self.__callback_id__ = 0
|
||||
for key in kwargs:
|
||||
setattr(self, key, kwargs.get(key))
|
||||
|
||||
@ -91,7 +92,8 @@ class state_machine(object):
|
||||
self.__state_change_callbacks__[state] = {}
|
||||
if condition not in self.__state_change_callbacks__[state]:
|
||||
self.__state_change_callbacks__[state][condition] = []
|
||||
self.__state_change_callbacks__[state][condition].append((callback, args, kwargs))
|
||||
self.__state_change_callbacks__[state][condition].append((self.__callback_id__, callback, args, kwargs))
|
||||
self.__callback_id__ += 1
|
||||
|
||||
def this_state(self):
|
||||
"""
|
||||
@ -182,13 +184,16 @@ class state_machine(object):
|
||||
self.__last_transition_condition__ = condition
|
||||
self.__time_stamp_state_change__ = timestamp
|
||||
self.__conditions_start_time__ = {}
|
||||
for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(None, []):
|
||||
callback(*args, **kwargs)
|
||||
for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(None, []):
|
||||
callback(*args, **kwargs)
|
||||
for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(condition, []):
|
||||
callback(*args, **kwargs)
|
||||
for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(condition, []):
|
||||
# Callback collect
|
||||
this_state_change_callbacks = self.__state_change_callbacks__.get(None, {}).get(None, [])
|
||||
this_state_change_callbacks.extend(self.__state_change_callbacks__.get(target_state, {}).get(None, []))
|
||||
this_state_change_callbacks.extend(self.__state_change_callbacks__.get(None, {}).get(condition, []))
|
||||
this_state_change_callbacks.extend(self.__state_change_callbacks__.get(target_state, {}).get(condition, []))
|
||||
# Callback sorting
|
||||
this_state_change_callbacks.sort()
|
||||
# Callback execution
|
||||
for cid, callback, args, kwargs in this_state_change_callbacks:
|
||||
logger.debug('Executing callback %d - %s.%s', cid, callback.__module__, callback.__name__)
|
||||
callback(*args, **kwargs)
|
||||
|
||||
def work(self):
|
||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user