Correct handling of functions with only kwarg args in getcallargs (closes #11256)
A patch from Daniel Urban.
This commit is contained in:
parent
41a9ec9003
commit
77d466079a
|
@ -943,6 +943,12 @@ def getcallargs(func, *positional, **named):
|
||||||
f_name, 'at most' if defaults else 'exactly', num_args,
|
f_name, 'at most' if defaults else 'exactly', num_args,
|
||||||
'arguments' if num_args > 1 else 'argument', num_total))
|
'arguments' if num_args > 1 else 'argument', num_total))
|
||||||
elif num_args == 0 and num_total:
|
elif num_args == 0 and num_total:
|
||||||
|
if varkw:
|
||||||
|
if num_pos:
|
||||||
|
# XXX: We should use num_pos, but Python also uses num_total:
|
||||||
|
raise TypeError('%s() takes exactly 0 arguments '
|
||||||
|
'(%d given)' % (f_name, num_total))
|
||||||
|
else:
|
||||||
raise TypeError('%s() takes no arguments (%d given)' %
|
raise TypeError('%s() takes no arguments (%d given)' %
|
||||||
(f_name, num_total))
|
(f_name, num_total))
|
||||||
for arg in args:
|
for arg in args:
|
||||||
|
|
|
@ -632,6 +632,16 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
self.assertEqualCallArgs(f, '2, c=4, **{u"b":3}')
|
self.assertEqualCallArgs(f, '2, c=4, **{u"b":3}')
|
||||||
self.assertEqualCallArgs(f, 'b=2, **{u"a":3, u"c":4}')
|
self.assertEqualCallArgs(f, 'b=2, **{u"a":3, u"c":4}')
|
||||||
|
|
||||||
|
def test_varkw_only(self):
|
||||||
|
# issue11256:
|
||||||
|
f = self.makeCallable('**c')
|
||||||
|
self.assertEqualCallArgs(f, '')
|
||||||
|
self.assertEqualCallArgs(f, 'a=1')
|
||||||
|
self.assertEqualCallArgs(f, 'a=1, b=2')
|
||||||
|
self.assertEqualCallArgs(f, 'c=3, **{"a": 1, "b": 2}')
|
||||||
|
self.assertEqualCallArgs(f, '**UserDict(a=1, b=2)')
|
||||||
|
self.assertEqualCallArgs(f, 'c=3, **UserDict(a=1, b=2)')
|
||||||
|
|
||||||
def test_tupleargs(self):
|
def test_tupleargs(self):
|
||||||
f = self.makeCallable('(b,c), (d,(e,f))=(0,[1,2])')
|
f = self.makeCallable('(b,c), (d,(e,f))=(0,[1,2])')
|
||||||
self.assertEqualCallArgs(f, '(2,3)')
|
self.assertEqualCallArgs(f, '(2,3)')
|
||||||
|
@ -693,6 +703,10 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
self.assertEqualException(f, '1')
|
self.assertEqualException(f, '1')
|
||||||
self.assertEqualException(f, '[1]')
|
self.assertEqualException(f, '[1]')
|
||||||
self.assertEqualException(f, '(1,2,3)')
|
self.assertEqualException(f, '(1,2,3)')
|
||||||
|
# issue11256:
|
||||||
|
f3 = self.makeCallable('**c')
|
||||||
|
self.assertEqualException(f3, '1, 2')
|
||||||
|
self.assertEqualException(f3, '1, 2, a=1, b=2')
|
||||||
|
|
||||||
class TestGetcallargsMethods(TestGetcallargsFunctions):
|
class TestGetcallargsMethods(TestGetcallargsFunctions):
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
|
||||||
|
arguments.
|
||||||
|
|
||||||
- Issue #11696: Fix ID generation in msilib.
|
- Issue #11696: Fix ID generation in msilib.
|
||||||
|
|
||||||
- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
|
- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
|
||||||
|
|
Loading…
Reference in New Issue