mirror of
https://github.com/python/cpython.git
synced 2025-11-11 22:55:08 +00:00
gh-118402: Fix inspect.signature() for functools.cmp_to_key() result (GH-118427)
This commit is contained in:
parent
02887c6428
commit
17a8af9508
3 changed files with 23 additions and 3 deletions
|
|
@ -947,8 +947,13 @@ class TestCmpToKey:
|
||||||
@unittest.skipIf(support.MISSING_C_DOCSTRINGS,
|
@unittest.skipIf(support.MISSING_C_DOCSTRINGS,
|
||||||
"Signature information for builtins requires docstrings")
|
"Signature information for builtins requires docstrings")
|
||||||
def test_cmp_to_signature(self):
|
def test_cmp_to_signature(self):
|
||||||
self.assertEqual(str(Signature.from_callable(self.cmp_to_key)),
|
sig = Signature.from_callable(self.cmp_to_key)
|
||||||
'(mycmp)')
|
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')
|
@unittest.skipUnless(c_functools, 'requires the C _functools module')
|
||||||
|
|
@ -1864,9 +1869,10 @@ class TestLRU:
|
||||||
self.assertIsNone(ref())
|
self.assertIsNone(ref())
|
||||||
|
|
||||||
def test_common_signatures(self):
|
def test_common_signatures(self):
|
||||||
def orig(): ...
|
def orig(a, /, b, c=True): ...
|
||||||
lru = self.module.lru_cache(1)(orig)
|
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_info)), '()')
|
||||||
self.assertEqual(str(Signature.from_callable(lru.cache_clear)), '()')
|
self.assertEqual(str(Signature.from_callable(lru.cache_clear)), '()')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix :func:`inspect.signature` for the result of the
|
||||||
|
:func:`functools.cmp_to_key` call.
|
||||||
|
|
@ -571,6 +571,17 @@ static PyMemberDef keyobject_members[] = {
|
||||||
{NULL}
|
{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 *
|
static PyObject *
|
||||||
keyobject_call(keyobject *ko, PyObject *args, PyObject *kwds);
|
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_clear, keyobject_clear},
|
||||||
{Py_tp_richcompare, keyobject_richcompare},
|
{Py_tp_richcompare, keyobject_richcompare},
|
||||||
{Py_tp_members, keyobject_members},
|
{Py_tp_members, keyobject_members},
|
||||||
|
{Py_tp_getset, keyobject_getset},
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue