summaryrefslogtreecommitdiffstats
path: root/Lib/inspect.py
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2019-04-30 01:01:14 (GMT)
committerGitHub <noreply@github.com>2019-04-30 01:01:14 (GMT)
commitd5d2b4546939b98244708e5bb0cfccd55b99d244 (patch)
tree2a98e93bcad785c97f88154d275a4662afa40f8c /Lib/inspect.py
parent81c5a905951aaf46f292eb459c32649c0b74ef61 (diff)
downloadcpython-d5d2b4546939b98244708e5bb0cfccd55b99d244.zip
cpython-d5d2b4546939b98244708e5bb0cfccd55b99d244.tar.gz
cpython-d5d2b4546939b98244708e5bb0cfccd55b99d244.tar.bz2
bpo-36751: Deprecate getfullargspec and report positional-only args as regular args (GH-13016)
* bpo-36751: Deprecate getfullargspec and report positional-only args as regular args * Use inspect.signature in testhelpers
Diffstat (limited to 'Lib/inspect.py')
-rw-r--r--Lib/inspect.py43
1 files changed, 18 insertions, 25 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 3201e79..fffca22 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -1081,16 +1081,15 @@ def getargspec(func):
warnings.warn("inspect.getargspec() is deprecated since Python 3.0, "
"use inspect.signature() or inspect.getfullargspec()",
DeprecationWarning, stacklevel=2)
- args, varargs, varkw, defaults, posonlyargs, kwonlyargs, \
- kwonlydefaults, ann = getfullargspec(func)
- if posonlyargs or kwonlyargs or ann:
- raise ValueError("Function has positional-only, keyword-only parameters"
- " or annotations, use getfullargspec() API which can"
- " support them")
+ args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = \
+ getfullargspec(func)
+ if kwonlyargs or ann:
+ raise ValueError("Function has keyword-only parameters or annotations"
+ ", use inspect.signature() API which can support them")
return ArgSpec(args, varargs, varkw, defaults)
FullArgSpec = namedtuple('FullArgSpec',
- 'args, varargs, varkw, defaults, posonlyargs, kwonlyargs, kwonlydefaults, annotations')
+ 'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations')
def getfullargspec(func):
"""Get the names and default values of a callable object's parameters.
@@ -1104,11 +1103,16 @@ def getfullargspec(func):
'kwonlydefaults' is a dictionary mapping names from kwonlyargs to defaults.
'annotations' is a dictionary mapping parameter names to annotations.
+ .. deprecated:: 3.8
+ Use inspect.signature() instead of inspect.getfullargspec().
+
Notable differences from inspect.signature():
- the "self" parameter is always reported, even for bound methods
- wrapper chains defined by __wrapped__ *not* unwrapped automatically
"""
+ warnings.warn("Use inspect.signature() instead of inspect.getfullargspec()",
+ DeprecationWarning)
try:
# Re: `skip_bound_arg=False`
#
@@ -1182,8 +1186,8 @@ def getfullargspec(func):
# compatibility with 'func.__defaults__'
defaults = None
- return FullArgSpec(args, varargs, varkw, defaults,
- posonlyargs, kwonlyargs, kwdefaults, annotations)
+ return FullArgSpec(posonlyargs + args, varargs, varkw, defaults,
+ kwonlyargs, kwdefaults, annotations)
ArgInfo = namedtuple('ArgInfo', 'args varargs keywords locals')
@@ -1214,8 +1218,7 @@ def formatannotationrelativeto(object):
return _formatannotation
def formatargspec(args, varargs=None, varkw=None, defaults=None,
- posonlyargs=(), kwonlyargs=(), kwonlydefaults={},
- annotations={},
+ kwonlyargs=(), kwonlydefaults={}, annotations={},
formatarg=str,
formatvarargs=lambda name: '*' + name,
formatvarkw=lambda name: '**' + name,
@@ -1248,17 +1251,12 @@ def formatargspec(args, varargs=None, varkw=None, defaults=None,
return result
specs = []
if defaults:
- firstdefault = len(posonlyargs) + len(args) - len(defaults)
- posonly_left = len(posonlyargs)
- for i, arg in enumerate([*posonlyargs, *args]):
+ firstdefault = len(args) - len(defaults)
+ for i, arg in enumerate(args):
spec = formatargandannotation(arg)
if defaults and i >= firstdefault:
spec = spec + formatvalue(defaults[i - firstdefault])
specs.append(spec)
- posonly_left -= 1
- if posonlyargs and posonly_left == 0:
- specs.append('/')
-
if varargs is not None:
specs.append(formatvarargs(formatargandannotation(varargs)))
else:
@@ -1346,8 +1344,7 @@ def getcallargs(*func_and_positional, **named):
func = func_and_positional[0]
positional = func_and_positional[1:]
spec = getfullargspec(func)
- (args, varargs, varkw, defaults, posonlyargs,
- kwonlyargs, kwonlydefaults, ann) = spec
+ args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = spec
f_name = func.__name__
arg2value = {}
@@ -1356,16 +1353,12 @@ def getcallargs(*func_and_positional, **named):
# implicit 'self' (or 'cls' for classmethods) argument
positional = (func.__self__,) + positional
num_pos = len(positional)
- num_posonlyargs = len(posonlyargs)
num_args = len(args)
num_defaults = len(defaults) if defaults else 0
- n = min(num_pos, num_posonlyargs)
- for i in range(num_posonlyargs):
- arg2value[posonlyargs[i]] = positional[i]
n = min(num_pos, num_args)
for i in range(n):
- arg2value[args[i]] = positional[num_posonlyargs+i]
+ arg2value[args[i]] = positional[i]
if varargs:
arg2value[varargs] = tuple(positional[n:])
possible_kwargs = set(args + kwonlyargs)