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.__state_change_callbacks__ = {}
self.__log_lvl__ = log_lvl self.__log_lvl__ = log_lvl
self.__set_state__(default_state, '__init__') self.__set_state__(default_state, '__init__')
self.__callback_id__ = 0
for key in kwargs: for key in kwargs:
setattr(self, key, kwargs.get(key)) setattr(self, key, kwargs.get(key))
@ -91,7 +92,8 @@ class state_machine(object):
self.__state_change_callbacks__[state] = {} self.__state_change_callbacks__[state] = {}
if condition not in 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] = []
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): def this_state(self):
""" """
@ -182,13 +184,16 @@ class state_machine(object):
self.__last_transition_condition__ = condition self.__last_transition_condition__ = condition
self.__time_stamp_state_change__ = timestamp self.__time_stamp_state_change__ = timestamp
self.__conditions_start_time__ = {} self.__conditions_start_time__ = {}
for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(None, []): # Callback collect
callback(*args, **kwargs) this_state_change_callbacks = self.__state_change_callbacks__.get(None, {}).get(None, [])
for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(None, []): this_state_change_callbacks.extend(self.__state_change_callbacks__.get(target_state, {}).get(None, []))
callback(*args, **kwargs) this_state_change_callbacks.extend(self.__state_change_callbacks__.get(None, {}).get(condition, []))
for callback, args, kwargs in self.__state_change_callbacks__.get(None, {}).get(condition, []): this_state_change_callbacks.extend(self.__state_change_callbacks__.get(target_state, {}).get(condition, []))
callback(*args, **kwargs) # Callback sorting
for callback, args, kwargs in self.__state_change_callbacks__.get(target_state, {}).get(condition, []): 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) callback(*args, **kwargs)
def work(self): def work(self):

File diff suppressed because it is too large Load Diff

Binary file not shown.