def do_list(self, list, enum, map, other): for item in list: if item in PythonTypes: other.append(TraitType(item)) else: if isinstance(item, TraitFactory): item = trait_factory(item) typeItem = type(item) if typeItem in ConstantTypes: enum.append(item) elif typeItem in SequenceTypes: self.do_list(item, enum, map, other) elif typeItem is DictType: map.update(item) elif typeItem in CallableTypes: other.append(TraitFunction(item)) elif item is ThisClass: other.append(ThisClass()) # fixme: TraitThisClass is deprecated and will be removed. elif item is TraitThisClass: warning("'TraitThisClass' is deprecated, use 'ThisClass' " "instead.") other.append(ThisClass()) elif isinstance(item, TraitTypes): other.append(item) else: other.append(TraitInstance(item))
def Tuple(*traits, **metadata): if len(traits) == 0: return Trait((), TraitType(tuple), **metadata) value = None if isinstance(traits[0], tuple): value, traits = traits[0], traits[1:] if len(traits) == 0: traits = [Trait(element) for element in value] tt = TraitTuple(*traits) if value is None: value = tuple([trait.default_value()[1] for trait in tt.traits]) return Trait(value, tt, **metadata)
def define ( self, *value_type, **metadata ): default_value_type = -1 default_value = handler = clone = None if len( value_type ) > 0: default_value = value_type[0] value_type = value_type[1:] if ((len( value_type ) == 0) and (type( default_value ) in SequenceTypes)): default_value, value_type = default_value[0], default_value if len( value_type ) == 0: if isinstance( default_value, TraitFactory ): default_value = trait_factory( default_value ) if default_value in PythonTypes: handler = TraitType( default_value ) default_value = DefaultValues.get( default_value ) elif isinstance( default_value, CTrait ): clone = default_value default_value_type, default_value = clone.default_value() metadata[ 'type' ] = clone.type elif isinstance( default_value, TraitHandler ): handler = default_value default_value = None elif default_value is ThisClass: handler = ThisClass() default_value = None else: typeValue = type( default_value ) if typeValue is StringType: string_options = self.extract( metadata, 'min_len', 'max_len', 'regex' ) if len( string_options ) == 0: handler = TraitCastType( typeValue ) else: handler = TraitString( **string_options ) elif typeValue in TypeTypes: handler = TraitCastType( typeValue ) else: handler = TraitInstance( default_value ) if default_value is handler.aClass: default_value = DefaultValues.get( default_value ) else: enum = [] other = [] map = {} self.do_list( value_type, enum, map, other ) if (((len( enum ) == 1) and (enum[0] is None)) and ((len( other ) == 1) and isinstance( other[0], TraitInstance ))): enum = [] other[0].allow_none() if len( enum ) > 0: if (((len( map ) + len( other )) == 0) and (default_value not in enum)): enum.insert( 0, default_value ) other.append( TraitEnum( enum ) ) if len( map ) > 0: other.append( TraitMap( map ) ) if len( other ) == 0: handler = TraitHandler() elif len( other ) == 1: handler = other[0] if isinstance( handler, CTrait ): clone, handler = handler, None metadata[ 'type' ] = clone.type elif isinstance( handler, TraitInstance ): if default_value is None: handler.allow_none() elif isinstance( default_value, _InstanceArgs ): default_value_type = 7 default_value = ( handler.create_default_value, default_value.args, default_value.kw ) elif (len( enum ) == 0) and (len( map ) == 0): aClass = handler.aClass typeValue = type( default_value ) if typeValue is dict: default_value_type = 7 default_value = ( aClass, (), default_value ) elif not isinstance( default_value, aClass ): if typeValue is not tuple: default_value = ( default_value, ) default_value_type = 7 default_value = ( aClass, default_value, None ) else: for i, item in enumerate( other ): if isinstance( item, CTrait ): if item.type != 'trait': raise TraitError, ("Cannot create a complex " "trait containing %s trait." % add_article( item.type ) ) handler = item.handler if handler is None: break other[i] = handler else: handler = TraitCompound( other ) # Save the results: self.handler = handler self.clone = clone if default_value_type < 0: if isinstance( default_value, Default ): default_value_type = 7 default_value = default_value.default_value else: if (handler is None) and (clone is not None): handler = clone.handler if handler is not None: default_value_type = handler.default_value_type if default_value_type >= 0: if hasattr( handler, 'default_value' ): default_value = handler.default_value(default_value) else: try: default_value = handler.validate( None, '', default_value ) except: pass if default_value_type < 0: default_value_type = _default_value_type( default_value ) self.default_value_type = default_value_type self.default_value = default_value self.metadata = metadata.copy()
def define(self, *value_type, **metadata): default_value_type = -1 default_value = handler = clone = None if len(value_type) > 0: default_value = value_type[0] value_type = value_type[1:] if ((len(value_type) == 0) and (type(default_value) in SequenceTypes)): default_value, value_type = default_value[0], default_value if len(value_type) == 0: if isinstance(default_value, TraitFactory): default_value = trait_factory(default_value) if default_value in PythonTypes: handler = TraitType(default_value) default_value = DefaultValues.get(default_value) elif isinstance(default_value, CTrait): clone = default_value default_value_type, default_value = clone.default_value() metadata['type'] = clone.type elif isinstance(default_value, TraitHandler): handler = default_value default_value = None elif default_value is ThisClass: handler = ThisClass() default_value = None else: typeValue = type(default_value) if typeValue is StringType: string_options = self.extract(metadata, 'min_len', 'max_len', 'regex') if len(string_options) == 0: handler = TraitCastType(typeValue) else: handler = TraitString(**string_options) elif typeValue in TypeTypes: handler = TraitCastType(typeValue) else: handler = TraitInstance(default_value) if default_value is handler.aClass: default_value = DefaultValues.get(default_value) else: enum = [] other = [] map = {} self.do_list(value_type, enum, map, other) if (((len(enum) == 1) and (enum[0] is None)) and ((len(other) == 1) and isinstance(other[0], TraitInstance))): enum = [] other[0].allow_none() if len(enum) > 0: if (((len(map) + len(other)) == 0) and (default_value not in enum)): enum.insert(0, default_value) other.append(TraitEnum(enum)) if len(map) > 0: other.append(TraitMap(map)) if len(other) == 0: handler = TraitHandler() elif len(other) == 1: handler = other[0] if isinstance(handler, CTrait): clone, handler = handler, None metadata['type'] = clone.type elif isinstance(handler, TraitInstance): if default_value is None: handler.allow_none() elif isinstance(default_value, _InstanceArgs): default_value_type = 7 default_value = (handler.create_default_value, default_value.args, default_value.kw) elif (len(enum) == 0) and (len(map) == 0): aClass = handler.aClass typeValue = type(default_value) if typeValue is dict: default_value_type = 7 default_value = (aClass, (), default_value) elif not isinstance(default_value, aClass): if typeValue is not tuple: default_value = (default_value, ) default_value_type = 7 default_value = (aClass, default_value, None) else: for i, item in enumerate(other): if isinstance(item, CTrait): if item.type != 'trait': raise TraitError, ( "Cannot create a complex " "trait containing %s trait." % add_article(item.type)) handler = item.handler if handler is None: break other[i] = handler else: handler = TraitCompound(other) # Save the results: self.handler = handler self.clone = clone if default_value_type < 0: if isinstance(default_value, Default): default_value_type = 7 default_value = default_value.default_value else: if (handler is None) and (clone is not None): handler = clone.handler if handler is not None: default_value_type = handler.default_value_type if default_value_type >= 0: if hasattr(handler, 'default_value'): default_value = handler.default_value( default_value) else: try: default_value = handler.validate( None, '', default_value) except: pass if default_value_type < 0: default_value_type = _default_value_type(default_value) self.default_value_type = default_value_type self.default_value = default_value self.metadata = metadata.copy()
def Unicode(value=u'', **metadata): if 'editor' not in metadata: metadata['editor'] = multi_line_text_editor return Trait(value, TraitType(unicode), **metadata)
def Bool(value=False, **metadata): return Trait(value, TraitType(bool), **metadata)
def Str(value='', **metadata): if 'editor' not in metadata: metadata['editor'] = multi_line_text_editor return Trait(value, TraitType(str), **metadata)
def Complex(value=0.0 + 0.0j, **metadata): return Trait(value, TraitType(complex), **metadata)
def Float(value=0.0, **metadata): return Trait(value, TraitType(float), **metadata)
def Int(value=0, **metadata): return Trait(value, TraitType(int), **metadata)
Any = TraitFactory(Any) #--- 'Coerced' traits ---------------------------------------------------------- def Int(value=0, **metadata): return Trait(value, TraitType(int), **metadata) Int = TraitFactory(Int) def Long(value=0L, **metadata): return Trait(value, TraitType(long), **metadata) Long = TraitFactory(Long) def Float(value=0.0, **metadata): return Trait(value, TraitType(float), **metadata) Float = TraitFactory(Float) def Complex(value=0.0 + 0.0j, **metadata): return Trait(value, TraitType(complex), **metadata)