From b3b366d803207eb580a315a2b49733f100e92e89 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 26 Apr 2016 09:30:44 +0300 Subject: [PATCH] Issue #26634: recursive_repr() now sets __qualname__ of wrapper. Patch by Xiang Zhang. --- Lib/reprlib.py | 1 + Lib/test/test_reprlib.py | 14 ++++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 18 insertions(+) diff --git a/Lib/reprlib.py b/Lib/reprlib.py index ecbd2cc4722..40d991fa364 100644 --- a/Lib/reprlib.py +++ b/Lib/reprlib.py @@ -30,6 +30,7 @@ def recursive_repr(fillvalue='...'): wrapper.__module__ = getattr(user_function, '__module__') wrapper.__doc__ = getattr(user_function, '__doc__') wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__qualname__ = getattr(user_function, '__qualname__') wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) return wrapper diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py index a51c4d7523f..4bf91945ea4 100644 --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -374,6 +374,13 @@ class MyContainer2(MyContainer): def __repr__(self): return '<' + ', '.join(map(str, self.values)) + '>' +class MyContainer3: + def __repr__(self): + 'Test document content' + pass + wrapped = __repr__ + wrapper = recursive_repr()(wrapped) + class TestRecursiveRepr(unittest.TestCase): def test_recursive_repr(self): m = MyContainer(list('abcde')) @@ -387,5 +394,12 @@ class TestRecursiveRepr(unittest.TestCase): m.append(m) self.assertEqual(repr(m), '') + def test_assigned_attributes(self): + from functools import WRAPPER_ASSIGNMENTS as assigned + wrapped = MyContainer3.wrapped + wrapper = MyContainer3.wrapper + for name in assigned: + self.assertIs(getattr(wrapper, name), getattr(wrapped, name)) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS b/Misc/NEWS index 6e9ed109d23..e887e9052f9 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -107,6 +107,9 @@ Core and Builtins Library ------- +- Issue #26634: recursive_repr() now sets __qualname__ of wrapper. Patch by + Xiang Zhang. + - Issue #26804: urllib.request will prefer lower_case proxy environment variables over UPPER_CASE or Mixed_Case ones. Patch contributed by Hans-Peter Jansen.