Show More
@@ -20,7 +20,7 b' from IPython.utils.traitlets import (' | |||
|
20 | 20 | Int, Long, Integer, Float, Complex, Bytes, Unicode, TraitError, |
|
21 | 21 | Undefined, Type, This, Instance, TCPAddress, List, Tuple, |
|
22 | 22 | ObjectName, DottedObjectName, CRegExp, link, directional_link, |
|
23 | EventfulList, EventfulDict | |
|
23 | EventfulList, EventfulDict, ForwardDeclaredType, ForwardDeclaredInstance, | |
|
24 | 24 | ) |
|
25 | 25 | from IPython.utils import py3compat |
|
26 | 26 | from IPython.testing.decorators import skipif |
@@ -969,6 +969,23 b' class TestInstanceList(TraitTestBase):' | |||
|
969 | 969 | _good_values = [[Foo(), Foo(), None], None] |
|
970 | 970 | _bad_values = [['1', 2,], '1', [Foo]] |
|
971 | 971 | |
|
972 | class ForwardDeclaredInstanceListTrait(HasTraits): | |
|
973 | ||
|
974 | value = List(ForwardDeclaredInstance('Foo')) | |
|
975 | ||
|
976 | class TestForwardDeclaredInstanceList(TraitTestBase): | |
|
977 | ||
|
978 | obj = ForwardDeclaredInstanceListTrait() | |
|
979 | ||
|
980 | def test_klass(self): | |
|
981 | """Test that the instance klass is properly assigned.""" | |
|
982 | self.assertIs(self.obj.traits()['value']._trait.klass, Foo) | |
|
983 | ||
|
984 | _default_value = [] | |
|
985 | _good_values = [[Foo(), Foo(), None], None] | |
|
986 | _bad_values = [['1', 2,], '1', [Foo]] | |
|
987 | ||
|
988 | ||
|
972 | 989 | class LenListTrait(HasTraits): |
|
973 | 990 | |
|
974 | 991 | value = List(Int, [0], minlen=1, maxlen=2) |
@@ -1320,3 +1337,33 b' class TestEventful(TestCase):' | |||
|
1320 | 1337 | |
|
1321 | 1338 | # Is the output correct? |
|
1322 | 1339 | self.assertEqual(a.x, {c: c for c in 'bz'}) |
|
1340 | ||
|
1341 | ||
|
1342 | class ForwardDeclaredBar(object): | |
|
1343 | pass | |
|
1344 | ||
|
1345 | class ForwardDeclaredBarSub(ForwardDeclaredBar): | |
|
1346 | pass | |
|
1347 | ||
|
1348 | class ForwardDeclaredInstanceTrait(HasTraits): | |
|
1349 | ||
|
1350 | value = ForwardDeclaredInstance(klass='ForwardDeclaredBar') | |
|
1351 | ||
|
1352 | class TestForwardDeclaredInstanceTrait(TraitTestBase): | |
|
1353 | ||
|
1354 | obj = ForwardDeclaredInstanceTrait() | |
|
1355 | _default_value = None | |
|
1356 | _good_values = [None, ForwardDeclaredBar(), ForwardDeclaredBarSub()] | |
|
1357 | _bad_values = ['foo', 3, ForwardDeclaredBar, ForwardDeclaredBarSub] | |
|
1358 | ||
|
1359 | ||
|
1360 | class ForwardDeclaredTypeTrait(HasTraits): | |
|
1361 | ||
|
1362 | value = ForwardDeclaredType(klass='ForwardDeclaredBar') | |
|
1363 | ||
|
1364 | class TestForwardDeclaredInstanceTrait(TraitTestBase): | |
|
1365 | ||
|
1366 | obj = ForwardDeclaredTypeTrait() | |
|
1367 | _default_value = None | |
|
1368 | _good_values = [None, ForwardDeclaredBar, ForwardDeclaredBarSub] | |
|
1369 | _bad_values = ['foo', 3, ForwardDeclaredBar(), ForwardDeclaredBarSub()] |
@@ -967,6 +967,35 b' class Instance(ClassBasedTraitType):' | |||
|
967 | 967 | return dv |
|
968 | 968 | |
|
969 | 969 | |
|
970 | class ForwardDeclaredMixin(object): | |
|
971 | """ | |
|
972 | Mixin for forward-declared versions of Instance and Type. | |
|
973 | """ | |
|
974 | def _resolve_classes(self): | |
|
975 | """ | |
|
976 | Find the specified class name by looking for it in the module in which | |
|
977 | our this_class attribute was defined. | |
|
978 | """ | |
|
979 | try: | |
|
980 | modname = self.this_class.__module__ | |
|
981 | self.klass = import_item('.'.join([modname, self.klass])) | |
|
982 | except AttributeError: | |
|
983 | raise ImportError( | |
|
984 | "Module {} has no attribute {}".format(modname, self.klass) | |
|
985 | ) | |
|
986 | ||
|
987 | class ForwardDeclaredType(ForwardDeclaredMixin, Type): | |
|
988 | """ | |
|
989 | Forward-declared version of Type. | |
|
990 | """ | |
|
991 | pass | |
|
992 | ||
|
993 | class ForwardDeclaredInstance(ForwardDeclaredMixin, Instance): | |
|
994 | """ | |
|
995 | Forward-declared version of Instance. | |
|
996 | """ | |
|
997 | pass | |
|
998 | ||
|
970 | 999 | class This(ClassBasedTraitType): |
|
971 | 1000 | """A trait for instances of the class containing this trait. |
|
972 | 1001 |
General Comments 0
You need to be logged in to leave comments.
Login now