From 9be6a111993c5e75574b0e858b57969c245c5866 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Mon, 2 Oct 2023 08:41:26 -0700 Subject: =?UTF-8?q?[3.12]=20gh-109818:=20`reprlib.recursive=5Frepr`=20copi?= =?UTF-8?q?es=20`=5F=5Ftype=5Fparams=5F=5F`=20(=E2=80=A6=20(#109999)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [3.12] gh-109818: `reprlib.recursive_repr` copies `__type_params__` (GH-109819). (cherry picked from commit f65f9e80fe741c894582a3e413d4e3318c1ed626) Co-authored-by: Nikita Sobolev --- Lib/reprlib.py | 1 + Lib/test/test_reprlib.py | 11 +++++++++++ .../Library/2023-09-25-09-59-59.gh-issue-109818.dLRtT-.rst | 2 ++ 3 files changed, 14 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2023-09-25-09-59-59.gh-issue-109818.dLRtT-.rst diff --git a/Lib/reprlib.py b/Lib/reprlib.py index a92b3e3..a7b3763 100644 --- a/Lib/reprlib.py +++ b/Lib/reprlib.py @@ -29,6 +29,7 @@ def recursive_repr(fillvalue='...'): wrapper.__name__ = getattr(user_function, '__name__') wrapper.__qualname__ = getattr(user_function, '__qualname__') wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) + wrapper.__type_params__ = getattr(user_function, '__type_params__', ()) return wrapper return decorating_function diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py index e7216d4..4a896db 100644 --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -765,5 +765,16 @@ class TestRecursiveRepr(unittest.TestCase): for name in assigned: self.assertIs(getattr(wrapper, name), getattr(wrapped, name)) + def test__type_params__(self): + class My: + @recursive_repr() + def __repr__[T: str](self, default: T = '') -> str: + return default + + type_params = My().__repr__.__type_params__ + self.assertEqual(len(type_params), 1) + self.assertEqual(type_params[0].__name__, 'T') + self.assertEqual(type_params[0].__bound__, str) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Library/2023-09-25-09-59-59.gh-issue-109818.dLRtT-.rst b/Misc/NEWS.d/next/Library/2023-09-25-09-59-59.gh-issue-109818.dLRtT-.rst new file mode 100644 index 0000000..184086a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-25-09-59-59.gh-issue-109818.dLRtT-.rst @@ -0,0 +1,2 @@ +Fix :func:`reprlib.recursive_repr` not copying ``__type_params__`` from +decorated function. -- cgit v0.12