Beispiel #1
0
 def __set_state(self, newvalue):
     """Set state to new value, ensuring it is a proper state and respects the state machine"""
     if newvalue not in self._states:
         raise DataStateError(newvalue)
     if not hasattr(self, '_DataState__state'):
         if newvalue != self._initial_state:
             raise DataStateError(newvalue)
     elif (self.__state, newvalue) not in self._transitions:
         raise DataStateTransitionError((self.__state, newvalue))
     self.__state = newvalue
Beispiel #2
0
    def __init__(self, spec):
        """Validate states and transitions

        Arguments:
        spec -- a dictionary passed to the underlying Data class

        Exceptions:
        DataStateError -- _states, _transitions or _initial_state contains an improper value; accompanying message contains
            additional information
        """
        Data.__init__(self, spec)

        if not isinstance(self._states, list):
            raise DataStateError("_states attribute is not a list: %s" % (self._states,))

        if self._initial_state == None:
            raise DataStateError("_initial_state is not set")
        if self._initial_state not in self._states:
            raise DataStateError("_initial_state is not a valid state: %s" % (self._initial_state,))

        if not isinstance(self._transitions, list):
            raise DataStateError("_transitions attribute is not a list: %s" % (self._transitions,))
        for transition in self._transitions:
            if not isinstance(transition, tuple) or len(transition) != 2:
                raise DataStateError("_transition is not a 2-tuple: %s" % (transition,))
            old_state, new_state = transition
            if old_state not in self._states:
                raise DataStateError("_transition contains a invalid state: %s" % (old_state,))
            if new_state not in self._states:
                raise DataStateError("_transition contains a invalid state: %s" % (new_state,))