Renamed *args, **kwargs: bind correctly on Py2.7

Use search and inject
Copied from the fuel-devops 3.0.3

Change-Id: Ibd454eb22b7bc534e790212cd536e553eed74ca8
This commit is contained in:
Alexey Stepanov 2016-10-11 16:36:03 +03:00
parent 4dea64ff14
commit 13876c282d
1 changed files with 15 additions and 4 deletions

View File

@ -68,10 +68,21 @@ def _getcallargs(func, *positional, **named):
if six.PY2:
# args and kwargs is not bound in py27
# Note: py27 inspect is not unicode
if 'args' in orig_args:
arguments[b'args'] = orig_args['args']
if 'kwargs' in orig_args:
arguments[b'kwargs'] = orig_args['kwargs']
missed = (
(key, val)
for key, val in orig_args.items()
if key not in arguments)
args, kwargs = (), ()
for record in missed:
if isinstance(record[1], (list, tuple)):
args = record
elif isinstance(record[1], dict):
kwargs = record
if args:
arguments[args[0]] = args[1]
if kwargs:
arguments[kwargs[0]] = kwargs[1]
return arguments
sig = inspect.signature(func).bind(*positional, **named)
sig.apply_defaults() # after bind we doesn't have defaults