@@ -13,18 +13,11 @@ class _DeprecatedModule(object):
13
13
Parameters
14
14
----------
15
15
deprmod : name of module to be deprecated.
16
- alts : alternative modules to be used to access objects or methods
17
- available in module.
18
16
removals : objects or methods in module that will no longer be
19
17
accessible once module is removed.
20
18
"""
21
- def __init__ (self , deprmod , alts = None , removals = None ):
19
+ def __init__ (self , deprmod , removals = None ):
22
20
self .deprmod = deprmod
23
-
24
- self .alts = alts
25
- if self .alts is not None :
26
- self .alts = frozenset (self .alts )
27
-
28
21
self .removals = removals
29
22
if self .removals is not None :
30
23
self .removals = frozenset (self .removals )
@@ -33,47 +26,39 @@ def __init__(self, deprmod, alts=None, removals=None):
33
26
self .self_dir = frozenset (dir (self .__class__ ))
34
27
35
28
def __dir__ (self ):
36
- _dir = object .__dir__ (self )
37
-
38
- if self .removals is not None :
39
- _dir .extend (list (self .removals ))
29
+ deprmodule = self ._import_deprmod ()
30
+ return dir (deprmodule )
40
31
41
- if self .alts is not None :
42
- for modname in self .alts :
43
- module = importlib .import_module (modname )
44
- _dir .extend (dir (module ))
32
+ def __repr__ (self ):
33
+ deprmodule = self ._import_deprmod ()
34
+ return repr (deprmodule )
45
35
46
- return _dir
36
+ __str__ = __repr__
47
37
48
38
def __getattr__ (self , name ):
49
39
if name in self .self_dir :
50
40
return object .__getattribute__ (self , name )
51
41
52
- if self .removals is not None and name in self .removals :
53
- with warnings .catch_warnings ():
54
- warnings .filterwarnings ('ignore' , category = FutureWarning )
55
- module = importlib .import_module (self .deprmod )
42
+ deprmodule = self ._import_deprmod ()
43
+ obj = getattr (deprmodule , name )
56
44
45
+ if self .removals is not None and name in self .removals :
57
46
warnings .warn (
58
47
"{deprmod}.{name} is deprecated and will be removed in "
59
48
"a future version." .format (deprmod = self .deprmod , name = name ),
60
49
FutureWarning , stacklevel = 2 )
50
+ else :
51
+ # The object is actually located in another module.
52
+ warnings .warn (
53
+ "{deprmod}.{name} is deprecated. Please use "
54
+ "{modname}.{name} instead." .format (
55
+ deprmod = self .deprmod , modname = obj .__module__ , name = name ),
56
+ FutureWarning , stacklevel = 2 )
61
57
62
- return object .__getattribute__ (module , name )
63
-
64
- if self .alts is not None :
65
- for modname in self .alts :
66
- module = importlib .import_module (modname )
67
-
68
- if hasattr (module , name ):
69
- warnings .warn (
70
- "{deprmod}.{name} is deprecated. Please use "
71
- "{modname}.{name} instead." .format (
72
- deprmod = self .deprmod , modname = modname , name = name ),
73
- FutureWarning , stacklevel = 2 )
74
-
75
- return getattr (module , name )
58
+ return obj
76
59
77
- raise AttributeError ("module '{deprmod}' has no attribute "
78
- "'{name}'" .format (deprmod = self .deprmod ,
79
- name = name ))
60
+ def _import_deprmod (self ):
61
+ with warnings .catch_warnings ():
62
+ warnings .filterwarnings ('ignore' , category = FutureWarning )
63
+ deprmodule = importlib .import_module (self .deprmod )
64
+ return deprmodule
0 commit comments