mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-10-31 06:02:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2018 Avatao.com Innovative Learning Kft.
 | |
| # All Rights Reserved. See LICENSE file for details.
 | |
| 
 | |
| from typing import List
 | |
| 
 | |
| from transitions import Machine
 | |
| 
 | |
| from tfw.mixins import CallbackMixin
 | |
| 
 | |
| 
 | |
| class FSMBase(CallbackMixin):
 | |
|     """
 | |
|     A general FSM base class you can inherit from to track user progress.
 | |
|     See linear_fsm.py for an example use-case.
 | |
|     TFW the transitions library for state machines, please refer to their
 | |
|     documentation for more information on creating your own machines:
 | |
|     https://github.com/pytransitions/transitions
 | |
|     """
 | |
|     states, transitions = [], []
 | |
| 
 | |
|     def __init__(self, initial: str = None, accepted_states: List[str] = None):
 | |
|         self.accepted_states = accepted_states or [self.states[-1]]
 | |
|         self.machine = Machine(
 | |
|             model=self,
 | |
|             states=self.states,
 | |
|             transitions=self.transitions,
 | |
|             initial=initial or self.states[0],
 | |
|             send_event=True,
 | |
|             ignore_invalid_triggers=True,
 | |
|             after_state_change='execute_callbacks'
 | |
|         )
 | |
| 
 | |
|     def execute_callbacks(self, event_data):
 | |
|         self._execute_callbacks(event_data.kwargs)
 | |
| 
 | |
|     def is_solved(self):
 | |
|         return self.state in self.accepted_states # pylint: disable=no-member
 |