Release: 9884b22fc1e8af73e10e88e52951e585

This commit is contained in:
Dirk Alders 2020-06-16 09:05:45 +02:00
parent ddf94e9881
commit 23a502dc31
3 changed files with 6457 additions and 4654 deletions

View File

@ -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.