1
1
from __future__ import (absolute_import , division ,
2
2
print_function , unicode_literals )
3
3
4
- try :
5
- # IPython4 imports
6
- from traitlets .config import Configurable , Config
7
- from traitlets import (TraitType , Int , Float , Bool ,
8
- Dict , List , Instance , Union ,
9
- Unicode , Tuple , TraitError ,
10
- Undefined , BaseDescriptor ,
11
- getargspec , observe , default ,
12
- validate , EventHandler )
13
- except ImportError :
14
- # IPython3 imports
15
- from IPython .utils .traitlets .config import Configurable , Config
16
- from IPython .utils .traitlets import (TraitType , Int , Float , Bool ,
17
- Dict , List , Instance , Union , Unicode ,
18
- Tuple , TraitError , Undefined , BaseDescriptor ,
19
- getargspec , observe , default , validate ,
20
- EventHandler )
4
+ # IPython4 imports
5
+ from traitlets .config import Configurable , Config
6
+ from traitlets import (TraitType , Int , Float , Bool ,
7
+ Dict , List , Instance , Union ,
8
+ Unicode , Tuple , TraitError ,
9
+ Undefined , BaseDescriptor ,
10
+ getargspec , observe , default ,
11
+ validate , EventHandler )
21
12
22
13
import re
23
14
import types
@@ -68,6 +59,9 @@ def private(self, name, value=Undefined):
68
59
self ._notify_trait = _notify_trait
69
60
self ._cross_validation_lock = False
70
61
62
+ if isinstance (_notify_trait , types .MethodType ):
63
+ self .__dict__ .pop ('_notify_trait' )
64
+
71
65
return trait .get (self , None )
72
66
73
67
def _retrieve_trait (self , name ):
@@ -93,11 +87,17 @@ def __init__(self, name):
93
87
def instance_init (self , inst ):
94
88
if not hasattr (inst , '_retrieve_handlers' ):
95
89
inst ._retrieve_handlers = {}
96
- if self ._name in inst ._retrieve_handlers :
97
- raise TraitError ("A retriever for the trait '%s' has "
98
- "already been registered" % self ._name )
90
+ handler = inst ._retrieve_handlers .get (self ._name )
91
+ if handler and hasattr (handler , 'func' ):
92
+ raise TraitError ("A retriever for the trait '%s' has "
93
+ "already been registered" % self ._name )
99
94
inst ._retrieve_handlers [self ._name ] = self
100
95
96
+ def __getstate__ (self ):
97
+ d = self .__dict__ .copy ()
98
+ d .pop ('func' , None )
99
+ return d
100
+
101
101
class OnGetMixin (object ):
102
102
103
103
def __get__ (self , obj , cls = None ):
0 commit comments