##// END OF EJS Templates
DEV: Support default_value in `ForwardDeclaredMixin`.
Scott Sanderson -
Show More
@@ -1326,11 +1326,11 b' class TestEventful(TestCase):'
1326 ###
1326 ###
1327 class ForwardDeclaredInstanceTrait(HasTraits):
1327 class ForwardDeclaredInstanceTrait(HasTraits):
1328
1328
1329 value = ForwardDeclaredInstance(klass='ForwardDeclaredBar')
1329 value = ForwardDeclaredInstance('ForwardDeclaredBar')
1330
1330
1331 class ForwardDeclaredTypeTrait(HasTraits):
1331 class ForwardDeclaredTypeTrait(HasTraits):
1332
1332
1333 value = ForwardDeclaredType(klass='ForwardDeclaredBar')
1333 value = ForwardDeclaredType('ForwardDeclaredBar')
1334
1334
1335 class ForwardDeclaredInstanceListTrait(HasTraits):
1335 class ForwardDeclaredInstanceListTrait(HasTraits):
1336
1336
@@ -750,6 +750,12 b' class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)):'
750 class ClassBasedTraitType(TraitType):
750 class ClassBasedTraitType(TraitType):
751 """A trait with error reporting for Type, Instance and This."""
751 """A trait with error reporting for Type, Instance and This."""
752
752
753 def _resolve_string(self, string):
754 """
755 Resolve a string supplied for a type into an actual object.
756 """
757 return import_item(string)
758
753 def error(self, obj, value):
759 def error(self, obj, value):
754 kind = type(value)
760 kind = type(value)
755 if (not py3compat.PY3) and kind is InstanceType:
761 if (not py3compat.PY3) and kind is InstanceType:
@@ -842,9 +848,9 b' class Type(ClassBasedTraitType):'
842
848
843 def _resolve_classes(self):
849 def _resolve_classes(self):
844 if isinstance(self.klass, py3compat.string_types):
850 if isinstance(self.klass, py3compat.string_types):
845 self.klass = import_item(self.klass)
851 self.klass = self._resolve_string(self.klass)
846 if isinstance(self.default_value, py3compat.string_types):
852 if isinstance(self.default_value, py3compat.string_types):
847 self.default_value = import_item(self.default_value)
853 self.default_value = self._resolve_string(self.default_value)
848
854
849 def get_default_value(self):
855 def get_default_value(self):
850 return self.default_value
856 return self.default_value
@@ -951,7 +957,7 b' class Instance(ClassBasedTraitType):'
951
957
952 def _resolve_classes(self):
958 def _resolve_classes(self):
953 if isinstance(self.klass, py3compat.string_types):
959 if isinstance(self.klass, py3compat.string_types):
954 self.klass = import_item(self.klass)
960 self.klass = self._resolve_string(self.klass)
955
961
956 def get_default_value(self):
962 def get_default_value(self):
957 """Instantiate a default value instance.
963 """Instantiate a default value instance.
@@ -971,17 +977,17 b' class ForwardDeclaredMixin(object):'
971 """
977 """
972 Mixin for forward-declared versions of Instance and Type.
978 Mixin for forward-declared versions of Instance and Type.
973 """
979 """
974 def _resolve_classes(self):
980 def _resolve_string(self, string):
975 """
981 """
976 Find the specified class name by looking for it in the module in which
982 Find the specified class name by looking for it in the module in which
977 our this_class attribute was defined.
983 our this_class attribute was defined.
978 """
984 """
979 try:
985 try:
980 modname = self.this_class.__module__
986 modname = self.this_class.__module__
981 self.klass = import_item('.'.join([modname, self.klass]))
987 return import_item('.'.join([modname, string]))
982 except AttributeError:
988 except AttributeError:
983 raise ImportError(
989 raise ImportError(
984 "Module {} has no attribute {}".format(modname, self.klass)
990 "Module {} has no attribute {}".format(modname, string)
985 )
991 )
986
992
987
993
@@ -1388,8 +1394,8 b' class Container(Instance):'
1388 def instance_init(self, obj):
1394 def instance_init(self, obj):
1389 if isinstance(self._trait, TraitType):
1395 if isinstance(self._trait, TraitType):
1390 self._trait.this_class = self.this_class
1396 self._trait.this_class = self.this_class
1391 if hasattr(self._trait, '_resolve_classes'):
1397 if hasattr(self._trait, 'instance_init'):
1392 self._trait._resolve_classes()
1398 self._trait.instance_init(obj)
1393 super(Container, self).instance_init(obj)
1399 super(Container, self).instance_init(obj)
1394
1400
1395
1401
General Comments 0
You need to be logged in to leave comments. Login now