fix inspect.formatargspec on functions with keyword-only arguments without defaults #4959
This commit is contained in:
parent
c10c34d6cb
commit
9953a8dfd6
|
@ -894,7 +894,7 @@ def formatargspec(args, varargs=None, varkw=None, defaults=None,
|
|||
if kwonlyargs:
|
||||
for kwonlyarg in kwonlyargs:
|
||||
spec = formatargandannotation(kwonlyarg)
|
||||
if kwonlyarg in kwonlydefaults:
|
||||
if kwonlydefaults and kwonlyarg in kwonlydefaults:
|
||||
spec += formatvalue(kwonlydefaults[kwonlyarg])
|
||||
specs.append(spec)
|
||||
if varkw is not None:
|
||||
|
|
|
@ -105,3 +105,7 @@ def keyworded(*arg1, arg2=1):
|
|||
#line 105
|
||||
def annotated(arg1: list):
|
||||
pass
|
||||
|
||||
#line 109
|
||||
def keyword_only_arg(*, arg):
|
||||
pass
|
||||
|
|
|
@ -386,6 +386,9 @@ class TestClassesAndFunctions(unittest.TestCase):
|
|||
|
||||
self.assertRaises(ValueError, self.assertArgSpecEquals,
|
||||
mod2.annotated, [])
|
||||
self.assertRaises(ValueError, self.assertArgSpecEquals,
|
||||
mod2.keyword_only_arg, [])
|
||||
|
||||
|
||||
def test_getfullargspec(self):
|
||||
self.assertFullArgSpecEquals(mod2.keyworded, [], varargs_e='arg1',
|
||||
|
@ -396,6 +399,10 @@ class TestClassesAndFunctions(unittest.TestCase):
|
|||
self.assertFullArgSpecEquals(mod2.annotated, ['arg1'],
|
||||
ann_e={'arg1' : list},
|
||||
formatted='(arg1: list)')
|
||||
self.assertFullArgSpecEquals(mod2.keyword_only_arg, [],
|
||||
kwonlyargs_e=['arg'],
|
||||
formatted='(*, arg)')
|
||||
|
||||
|
||||
def test_getargspec_method(self):
|
||||
class A(object):
|
||||
|
|
|
@ -126,6 +126,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #4959: inspect.formatargspec now works for keyword only arguments
|
||||
without defaults.
|
||||
|
||||
- Issue #3826 and #4791: The socket module now closes the underlying socket
|
||||
appropriately when it is being used via socket.makefile() objects
|
||||
rather than delaying the close by waiting for garbage collection to do it.
|
||||
|
|
Loading…
Reference in New Issue