From f06ee150fb0aa2b73240186a15be23da3422cfbe Mon Sep 17 00:00:00 2001 From: sobolevn Date: Mon, 10 Apr 2023 11:37:16 +0300 Subject: [PATCH 1/3] gh-103406: Modernize pos-only arguments usage in `test_signature` --- Lib/test/test_inspect.py | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 3a3646f1861e80..78e7bb455b7e4e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -3044,12 +3044,10 @@ def foo(a=1, b=2, c=3): self.assertEqual(_foo(*ba.args, **ba.kwargs), (12, 10, 20)) - def foo(a, b, c, d, **kwargs): + def foo(a, b, /, c, d, **kwargs): pass sig = inspect.signature(foo) params = sig.parameters.copy() - params['a'] = params['a'].replace(kind=Parameter.POSITIONAL_ONLY) - params['b'] = params['b'].replace(kind=Parameter.POSITIONAL_ONLY) foo.__signature__ = inspect.Signature(params.values()) sig = inspect.signature(foo) self.assertEqual(str(sig), '(a, b, /, c, d, **kwargs)') @@ -3556,14 +3554,9 @@ def test_signature_str_positional_only(self): P = inspect.Parameter S = inspect.Signature - def test(a_po, *, b, **kwargs): + def test(a_po, /, *, b, **kwargs): return a_po, kwargs - sig = inspect.signature(test) - new_params = list(sig.parameters.values()) - new_params[0] = new_params[0].replace(kind=P.POSITIONAL_ONLY) - test.__signature__ = sig.replace(parameters=new_params) - self.assertEqual(str(inspect.signature(test)), '(a_po, /, *, b, **kwargs)') @@ -4157,16 +4150,9 @@ def test(a, *args, b, z=100, **kwargs): def test_signature_bind_positional_only(self): P = inspect.Parameter - def test(a_po, b_po, c_po=3, foo=42, *, bar=50, **kwargs): + def test(a_po, b_po, c_po=3, /, foo=42, *, bar=50, **kwargs): return a_po, b_po, c_po, foo, bar, kwargs - sig = inspect.signature(test) - new_params = collections.OrderedDict(tuple(sig.parameters.items())) - for name in ('a_po', 'b_po', 'c_po'): - new_params[name] = new_params[name].replace(kind=P.POSITIONAL_ONLY) - new_sig = sig.replace(parameters=new_params.values()) - test.__signature__ = new_sig - self.assertEqual(self.call(test, 1, 2, 4, 5, bar=6), (1, 2, 4, 5, 6, {})) From 8b0efa265c129be400263fd68ebc13115f3f0fa6 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Fri, 14 Apr 2023 09:24:33 +0300 Subject: [PATCH 2/3] Address review --- Lib/test/test_inspect.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 78e7bb455b7e4e..68917f65396633 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -3047,9 +3047,6 @@ def foo(a=1, b=2, c=3): def foo(a, b, /, c, d, **kwargs): pass sig = inspect.signature(foo) - params = sig.parameters.copy() - foo.__signature__ = inspect.Signature(params.values()) - sig = inspect.signature(foo) self.assertEqual(str(sig), '(a, b, /, c, d, **kwargs)') self.assertEqual(self.signature(partial(foo, 1)), From 388c912d24d691441dd2c80f589efe03833c4ce5 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Fri, 14 Apr 2023 09:38:33 +0300 Subject: [PATCH 3/3] Add new test --- Lib/test/test_inspect.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 68917f65396633..cfdb992654c252 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -3583,6 +3583,14 @@ def test() -> 42: self.assertEqual(sig.return_annotation, 42) self.assertEqual(sig, inspect.signature(test)) + def test_signature_replaced(self): + def test(): + pass + + spam_param = inspect.Parameter('spam', inspect.Parameter.POSITIONAL_ONLY) + sig = test.__signature__ = inspect.Signature(parameters=(spam_param,)) + self.assertEqual(sig, inspect.signature(test)) + def test_signature_on_mangled_parameters(self): class Spam: def foo(self, __p1:1=2, *, __p2:2=3):