def _construct_fsm(self, states=PlatformDriverState, events=PlatformDriverEvent, enter_event=PlatformDriverEvent.ENTER, exit_event=PlatformDriverEvent.EXIT): """ Constructs the FSM for the driver. The preparations here are mostly related with the UNCONFIGURED, DISCONNECTED, and CONNECTED state transitions, with some common handlers for the CONNECTED state. Subclasses can override to indicate specific parameters and add new handlers (typically for the CONNECTED state). """ log.debug("%r: constructing base platform driver FSM", self._platform_id) self._fsm = ThreadSafeFSM(states, events, enter_event, exit_event) for state in PlatformDriverState.list(): self._fsm.add_handler(state, enter_event, self._common_state_enter) self._fsm.add_handler(state, exit_event, self._common_state_exit) # UNCONFIGURED state event handlers: self._fsm.add_handler(PlatformDriverState.UNCONFIGURED, PlatformDriverEvent.CONFIGURE, self._handler_unconfigured_configure) # DISCONNECTED state event handlers: self._fsm.add_handler(PlatformDriverState.DISCONNECTED, PlatformDriverEvent.CONNECT, self._handler_disconnected_connect) self._fsm.add_handler(PlatformDriverState.DISCONNECTED, PlatformDriverEvent.DISCONNECT, self._handler_disconnected_disconnect) # CONNECTED state event handlers: self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.DISCONNECT, self._handler_connected_disconnect) self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.CONNECTION_LOST, self._handler_connected_connection_lost) self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.PING, self._handler_connected_ping) self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.GET, self._handler_connected_get) self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.SET, self._handler_connected_set) self._fsm.add_handler(PlatformDriverState.CONNECTED, PlatformDriverEvent.EXECUTE, self._handler_connected_execute)
def setUp(self): self.fsm = ThreadSafeFSM(MyStates, MyEvents, MyEvents.ENTER, MyEvents.EXIT) self.fsm.add_handler(MyStates.STATE_1, MyEvents.EVENT_1, self._handler_s1_e1) self.fsm.add_handler(MyStates.STATE_1, MyEvents.EVENT_2, self._handler_s1_e2) self.fsm.add_handler(MyStates.STATE_2, MyEvents.EVENT_1, self._handler_s2_e1) self.fsm.add_handler(MyStates.STATE_2, MyEvents.EVENT_2, self._handler_s2_e2) self.test_value = None self.fsm.start(MyStates.STATE_1)