Show More
@@ -886,8 +886,13 b' class TestList(TraitTestBase):' | |||||
886 | obj = ListTrait() |
|
886 | obj = ListTrait() | |
887 |
|
887 | |||
888 | _default_value = [] |
|
888 | _default_value = [] | |
889 | _good_values = [[], [1], list(range(10))] |
|
889 | _good_values = [[], [1], list(range(10)), (1,2)] | |
890 |
_bad_values = [10, [1,'a'], 'a' |
|
890 | _bad_values = [10, [1,'a'], 'a'] | |
|
891 | ||||
|
892 | def coerce(self, value): | |||
|
893 | if value is not None: | |||
|
894 | value = list(value) | |||
|
895 | return value | |||
891 |
|
896 | |||
892 | class LenListTrait(HasTraits): |
|
897 | class LenListTrait(HasTraits): | |
893 |
|
898 | |||
@@ -898,8 +903,13 b' class TestLenList(TraitTestBase):' | |||||
898 | obj = LenListTrait() |
|
903 | obj = LenListTrait() | |
899 |
|
904 | |||
900 | _default_value = [0] |
|
905 | _default_value = [0] | |
901 |
_good_values = [[1], |
|
906 | _good_values = [[1], [1,2], (1,2)] | |
902 |
_bad_values = [10, [1,'a'], 'a', |
|
907 | _bad_values = [10, [1,'a'], 'a', [], list(range(3))] | |
|
908 | ||||
|
909 | def coerce(self, value): | |||
|
910 | if value is not None: | |||
|
911 | value = list(value) | |||
|
912 | return value | |||
903 |
|
913 | |||
904 | class TupleTrait(HasTraits): |
|
914 | class TupleTrait(HasTraits): | |
905 |
|
915 | |||
@@ -910,8 +920,13 b' class TestTupleTrait(TraitTestBase):' | |||||
910 | obj = TupleTrait() |
|
920 | obj = TupleTrait() | |
911 |
|
921 | |||
912 | _default_value = None |
|
922 | _default_value = None | |
913 | _good_values = [(1,), None,(0,)] |
|
923 | _good_values = [(1,), None, (0,), [1]] | |
914 |
_bad_values = [10, (1,2), |
|
924 | _bad_values = [10, (1,2), ('a'), ()] | |
|
925 | ||||
|
926 | def coerce(self, value): | |||
|
927 | if value is not None: | |||
|
928 | value = tuple(value) | |||
|
929 | return value | |||
915 |
|
930 | |||
916 | def test_invalid_args(self): |
|
931 | def test_invalid_args(self): | |
917 | self.assertRaises(TypeError, Tuple, 5) |
|
932 | self.assertRaises(TypeError, Tuple, 5) | |
@@ -927,8 +942,13 b' class TestLooseTupleTrait(TraitTestBase):' | |||||
927 | obj = LooseTupleTrait() |
|
942 | obj = LooseTupleTrait() | |
928 |
|
943 | |||
929 | _default_value = (1,2,3) |
|
944 | _default_value = (1,2,3) | |
930 | _good_values = [(1,), None, (0,), tuple(range(5)), tuple('hello'), ('a',5), ()] |
|
945 | _good_values = [(1,), None, [1], (0,), tuple(range(5)), tuple('hello'), ('a',5), ()] | |
931 |
_bad_values = [10, 'hello', |
|
946 | _bad_values = [10, 'hello', {}] | |
|
947 | ||||
|
948 | def coerce(self, value): | |||
|
949 | if value is not None: | |||
|
950 | value = tuple(value) | |||
|
951 | return value | |||
932 |
|
952 | |||
933 | def test_invalid_args(self): |
|
953 | def test_invalid_args(self): | |
934 | self.assertRaises(TypeError, Tuple, 5) |
|
954 | self.assertRaises(TypeError, Tuple, 5) |
@@ -1210,6 +1210,7 b' class Container(Instance):' | |||||
1210 | To be subclassed by overriding klass. |
|
1210 | To be subclassed by overriding klass. | |
1211 | """ |
|
1211 | """ | |
1212 | klass = None |
|
1212 | klass = None | |
|
1213 | _cast_types = () | |||
1213 | _valid_defaults = SequenceTypes |
|
1214 | _valid_defaults = SequenceTypes | |
1214 | _trait = None |
|
1215 | _trait = None | |
1215 |
|
1216 | |||
@@ -1273,6 +1274,8 b' class Container(Instance):' | |||||
1273 | raise TraitError(e) |
|
1274 | raise TraitError(e) | |
1274 |
|
1275 | |||
1275 | def validate(self, obj, value): |
|
1276 | def validate(self, obj, value): | |
|
1277 | if isinstance(value, self._cast_types): | |||
|
1278 | value = self.klass(value) | |||
1276 | value = super(Container, self).validate(obj, value) |
|
1279 | value = super(Container, self).validate(obj, value) | |
1277 | if value is None: |
|
1280 | if value is None: | |
1278 | return value |
|
1281 | return value | |
@@ -1298,6 +1301,7 b' class Container(Instance):' | |||||
1298 | class List(Container): |
|
1301 | class List(Container): | |
1299 | """An instance of a Python list.""" |
|
1302 | """An instance of a Python list.""" | |
1300 | klass = list |
|
1303 | klass = list | |
|
1304 | _cast_types = (tuple,) | |||
1301 |
|
1305 | |||
1302 | def __init__(self, trait=None, default_value=None, minlen=0, maxlen=sys.maxsize, |
|
1306 | def __init__(self, trait=None, default_value=None, minlen=0, maxlen=sys.maxsize, | |
1303 | allow_none=True, **metadata): |
|
1307 | allow_none=True, **metadata): | |
@@ -1355,14 +1359,26 b' class List(Container):' | |||||
1355 |
|
1359 | |||
1356 | return super(List, self).validate_elements(obj, value) |
|
1360 | return super(List, self).validate_elements(obj, value) | |
1357 |
|
1361 | |||
|
1362 | def validate(self, obj, value): | |||
|
1363 | value = super(List, self).validate(obj, value) | |||
|
1364 | if value is None: | |||
|
1365 | return value | |||
|
1366 | ||||
|
1367 | value = self.validate_elements(obj, value) | |||
|
1368 | ||||
|
1369 | return value | |||
|
1370 | ||||
|
1371 | ||||
1358 |
|
1372 | |||
1359 |
class Set( |
|
1373 | class Set(List): | |
1360 | """An instance of a Python set.""" |
|
1374 | """An instance of a Python set.""" | |
1361 | klass = set |
|
1375 | klass = set | |
|
1376 | _cast_types = (tuple, list) | |||
1362 |
|
1377 | |||
1363 | class Tuple(Container): |
|
1378 | class Tuple(Container): | |
1364 | """An instance of a Python tuple.""" |
|
1379 | """An instance of a Python tuple.""" | |
1365 | klass = tuple |
|
1380 | klass = tuple | |
|
1381 | _cast_types = (list,) | |||
1366 |
|
1382 | |||
1367 | def __init__(self, *traits, **metadata): |
|
1383 | def __init__(self, *traits, **metadata): | |
1368 | """Tuple(*traits, default_value=None, allow_none=True, **medatata) |
|
1384 | """Tuple(*traits, default_value=None, allow_none=True, **medatata) |
General Comments 0
You need to be logged in to leave comments.
Login now