mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
inspect: Validate that __signature__ is None or an instance of Signature.
Closes #21801.
This commit is contained in:
parent
289cae4f92
commit
42407abe24
3 changed files with 14 additions and 0 deletions
|
@ -1939,6 +1939,10 @@ def _signature_from_callable(obj, *,
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if sig is not None:
|
if sig is not None:
|
||||||
|
if not isinstance(sig, Signature):
|
||||||
|
raise TypeError(
|
||||||
|
'unexpected object {!r} in __signature__ '
|
||||||
|
'attribute'.format(sig))
|
||||||
return sig
|
return sig
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -3136,6 +3136,13 @@ class TestMain(unittest.TestCase):
|
||||||
self.assertEqual(lines[:-1], inspect.getsource(module).splitlines())
|
self.assertEqual(lines[:-1], inspect.getsource(module).splitlines())
|
||||||
self.assertEqual(err, b'')
|
self.assertEqual(err, b'')
|
||||||
|
|
||||||
|
def test_custom_getattr(self):
|
||||||
|
def foo():
|
||||||
|
pass
|
||||||
|
foo.__signature__ = 42
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
inspect.signature(foo)
|
||||||
|
|
||||||
@unittest.skipIf(ThreadPoolExecutor is None,
|
@unittest.skipIf(ThreadPoolExecutor is None,
|
||||||
'threads required to test __qualname__ for source files')
|
'threads required to test __qualname__ for source files')
|
||||||
def test_qualname_source(self):
|
def test_qualname_source(self):
|
||||||
|
|
|
@ -498,6 +498,9 @@ Library
|
||||||
- Issue #11571: Ensure that the turtle window becomes the topmost window
|
- Issue #11571: Ensure that the turtle window becomes the topmost window
|
||||||
when launched on OS X.
|
when launched on OS X.
|
||||||
|
|
||||||
|
- Issue #21801: Validate that __signature__ is None or an instance of Signature.
|
||||||
|
|
||||||
|
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue