mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-11-04 06:22:55 +00:00 
			
		
		
		
	Rework fsm_update API
This commit is contained in:
		@@ -2,6 +2,7 @@
 | 
			
		||||
# All Rights Reserved. See LICENSE file for details.
 | 
			
		||||
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
 | 
			
		||||
from transitions import Machine, MachineError
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +25,7 @@ class FSMBase(Machine, CallbackMixin):
 | 
			
		||||
    def __init__(self, initial=None, accepted_states=None):
 | 
			
		||||
        self.accepted_states = accepted_states or [self.states[-1].name]
 | 
			
		||||
        self.trigger_predicates = defaultdict(list)
 | 
			
		||||
        self.trigger_history = []
 | 
			
		||||
        self.event_log = []
 | 
			
		||||
 | 
			
		||||
        Machine.__init__(
 | 
			
		||||
            self,
 | 
			
		||||
@@ -60,9 +61,22 @@ class FSMBase(Machine, CallbackMixin):
 | 
			
		||||
 | 
			
		||||
        if all(predicate_results):
 | 
			
		||||
            try:
 | 
			
		||||
                from_state = self.state
 | 
			
		||||
                self.trigger(trigger)
 | 
			
		||||
                self.trigger_history.append(trigger)
 | 
			
		||||
                self.update_event_log(from_state, trigger)
 | 
			
		||||
                return True
 | 
			
		||||
            except (AttributeError, MachineError):
 | 
			
		||||
                LOG.debug('FSM failed to execute nonexistent trigger: "%s"', trigger)
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    def update_event_log(self, from_state, trigger):
 | 
			
		||||
        self.event_log.append({
 | 
			
		||||
            'from_state': from_state,
 | 
			
		||||
            'to_state': self.state,
 | 
			
		||||
            'trigger': trigger,
 | 
			
		||||
            'timestamp': datetime.utcnow()
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def in_accepted_state(self):
 | 
			
		||||
        return self.state in self.accepted_states
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user