Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/wrapt/arguments.py: 19%
16 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:35 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:35 +0000
1# The inspect.formatargspec() function was dropped in Python 3.11 but we need
2# need it for when constructing signature changing decorators based on result of
3# inspect.getargspec() or inspect.getfullargspec(). The code here implements
4# inspect.formatargspec() base on Parameter and Signature from inspect module,
5# which were added in Python 3.6. Thanks to Cyril Jouve for the implementation.
7try:
8 from inspect import Parameter, Signature
9except ImportError:
10 from inspect import formatargspec
11else:
12 def formatargspec(args, varargs=None, varkw=None, defaults=None,
13 kwonlyargs=(), kwonlydefaults={}, annotations={}):
14 if kwonlydefaults is None:
15 kwonlydefaults = {}
16 ndefaults = len(defaults) if defaults else 0
17 parameters = [
18 Parameter(
19 arg,
20 Parameter.POSITIONAL_OR_KEYWORD,
21 default=defaults[i] if i >= 0 else Parameter.empty,
22 annotation=annotations.get(arg, Parameter.empty),
23 ) for i, arg in enumerate(args, ndefaults - len(args))
24 ]
25 if varargs:
26 parameters.append(Parameter(varargs, Parameter.VAR_POSITIONAL))
27 parameters.extend(
28 Parameter(
29 kwonlyarg,
30 Parameter.KEYWORD_ONLY,
31 default=kwonlydefaults.get(kwonlyarg, Parameter.empty),
32 annotation=annotations.get(kwonlyarg, Parameter.empty),
33 ) for kwonlyarg in kwonlyargs
34 )
35 if varkw:
36 parameters.append(Parameter(varkw, Parameter.VAR_KEYWORD))
37 return_annotation = annotations.get('return', Signature.empty)
38 return str(Signature(parameters, return_annotation=return_annotation))