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

20 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 typing import Any, Callable, List, Mapping, Optional, Sequence, Tuple 

9 

10try: 

11 from inspect import Parameter, Signature 

12except ImportError: 

13 from inspect import formatargspec # type: ignore[attr-defined] 

14else: 

15 

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