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