[Python-checkins] bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285)

gvanrossum webhook-mailer at python.org
Fri Jan 21 16:24:40 EST 2022


https://github.com/python/cpython/commit/881a763cfe07ef4a5806ec78f13a9bc99e8909dc
commit: 881a763cfe07ef4a5806ec78f13a9bc99e8909dc
branch: main
author: Weipeng Hong <hongweichen8888 at sina.com>
committer: gvanrossum <gvanrossum at gmail.com>
date: 2022-01-21T13:24:33-08:00
summary:

bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285)

files:
A Lib/test/ann_module7.py
A Misc/NEWS.d/next/Library/2021-12-29-14-42-09.bpo-43118.BoVi_5.rst
M Lib/inspect.py
M Lib/test/test_inspect.py

diff --git a/Lib/inspect.py b/Lib/inspect.py
index 7a8f5d3464318..879a577d43fbe 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2511,9 +2511,9 @@ def _signature_from_callable(obj, *,
                     pass
                 else:
                     if text_sig:
-                        # If 'obj' class has a __text_signature__ attribute:
+                        # If 'base' class has a __text_signature__ attribute:
                         # return a signature based on it
-                        return _signature_fromstr(sigcls, obj, text_sig)
+                        return _signature_fromstr(sigcls, base, text_sig)
 
             # No '__text_signature__' was found for the 'obj' class.
             # Last option is to check if its '__init__' is
diff --git a/Lib/test/ann_module7.py b/Lib/test/ann_module7.py
new file mode 100644
index 0000000000000..8f890cd28025b
--- /dev/null
+++ b/Lib/test/ann_module7.py
@@ -0,0 +1,11 @@
+# Tests class have ``__text_signature__``
+
+from __future__ import annotations
+
+DEFAULT_BUFFER_SIZE = 8192
+
+class BufferedReader(object):
+    """BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE)\n--\n\n
+    Create a new buffered reader using the given readable raw IO object.
+    """
+    pass
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 67372cca6ed1f..cdbb9eb6a8f7c 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -4151,6 +4151,17 @@ def func(*args, **kwargs):
         sig = inspect.signature(func)
         self.assertEqual(str(sig), '(self, a, b=1, /, *args, c, d=2, **kwargs)')
 
+    def test_base_class_have_text_signature(self):
+        # see issue 43118
+        from test.ann_module7 import BufferedReader
+        class MyBufferedReader(BufferedReader):
+            """buffer reader class."""
+
+        text_signature = BufferedReader.__text_signature__
+        self.assertEqual(text_signature, '(raw, buffer_size=DEFAULT_BUFFER_SIZE)')
+        sig = inspect.signature(MyBufferedReader)
+        self.assertEqual(str(sig), '(raw, buffer_size=8192)')
+
 
 class NTimesUnwrappable:
     def __init__(self, n):
diff --git a/Misc/NEWS.d/next/Library/2021-12-29-14-42-09.bpo-43118.BoVi_5.rst b/Misc/NEWS.d/next/Library/2021-12-29-14-42-09.bpo-43118.BoVi_5.rst
new file mode 100644
index 0000000000000..a37c22cd78c09
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-12-29-14-42-09.bpo-43118.BoVi_5.rst
@@ -0,0 +1,3 @@
+Fix a bug in :func:`inspect.signature` that was causing it to fail on some
+subclasses of classes with a ``__text_signature__`` referencing module
+globals. Patch by Weipeng Hong.



More information about the Python-checkins mailing list