[Python-checkins] cpython (3.5): Issue #26634: recursive_repr() now sets __qualname__ of wrapper.

serhiy.storchaka python-checkins at python.org
Tue Apr 26 02:31:36 EDT 2016


https://hg.python.org/cpython/rev/1f0369547b0e
changeset:   101147:1f0369547b0e
branch:      3.5
parent:      101140:49b975122022
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Tue Apr 26 09:30:44 2016 +0300
summary:
  Issue #26634: recursive_repr() now sets __qualname__ of wrapper.
Patch by Xiang Zhang.

files:
  Lib/reprlib.py           |   1 +
  Lib/test/test_reprlib.py |  14 ++++++++++++++
  Misc/NEWS                |   3 +++
  3 files changed, 18 insertions(+), 0 deletions(-)


diff --git a/Lib/reprlib.py b/Lib/reprlib.py
--- a/Lib/reprlib.py
+++ b/Lib/reprlib.py
@@ -30,6 +30,7 @@
         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
--- a/Lib/test/test_reprlib.py
+++ b/Lib/test/test_reprlib.py
@@ -374,6 +374,13 @@
     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 @@
         m.append(m)
         self.assertEqual(repr(m), '<a, b, c, d, e, +++, x, +++>')
 
+    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
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -107,6 +107,9 @@
 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.

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list