mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
merge 3.2
This commit is contained in:
commit
1df78c8e6e
3 changed files with 44 additions and 2 deletions
|
@ -944,8 +944,14 @@ 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:
|
||||||
raise TypeError('%s() takes no arguments (%d given)' %
|
if varkw or kwonlyargs:
|
||||||
(f_name, num_total))
|
if num_pos:
|
||||||
|
# XXX: We should use num_pos, but Python also uses num_total:
|
||||||
|
raise TypeError('%s() takes exactly 0 positional arguments '
|
||||||
|
'(%d given)' % (f_name, num_total))
|
||||||
|
else:
|
||||||
|
raise TypeError('%s() takes no arguments (%d given)' %
|
||||||
|
(f_name, num_total))
|
||||||
|
|
||||||
for arg in itertools.chain(args, kwonlyargs):
|
for arg in itertools.chain(args, kwonlyargs):
|
||||||
if arg in named:
|
if arg in named:
|
||||||
|
|
|
@ -632,6 +632,16 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
self.assertEqualCallArgs(f, '2, c=4, **collections.UserDict(b=3)')
|
self.assertEqualCallArgs(f, '2, c=4, **collections.UserDict(b=3)')
|
||||||
self.assertEqualCallArgs(f, 'b=2, **collections.UserDict(a=3, c=4)')
|
self.assertEqualCallArgs(f, 'b=2, **collections.UserDict(a=3, 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, '**collections.UserDict(a=1, b=2)')
|
||||||
|
self.assertEqualCallArgs(f, 'c=3, **collections.UserDict(a=1, b=2)')
|
||||||
|
|
||||||
def test_keyword_only(self):
|
def test_keyword_only(self):
|
||||||
f = self.makeCallable('a=3, *, c, d=2')
|
f = self.makeCallable('a=3, *, c, d=2')
|
||||||
self.assertEqualCallArgs(f, 'c=3')
|
self.assertEqualCallArgs(f, 'c=3')
|
||||||
|
@ -643,6 +653,11 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
self.assertEqualException(f, 'a=3')
|
self.assertEqualException(f, 'a=3')
|
||||||
self.assertEqualException(f, 'd=4')
|
self.assertEqualException(f, 'd=4')
|
||||||
|
|
||||||
|
f = self.makeCallable('*, c, d=2')
|
||||||
|
self.assertEqualCallArgs(f, 'c=3')
|
||||||
|
self.assertEqualCallArgs(f, 'c=3, d=4')
|
||||||
|
self.assertEqualCallArgs(f, 'd=4, c=3')
|
||||||
|
|
||||||
def test_multiple_features(self):
|
def test_multiple_features(self):
|
||||||
f = self.makeCallable('a, b=2, *f, **g')
|
f = self.makeCallable('a, b=2, *f, **g')
|
||||||
self.assertEqualCallArgs(f, '2, 3, 7')
|
self.assertEqualCallArgs(f, '2, 3, 7')
|
||||||
|
@ -656,6 +671,17 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
'(4,[5,6])]), **collections.UserDict('
|
'(4,[5,6])]), **collections.UserDict('
|
||||||
'y=9, z=10)')
|
'y=9, z=10)')
|
||||||
|
|
||||||
|
f = self.makeCallable('a, b=2, *f, x, y=99, **g')
|
||||||
|
self.assertEqualCallArgs(f, '2, 3, x=8')
|
||||||
|
self.assertEqualCallArgs(f, '2, 3, x=8, *[(4,[5,6]), 7]')
|
||||||
|
self.assertEqualCallArgs(f, '2, x=8, *[3, (4,[5,6]), 7], y=9, z=10')
|
||||||
|
self.assertEqualCallArgs(f, 'x=8, *[2, 3, (4,[5,6])], y=9, z=10')
|
||||||
|
self.assertEqualCallArgs(f, 'x=8, *collections.UserList('
|
||||||
|
'[2, 3, (4,[5,6])]), q=0, **{"y":9, "z":10}')
|
||||||
|
self.assertEqualCallArgs(f, '2, x=8, *collections.UserList([3, '
|
||||||
|
'(4,[5,6])]), q=0, **collections.UserDict('
|
||||||
|
'y=9, z=10)')
|
||||||
|
|
||||||
def test_errors(self):
|
def test_errors(self):
|
||||||
f0 = self.makeCallable('')
|
f0 = self.makeCallable('')
|
||||||
f1 = self.makeCallable('a, b')
|
f1 = self.makeCallable('a, b')
|
||||||
|
@ -692,6 +718,13 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||||
# - for functions and bound methods: unexpected keyword 'c'
|
# - for functions and bound methods: unexpected keyword 'c'
|
||||||
# - for unbound methods: multiple values for keyword 'a'
|
# - for unbound methods: multiple values for keyword 'a'
|
||||||
#self.assertEqualException(f, '1, c=3, a=2')
|
#self.assertEqualException(f, '1, c=3, a=2')
|
||||||
|
# issue11256:
|
||||||
|
f3 = self.makeCallable('**c')
|
||||||
|
self.assertEqualException(f3, '1, 2')
|
||||||
|
self.assertEqualException(f3, '1, 2, a=1, b=2')
|
||||||
|
f4 = self.makeCallable('*, a, b=0')
|
||||||
|
self.assertEqualException(f3, '1, 2')
|
||||||
|
self.assertEqualException(f3, '1, 2, a=1, b=2')
|
||||||
|
|
||||||
class TestGetcallargsMethods(TestGetcallargsFunctions):
|
class TestGetcallargsMethods(TestGetcallargsFunctions):
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,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.
|
||||||
|
|
||||||
- itertools.accumulate now supports an optional *func* argument for
|
- itertools.accumulate now supports an optional *func* argument for
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue