Skip to content

Commit

Permalink
bpo-43118: Fix bug in inspect.signature around 'base.__text_signature…
Browse files Browse the repository at this point in the history
…__' (GH-30285) (#30765)

(cherry picked from commit 881a763)

Co-authored-by: Weipeng Hong <hongweichen8888@sina.com>

Co-authored-by: Weipeng Hong <hongweichen8888@sina.com>
  • Loading branch information
miss-islington and Weipeng Hong committed Jan 22, 2022
1 parent 923c994 commit 83aef4d
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Lib/inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 11 additions & 0 deletions Lib/test/ann_module7.py
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions Lib/test/test_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -4218,6 +4218,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):
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit 83aef4d

Please sign in to comment.