gh-118404: Fix inspect.signature() for non-comparable callables (GH-118405)
This commit is contained in:
parent
5b05d452cd
commit
11f8348d78
@ -2179,8 +2179,10 @@ def _signature_is_builtin(obj):
|
|||||||
ismethoddescriptor(obj) or
|
ismethoddescriptor(obj) or
|
||||||
isinstance(obj, _NonUserDefinedCallables) or
|
isinstance(obj, _NonUserDefinedCallables) or
|
||||||
# Can't test 'isinstance(type)' here, as it would
|
# Can't test 'isinstance(type)' here, as it would
|
||||||
# also be True for regular python classes
|
# also be True for regular python classes.
|
||||||
obj in (type, object))
|
# Can't use the `in` operator here, as it would
|
||||||
|
# invoke the custom __eq__ method.
|
||||||
|
obj is type or obj is object)
|
||||||
|
|
||||||
|
|
||||||
def _signature_is_functionlike(obj):
|
def _signature_is_functionlike(obj):
|
||||||
|
@ -4690,6 +4690,16 @@ class TestSignatureObject(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(inspect.signature(D2), inspect.signature(D1))
|
self.assertEqual(inspect.signature(D2), inspect.signature(D1))
|
||||||
|
|
||||||
|
def test_signature_on_non_comparable(self):
|
||||||
|
class NoncomparableCallable:
|
||||||
|
def __call__(self, a):
|
||||||
|
pass
|
||||||
|
def __eq__(self, other):
|
||||||
|
1/0
|
||||||
|
self.assertEqual(self.signature(NoncomparableCallable()),
|
||||||
|
((('a', ..., ..., 'positional_or_keyword'),),
|
||||||
|
...))
|
||||||
|
|
||||||
|
|
||||||
class TestParameterObject(unittest.TestCase):
|
class TestParameterObject(unittest.TestCase):
|
||||||
def test_signature_parameter_kinds(self):
|
def test_signature_parameter_kinds(self):
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
Fix :func:`inspect.signature` for non-comparable callables.
|
Loading…
x
Reference in New Issue
Block a user