gh-118402: Fix inspect.signature() for functools.cmp_to_key() result (GH-118427)

This commit is contained in:
Serhiy Storchaka 2024-04-30 17:49:28 +03:00 committed by GitHub
parent 02887c6428
commit 17a8af9508
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 3 deletions

View file

@ -947,8 +947,13 @@ class TestCmpToKey:
@unittest.skipIf(support.MISSING_C_DOCSTRINGS,
"Signature information for builtins requires docstrings")
def test_cmp_to_signature(self):
self.assertEqual(str(Signature.from_callable(self.cmp_to_key)),
'(mycmp)')
sig = Signature.from_callable(self.cmp_to_key)
self.assertEqual(str(sig), '(mycmp)')
def mycmp(x, y):
return y - x
sig = Signature.from_callable(self.cmp_to_key(mycmp))
self.assertEqual(str(sig), '(obj)')
@unittest.skipUnless(c_functools, 'requires the C _functools module')
@ -1864,9 +1869,10 @@ class TestLRU:
self.assertIsNone(ref())
def test_common_signatures(self):
def orig(): ...
def orig(a, /, b, c=True): ...
lru = self.module.lru_cache(1)(orig)
self.assertEqual(str(Signature.from_callable(lru)), '(a, /, b, c=True)')
self.assertEqual(str(Signature.from_callable(lru.cache_info)), '()')
self.assertEqual(str(Signature.from_callable(lru.cache_clear)), '()')

View file

@ -0,0 +1,2 @@
Fix :func:`inspect.signature` for the result of the
:func:`functools.cmp_to_key` call.

View file

@ -571,6 +571,17 @@ static PyMemberDef keyobject_members[] = {
{NULL}
};
static PyObject *
keyobject_text_signature(PyObject *self, void *Py_UNUSED(ignored))
{
return PyUnicode_FromString("(obj)");
}
static PyGetSetDef keyobject_getset[] = {
{"__text_signature__", keyobject_text_signature, (setter)NULL},
{NULL}
};
static PyObject *
keyobject_call(keyobject *ko, PyObject *args, PyObject *kwds);
@ -585,6 +596,7 @@ static PyType_Slot keyobject_type_slots[] = {
{Py_tp_clear, keyobject_clear},
{Py_tp_richcompare, keyobject_richcompare},
{Py_tp_members, keyobject_members},
{Py_tp_getset, keyobject_getset},
{0, 0}
};