Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/wrapt/arguments.py: 24%

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

17 statements  

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""" 

7 

8from inspect import Parameter, Signature 

9from typing import Any, Callable, List, Mapping, Optional, Sequence, Tuple 

10 

11 

12def formatargspec( 

13 args: List[str], 

14 varargs: Optional[str] = None, 

15 varkw: Optional[str] = None, 

16 defaults: Optional[Tuple[Any, ...]] = None, 

17 kwonlyargs: Optional[Sequence[str]] = None, 

18 kwonlydefaults: Optional[Mapping[str, Any]] = None, 

19 annotations: Mapping[str, Any] = {}, 

20 formatarg: Callable[[str], str] = str, 

21 formatvarargs: Callable[[str], str] = lambda name: "*" + name, 

22 formatvarkw: Callable[[str], str] = lambda name: "**" + name, 

23 formatvalue: Callable[[Any], str] = lambda value: "=" + repr(value), 

24 formatreturns: Callable[[Any], str] = lambda text: " -> " + text, 

25 formatannotation: Callable[[Any], str] = lambda annot: " -> " + repr(annot), 

26) -> str: 

27 if kwonlyargs is None: 

28 kwonlyargs = () 

29 if kwonlydefaults is None: 

30 kwonlydefaults = {} 

31 ndefaults = len(defaults) if defaults else 0 

32 parameters = [ 

33 Parameter( 

34 arg, 

35 Parameter.POSITIONAL_OR_KEYWORD, 

36 default=defaults[i] if defaults and i >= 0 else Parameter.empty, 

37 annotation=annotations.get(arg, Parameter.empty), 

38 ) 

39 for i, arg in enumerate(args, ndefaults - len(args)) 

40 ] 

41 if varargs: 

42 parameters.append(Parameter(varargs, Parameter.VAR_POSITIONAL)) 

43 parameters.extend( 

44 Parameter( 

45 kwonlyarg, 

46 Parameter.KEYWORD_ONLY, 

47 default=kwonlydefaults.get(kwonlyarg, Parameter.empty), 

48 annotation=annotations.get(kwonlyarg, Parameter.empty), 

49 ) 

50 for kwonlyarg in kwonlyargs 

51 ) 

52 if varkw: 

53 parameters.append(Parameter(varkw, Parameter.VAR_KEYWORD)) 

54 return_annotation = annotations.get("return", Signature.empty) 

55 return str(Signature(parameters, return_annotation=return_annotation))