__all__ = ['StateMachine', 'StateTransition', 'AbortTransition', 'Transition'] class StateMachine: def do_transition(self, state, transition): trans = self.__class__.transitions[state + "_" + transition] trans.function(self) return trans.tostate class StateTransition: def __init__(self, fromstate, tostate, transition, function): self.fromstate = fromstate self.tostate = tostate self.transition = transition self.function = function self.key = fromstate + "_" + transition class AbortTransition(Exception): pass def Transition(fromstate, tostate, transition, function): trans = StateTransition(fromstate, tostate, transition, function) return (trans.key, trans)