Skip to content

Commit 9cf1b99

Browse files
ApostolFetsrinivasreddy
authored andcommitted
pythongh-127610: Added validation for more than one var-positional and var-keyword parameters in inspect.Signature (pythonGH-127657)
1 parent 2ec336b commit 9cf1b99

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

Lib/inspect.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2943,11 +2943,19 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
29432943
params = OrderedDict()
29442944
top_kind = _POSITIONAL_ONLY
29452945
seen_default = False
2946+
seen_var_parameters = set()
29462947

29472948
for param in parameters:
29482949
kind = param.kind
29492950
name = param.name
29502951

2952+
if kind in (_VAR_POSITIONAL, _VAR_KEYWORD):
2953+
if kind in seen_var_parameters:
2954+
msg = f'more than one {kind.description} parameter'
2955+
raise ValueError(msg)
2956+
2957+
seen_var_parameters.add(kind)
2958+
29512959
if kind < top_kind:
29522960
msg = (
29532961
'wrong parameter order: {} parameter before {} '

Lib/test/test_inspect/test_inspect.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2992,6 +2992,17 @@ def test2(pod=42, /):
29922992
with self.assertRaisesRegex(ValueError, 'follows default argument'):
29932993
S((pkd, pk))
29942994

2995+
second_args = args.replace(name="second_args")
2996+
with self.assertRaisesRegex(ValueError, 'more than one variadic positional parameter'):
2997+
S((args, second_args))
2998+
2999+
with self.assertRaisesRegex(ValueError, 'more than one variadic positional parameter'):
3000+
S((args, ko, second_args))
3001+
3002+
second_kwargs = kwargs.replace(name="second_kwargs")
3003+
with self.assertRaisesRegex(ValueError, 'more than one variadic keyword parameter'):
3004+
S((kwargs, second_kwargs))
3005+
29953006
def test_signature_object_pickle(self):
29963007
def foo(a, b, *, c:1={}, **kw) -> {42:'ham'}: pass
29973008
foo_partial = functools.partial(foo, a=1)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Eitan Adler
2424
Anton Afanasyev
2525
Ali Afshar
2626
Nitika Agarwal
27+
Maxim Ageev
2728
Anjani Agrawal
2829
Pablo S. Blum de Aguiar
2930
Jim Ahlstrom
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Added validation for more than one var-positional or
2+
var-keyword parameters in :class:`inspect.Signature`.
3+
Patch by Maxim Ageev.

0 commit comments

Comments
 (0)