##// END OF EJS Templates
A Union Traitlet
Sylvain Corlay -
Show More
@@ -885,7 +885,7 b' class Instance(ClassBasedTraitType):'
885 """Construct an Instance trait.
885 """Construct an Instance trait.
886
886
887 This trait allows values that are instances of a particular
887 This trait allows values that are instances of a particular
888 class or its sublclasses. Our implementation is quite different
888 class or its subclasses. Our implementation is quite different
889 from that of enthough.traits as we don't allow instances to be used
889 from that of enthough.traits as we don't allow instances to be used
890 for klass and we handle the ``args`` and ``kw`` arguments differently.
890 for klass and we handle the ``args`` and ``kw`` arguments differently.
891
891
@@ -1026,6 +1026,41 b' class This(ClassBasedTraitType):'
1026 self.error(obj, value)
1026 self.error(obj, value)
1027
1027
1028
1028
1029 class Union(TraitType):
1030 """A trait type representing a Union type."""
1031
1032 def __init__(self, trait_types, **metadata):
1033 """Construct a Union trait.
1034
1035 This trait allows values that are allowed by at least one of the
1036 specified trait types.
1037
1038 Parameters
1039 ----------
1040 trait_types: sequence
1041 The list of trait types of length at least 1.
1042
1043 Notes
1044 -----
1045 Union([Float(), Bool(), Int()]) attempts to validate the provided values
1046 with the validation function of Float, then Bool, and finally Int.
1047 """
1048 self.trait_types = trait_types
1049 self.info_text = " or ".join([tt.info_text for tt in self.trait_types])
1050 self.default_value = self.trait_types[0].get_default_value()
1051 super(Union, self).__init__(**metadata)
1052
1053 def validate(self, obj, value):
1054 for trait_type in self.trait_types:
1055 try:
1056 if hasattr(trait_type, 'validate'):
1057 return trait_type.validate(obj, value)
1058 else:
1059 return value
1060 except Exception:
1061 continue
1062 self.error(obj, value)
1063
1029 #-----------------------------------------------------------------------------
1064 #-----------------------------------------------------------------------------
1030 # Basic TraitTypes implementations/subclasses
1065 # Basic TraitTypes implementations/subclasses
1031 #-----------------------------------------------------------------------------
1066 #-----------------------------------------------------------------------------
General Comments 0
You need to be logged in to leave comments. Login now