##// END OF EJS Templates
allow setting Tuple traitlet with list...
MinRK -
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', (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 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], list(range(2))]
906 _good_values = [[1], [1,2], (1,2)]
902 _bad_values = [10, [1,'a'], 'a', (1,2), [], list(range(3))]
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), [1],('a'), ()]
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', [1], []]
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):
@@ -1354,15 +1358,27 b' class List(Container):'
1354 self.length_error(obj, value)
1358 self.length_error(obj, value)
1355
1359
1356 return super(List, self).validate_elements(obj, value)
1360 return super(List, self).validate_elements(obj, value)
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
1357
1371
1358
1372
1359 class Set(Container):
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