From 4ea52194dbd33ff993598c15eb4f457bd58f02a3 2015-02-17 00:08:22 From: Sylvain Corlay Date: 2015-02-17 00:08:22 Subject: [PATCH] Fix List(Union) element validation --- diff --git a/IPython/utils/tests/test_traitlets.py b/IPython/utils/tests/test_traitlets.py index c550ff0..74278b7 100644 --- a/IPython/utils/tests/test_traitlets.py +++ b/IPython/utils/tests/test_traitlets.py @@ -1001,6 +1001,19 @@ class TestInstanceList(TraitTestBase): _good_values = [[Foo(), Foo(), None], None] _bad_values = [['1', 2,], '1', [Foo]] +class UnionListTrait(HasTraits): + + value = List(Int() | Bool()) + +class TestUnionListTrait(HasTraits): + + obj = UnionListTrait() + + _default_value = [] + _good_values = [[True, 1], [False, True]] + _bad_values = [[1, 'True'], False] + + class LenListTrait(HasTraits): value = List(Int, [0], minlen=1, maxlen=2) diff --git a/IPython/utils/traitlets.py b/IPython/utils/traitlets.py index b991386..35ee687 100644 --- a/IPython/utils/traitlets.py +++ b/IPython/utils/traitlets.py @@ -1071,12 +1071,15 @@ class Union(TraitType): self.default_value = self.trait_types[0].get_default_value() super(Union, self).__init__(**metadata) - def instance_init(self, obj): + def _resolve_classes(self): for trait_type in self.trait_types: trait_type.name = self.name trait_type.this_class = self.this_class if hasattr(trait_type, '_resolve_classes'): trait_type._resolve_classes() + + def instance_init(self, obj): + self._resolve_classes() super(Union, self).instance_init(obj) def validate(self, obj, value):