Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/wrapt/arguments.py: 25%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""The inspect.formatargspec() function was dropped in Python 3.11 but we need
2it for when constructing signature changing decorators based on result of
3inspect.getfullargspec(). The code here implements inspect.formatargspec() based
4on Parameter and Signature from inspect module, which were added in Python 3.6.
5Thanks to Cyril Jouve for the implementation.
6"""
8from typing import Any, Callable, List, Mapping, Optional, Sequence, Tuple
10try:
11 from inspect import Parameter, Signature
12except ImportError:
13 from inspect import formatargspec # type: ignore[attr-defined]
14else:
16 def formatargspec(
17 args: List[str],
18 varargs: Optional[str] = None,
19 varkw: Optional[str] = None,
20 defaults: Optional[Tuple[Any, ...]] = None,
21 kwonlyargs: Optional[Sequence[str]] = None,
22 kwonlydefaults: Optional[Mapping[str, Any]] = None,
23 annotations: Mapping[str, Any] = {},
24 formatarg: Callable[[str], str] = str,
25 formatvarargs: Callable[[str], str] = lambda name: "*" + name,
26 formatvarkw: Callable[[str], str] = lambda name: "**" + name,
27 formatvalue: Callable[[Any], str] = lambda value: "=" + repr(value),
28 formatreturns: Callable[[Any], str] = lambda text: " -> " + text,
29 formatannotation: Callable[[Any], str] = lambda annot: " -> " + repr(annot),
30 ) -> str:
31 if kwonlyargs is None:
32 kwonlyargs = ()
33 if kwonlydefaults is None:
34 kwonlydefaults = {}
35 ndefaults = len(defaults) if defaults else 0
36 parameters = [
37 Parameter(
38 arg,
39 Parameter.POSITIONAL_OR_KEYWORD,
40 default=defaults[i] if defaults and i >= 0 else Parameter.empty,
41 annotation=annotations.get(arg, Parameter.empty),
42 )
43 for i, arg in enumerate(args, ndefaults - len(args))
44 ]
45 if varargs:
46 parameters.append(Parameter(varargs, Parameter.VAR_POSITIONAL))
47 parameters.extend(
48 Parameter(
49 kwonlyarg,
50 Parameter.KEYWORD_ONLY,
51 default=kwonlydefaults.get(kwonlyarg, Parameter.empty),
52 annotation=annotations.get(kwonlyarg, Parameter.empty),
53 )
54 for kwonlyarg in kwonlyargs
55 )
56 if varkw:
57 parameters.append(Parameter(varkw, Parameter.VAR_KEYWORD))
58 return_annotation = annotations.get("return", Signature.empty)
59 return str(Signature(parameters, return_annotation=return_annotation))