示例#1
0
 class HasCollections(properties.HasProperties):
     tuple_unobs = properties.Tuple('')
     dict_unobs = properties.Dictionary('')
     dict_obs = properties.Dictionary('', observe_mutations=True)
     list_unobs = properties.List('')
     list_obs = properties.List('', observe_mutations=True)
     set_unobs = properties.Set('')
     set_obs = properties.Set('', observe_mutations=True)
示例#2
0
        class HasSets(properties.HasProperties):
            basic = properties.Set('', properties.Integer(''))
            advanced = properties.Set('',
                                      properties.Integer(''),
                                      observe_mutations=True)

            def __init__(self, **kwargs):
                self._basic_tic = 0
                self._advanced_tic = 0

            @properties.validator('basic')
            def _basic_val(self, change):
                self._basic_tic += 1

            @properties.validator('advanced')
            def _advanced_val(self, change):
                self._advanced_tic += 1
示例#3
0
 class HasOptionalSet(properties.HasProperties):
     myset = properties.Set('',
                            properties.Bool(''),
                            required=False,
                            observe_mutations=om)
示例#4
0
 class HasIntASet(properties.HasProperties):
     myset = properties.Set('set of HasIntA',
                            HasIntA,
                            observe_mutations=om)
示例#5
0
 class HasColorSet(properties.HasProperties):
     ccc = properties.Set('set of colors',
                          properties.Color(''),
                          observe_mutations=om)
示例#6
0
 class HasConstrianedSet(properties.HasProperties):
     aaa = properties.Set('set of ints',
                          properties.Integer(''),
                          max_length=2,
                          observe_mutations=om)
示例#7
0
 class HasCoercedIntSet(properties.HasProperties):
     aaa = properties.Set('set of ints',
                          properties.Integer(''),
                          observe_mutations=om,
                          coerce=True)
示例#8
0
 class HasIntSet(properties.HasProperties):
     aaa = properties.Set('set of ints',
                          properties.Integer(''),
                          observe_mutations=om,
                          default=set)
示例#9
0
 class HasDummySet(properties.HasProperties):
     myset = properties.Set('dummy has properties set',
                            prop=HasPropsDummy,
                            observe_mutations=om)
