def build(self, **actions): """Construct an FSM from a parsed fsm description file. Keyword arguments: **actions -- each action routine callable """ states = {} for state in self.states.values(): s = FSM.STATE( name=state.name, on_enter=actions[state.enter] if state.enter else None, on_exit=actions[state.exit] if state.exit else None, ) states[s.name] = s for event in state.events.values(): e = FSM.EVENT( name=event.name, actions=[actions[n] for n in event.actions], next_state=event.next_state, ) s.events[e.name] = e for state in states.values(): for event in state.events.values(): if event.next_state: event.next_state = states[event.next_state] fsm = FSM.FSM(states.values()) fsm.state = self.first_state fsm.context = self.context fsm.exception = self.exception return fsm