summaryrefslogtreecommitdiffstats
path: root/Lib/inspect.py
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2014-02-21 06:32:42 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2014-02-21 06:32:42 (GMT)
commit8c185ee12e334007b974b3a421704ffb09ecfca8 (patch)
tree76d53ca9253f82ff196debaae8a2df4b070f1ca5 /Lib/inspect.py
parentb2260262993bec4a4df13d356667b4043c14fb3d (diff)
downloadcpython-8c185ee12e334007b974b3a421704ffb09ecfca8.zip
cpython-8c185ee12e334007b974b3a421704ffb09ecfca8.tar.gz
cpython-8c185ee12e334007b974b3a421704ffb09ecfca8.tar.bz2
inspect: Fix getfullargspec to support builtin module-level functions. Issue #20711
Diffstat (limited to 'Lib/inspect.py')
-rw-r--r--Lib/inspect.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 8b7840a..b85fbcc 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -1827,9 +1827,16 @@ def _signature_fromstr(cls, obj, s, skip_bound_arg=True):
p(f.args.kwarg, empty)
if self_parameter is not None:
+ # Possibly strip the bound argument:
+ # - We *always* strip first bound argument if
+ # it is a module.
+ # - We don't strip first bound argument if
+ # skip_bound_arg is False.
assert parameters
- if getattr(obj, '__self__', None) and skip_bound_arg:
- # strip off self, it's already been bound
+ _self = getattr(obj, '__self__', None)
+ self_isbound = _self is not None
+ self_ismodule = ismodule(_self)
+ if self_isbound and (self_ismodule or skip_bound_arg):
parameters.pop(0)
else:
# for builtins, self parameter is always positional-only!