[Python-checkins] cpython (2.7): Correct handling of functions with only kwarg args in getcallargs (closes
benjamin.peterson
python-checkins at python.org
Tue Mar 29 00:41:06 CEST 2011
http://hg.python.org/cpython/rev/b19d76d9d2a7
changeset: 69032:b19d76d9d2a7
branch: 2.7
parent: 69028:fe5b90b1e8ea
user: Benjamin Peterson <benjamin at python.org>
date: Mon Mar 28 17:32:31 2011 -0500
summary:
Correct handling of functions with only kwarg args in getcallargs (closes #11256)
A patch from Daniel Urban.
files:
Lib/inspect.py | 10 ++++++++--
Lib/test/test_inspect.py | 14 ++++++++++++++
Misc/NEWS | 3 +++
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -943,8 +943,14 @@
f_name, 'at most' if defaults else 'exactly', num_args,
'arguments' if num_args > 1 else 'argument', num_total))
elif num_args == 0 and num_total:
- raise TypeError('%s() takes no arguments (%d given)' %
- (f_name, 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)' %
+ (f_name, num_total))
for arg in args:
if isinstance(arg, str) and arg in named:
if is_assigned(arg):
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -632,6 +632,16 @@
self.assertEqualCallArgs(f, '2, c=4, **{u"b":3}')
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):
f = self.makeCallable('(b,c), (d,(e,f))=(0,[1,2])')
self.assertEqualCallArgs(f, '(2,3)')
@@ -693,6 +703,10 @@
self.assertEqualException(f, '1')
self.assertEqualException(f, '[1]')
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):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -47,6 +47,9 @@
Library
-------
+- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
+ arguments.
+
- Issue #11696: Fix ID generation in msilib.
- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list