|
@@ -234,11 +234,25 @@ def _argsfromspec(spec, replace_defaults=True):
|
|
|
optional = list(zip(spec.args[-split:], defaults))
|
|
|
else:
|
|
|
positional, optional = spec.args, []
|
|
|
+
|
|
|
+ if spec.kwonlydefaults:
|
|
|
+ split = len(spec.kwonlydefaults)
|
|
|
+ kwonlyargs = spec.kwonlyargs[:-split]
|
|
|
+ if replace_defaults:
|
|
|
+ kwonlyargs_optional = [(kw, i) for i, kw in enumerate(spec.kwonlyargs[-split:])]
|
|
|
+ else:
|
|
|
+ kwonlyargs_optional = list(spec.kwonlydefaults.items())
|
|
|
+ else:
|
|
|
+ kwonlyargs, kwonlyargs_optional = spec.kwonlyargs, []
|
|
|
+
|
|
|
return ', '.join(filter(None, [
|
|
|
', '.join(positional),
|
|
|
', '.join('{0}={1}'.format(k, v) for k, v in optional),
|
|
|
'*{0}'.format(spec.varargs) if spec.varargs else None,
|
|
|
'**{0}'.format(spec.varkw) if spec.varkw else None,
|
|
|
+ '*' if kwonlyargs or kwonlyargs_optional else None,
|
|
|
+ ', '.join(kwonlyargs),
|
|
|
+ ', '.join('{0}="{1}"'.format(k, v) for k, v in kwonlyargs_optional),
|
|
|
]))
|
|
|
|
|
|
|