summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-04-26 06:30:44 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-04-26 06:30:44 (GMT)
commitb3b366d803207eb580a315a2b49733f100e92e89 (patch)
treee8949382f46c2f87806be576dc688561007c4129
parenta7c0ff2f0b3883109245d6be3083aeeee8c9749c (diff)
downloadcpython-b3b366d803207eb580a315a2b49733f100e92e89.zip
cpython-b3b366d803207eb580a315a2b49733f100e92e89.tar.gz
cpython-b3b366d803207eb580a315a2b49733f100e92e89.tar.bz2
Issue #26634: recursive_repr() now sets __qualname__ of wrapper.
Patch by Xiang Zhang.
-rw-r--r--Lib/reprlib.py1
-rw-r--r--Lib/test/test_reprlib.py14
-rw-r--r--Misc/NEWS3
3 files changed, 18 insertions, 0 deletions
diff --git a/Lib/reprlib.py b/Lib/reprlib.py
index ecbd2cc..40d991f 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 a51c4d7..4bf9194 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), '<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
index 6e9ed10..e887e90 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.