Example #1
0
    def coerce(self, value):
        if value is None:
            return None

        if isinstance(value, Entity):
            return value.identity

        if isinstance(value, identity.Identity):
            return value

        value_repr = None
        try:
            value_repr = repr(value)
        except Exception as e:
            raise TypeError(
                ("Object passed to coerce is not an identity. Additionally, "
                 "calling repr(object) raised %s.") % e)

        if superposition.insuperposition(value):
            if superposition.state_type(value) == identity.Identity:
                return value

            raise TypeError(
                "Object being coerced as identity is a superposition %s of "
                "variant type %r." % (value_repr, value.type_name))

        raise TypeError("%s is not an identity." % value_repr)
Example #2
0
    def coerce(self, value):
        if value is None:
            return None

        if isinstance(value, Entity):
            return value.identity

        if isinstance(value, identity.Identity):
            return value

        value_repr = None
        try:
            value_repr = repr(value)
        except Exception as e:
            raise TypeError(
                ("Object passed to coerce is not an identity. Additionally, "
                 "calling repr(object) raised %s.") % e)

        if superposition.insuperposition(value):
            if superposition.state_type(value) == identity.Identity:
                return value

            raise TypeError(
                "Object being coerced as identity is a superposition %s of "
                "variant type %r." % (value_repr, value.type_name))

        raise TypeError("%s is not an identity." % value_repr)
Example #3
0
    def __init__(self, first_state=None, *states):
        self._delegate = self._make_delegate()

        if first_state is None:
            return

        self._state_type = superposition.state_type(first_state)
        self.add_state(first_state)

        for state in states:
            if superposition.state_type(state) != self.state_type():
                raise TypeError(
                    "All states of a superposition must be of the same type."
                    " First argument was of type %r, but argument %r is of "
                    " type %r." % (self.state_type(), state,
                                   superposition.state_type(state)))
            self.add_state(state)
Example #4
0
    def __init__(self, first_state=None, *states):
        self._delegate = self._make_delegate()

        if first_state is None:
            return

        self._state_type = superposition.state_type(first_state)
        self.add_state(first_state)

        for state in states:
            if superposition.state_type(state) != self.state_type():
                raise TypeError(
                    "All states of a superposition must be of the same type."
                    " First argument was of type %r, but argument %r is of "
                    " type %r." %
                    (self.state_type(), state,
                     superposition.state_type(state)))
            self.add_state(state)
Example #5
0
    def testNesting(self):
        """Test that superpositions remain flat."""
        s = superposition.superposition("foo", "bar")
        s = superposition.superposition(s, "baz")
        self.assertStateEq(superposition.superposition("foo", "bar", "baz"), s)

        s = superposition.superposition("zoo", s)
        self.assertStateEq(
            superposition.superposition("foo", "bar", "baz", "zoo"), s)

        self.assertEqual(superposition.state_type(s), type("foo"))
Example #6
0
    def testNesting(self):
        """Test that superpositions remain flat."""
        s = superposition.superposition("foo", "bar")
        s = superposition.superposition(s, "baz")
        self.assertStateEq(superposition.superposition("foo", "bar", "baz"), s)

        s = superposition.superposition("zoo", s)
        self.assertStateEq(
            superposition.superposition("foo", "bar", "baz", "zoo"), s)

        self.assertEqual(superposition.state_type(s), type("foo"))
Example #7
0
 def _typecheck(self, other, operation="compare"):
     other_type = superposition.state_type(other)
     if other_type != self._state_type:
         raise TypeError(
             "Can't %s %r of state type %r with %r of state type %r."
             % (operation, other, other_type, self, self._state_type))
Example #8
0
 def _typecheck(self, other, operation="compare"):
     other_type = superposition.state_type(other)
     if other_type != self._state_type:
         raise TypeError(
             "Can't %s %r of state type %r with %r of state type %r." %
             (operation, other, other_type, self, self._state_type))