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

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. 

6 

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