示例#10
0
    def _test_set(self, om):

        with self.assertRaises(TypeError):
            properties.Set('bad string set', prop=str)
        with self.assertRaises(TypeError):
            properties.Set('bad max', properties.Integer(''), max_length=-10)
        with self.assertRaises(TypeError):
            properties.Set('bad max', properties.Integer(''), max_length='ten')
        with self.assertRaises(TypeError):
            myset = properties.Set('bad max',
                                   properties.Integer(''),
                                   min_length=20)
            myset.max_length = 10
        with self.assertRaises(TypeError):
            properties.Set('bad min', properties.Integer(''), min_length=-10)
        with self.assertRaises(TypeError):
            properties.Set('bad min', properties.Integer(''), min_length='ten')
        with self.assertRaises(TypeError):
            myset = properties.Set('bad min',
                                   properties.Integer(''),
                                   max_length=10)
            myset.min_length = 20
        with self.assertRaises(TypeError):
            properties.Set('bad observe',
                           properties.Integer(''),
                           observe_mutations=5)
        with self.assertRaises(TypeError):
            properties.Set('bad coerce', properties.Integer(''), coerce=5)

        class HasPropsDummy(properties.HasProperties):
            pass

        myset = properties.Set('dummy has properties set',
                               prop=HasPropsDummy,
                               observe_mutations=om)
        assert isinstance(myset.prop, properties.Instance)
        assert myset.prop.instance_class is HasPropsDummy

        class HasDummySet(properties.HasProperties):
            myset = properties.Set('dummy has properties set',
                                   prop=HasPropsDummy,
                                   observe_mutations=om)

        assert HasDummySet()._props['myset'].name == 'myset'
        assert HasDummySet()._props['myset'].prop.name == 'myset'

        class HasIntSet(properties.HasProperties):
            aaa = properties.Set('set of ints',
                                 properties.Integer(''),
                                 observe_mutations=om,
                                 default=set)

        li = HasIntSet()
        li.aaa = {1, 2, 3}
        with self.assertRaises(ValueError):
            li.aaa = (1, 2, 3)
        li.aaa = {1., 2., 3.}
        with self.assertRaises(ValueError):
            li.aaa = 4
        with self.assertRaises(ValueError):
            li.aaa = {'a', 'b', 'c'}

        li1 = HasIntSet()
        li2 = HasIntSet()
        assert li1.aaa == li2.aaa
        assert li1.aaa is not li2.aaa

        class HasCoercedIntSet(properties.HasProperties):
            aaa = properties.Set('set of ints',
                                 properties.Integer(''),
                                 observe_mutations=om,
                                 coerce=True)

        li = HasCoercedIntSet()
        li.aaa = 1
        assert li.aaa == {1}
        li.aaa = [1, 2, 3]
        assert li.aaa == {1, 2, 3}
        li.aaa = (1, 2, 3)
        assert li.aaa == {1, 2, 3}

        class HasConstrianedSet(properties.HasProperties):
            aaa = properties.Set('set of ints',
                                 properties.Integer(''),
                                 min_length=2,
                                 observe_mutations=om)

        li = HasConstrianedSet()
        li.aaa = {1, 2, 3}
        li.validate()
        li.aaa = {1}
        with self.assertRaises(ValueError):
            li.validate()

        class HasConstrianedSet(properties.HasProperties):
            aaa = properties.Set('set of ints',
                                 properties.Integer(''),
                                 max_length=2,
                                 observe_mutations=om)

        li = HasConstrianedSet()
        li.aaa = {1, 2}
        li.validate()
        li.aaa = {1, 2, 3, 4, 5}
        with self.assertRaises(ValueError):
            li.validate()

        class HasColorSet(properties.HasProperties):
            ccc = properties.Set('set of colors',
                                 properties.Color(''),
                                 observe_mutations=om)

        li = HasColorSet()
        li.ccc = {'red', '#00FF00'}
        assert li.ccc == {(255, 0, 0), (0, 255, 0)}

        numset = {1, 2, 3, 4}
        assert properties.Set.to_json(numset) == list(numset)
        assert properties.Set.from_json(list(numset)) == numset
        assert properties.Set.from_json(list(numset)) is not numset

        class HasIntA(properties.HasProperties):
            a = properties.Integer('int a', required=True)

        hia_json = properties.Set.to_json({HasIntA(a=5), HasIntA(a=10)})
        assert (hia_json == [{
            '__class__': 'HasIntA',
            'a': 5
        }, {
            '__class__': 'HasIntA',
            'a': 10
        }] or hia_json == [{
            '__class__': 'HasIntA',
            'a': 10
        }, {
            '__class__': 'HasIntA',
            'a': 5
        }])

        li_ser = li.serialize(include_class=False)
        assert (li_ser == {
            'ccc': [[255, 0, 0], [0, 255, 0]]
        } or li_ser == {
            'ccc': [[0, 255, 0], [255, 0, 0]]
        })

        class HasIntASet(properties.HasProperties):
            myset = properties.Set('set of HasIntA',
                                   HasIntA,
                                   observe_mutations=om)

        deser_set = HasIntASet.deserialize({
            'myset': [{
                'a': 0
            }, {
                'a': 10
            }, {
                'a': 100
            }]
        }).myset
        assert isinstance(deser_set, set)
        assert len(deser_set) == 3
        assert all(isinstance(val, HasIntA) for val in deser_set)
        assert {val.a for val in deser_set} == {0, 10, 100}

        class HasOptionalSet(properties.HasProperties):
            myset = properties.Set('',
                                   properties.Bool(''),
                                   required=False,
                                   observe_mutations=om)

        hol = HasOptionalSet()
        hol.validate()

        assert HasIntASet._props['myset'].deserialize(None) is None

        assert properties.Set('',
                              properties.Instance('', HasIntA),
                              observe_mutations=om).equal(
                                  {HasIntA(a=1), HasIntA(a=2)},
                                  {HasIntA(a=1), HasIntA(a=2)})
        assert not properties.Set(
            '', properties.Instance('', HasIntA), observe_mutations=om).equal(
                {HasIntA(a=1), HasIntA(a=2)},
                {HasIntA(a=1), HasIntA(a=2),
                 HasIntA(a=3)})
        assert not properties.Set(
            '', properties.Instance('', HasIntA), observe_mutations=om).equal(
                {HasIntA(a=1), HasIntA(a=2)},
                {HasIntA(a=1), HasIntA(a=3)})
        assert not properties.Set(
            '', properties.Integer(''), observe_mutations=om).equal(5, 5)