mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-131666: mark anext_awaitable.close
as a METH_NOARGS
instead of METH_VARARGS
(#131671)
This commit is contained in:
parent
c3b8d73208
commit
1393bd3548
3 changed files with 20 additions and 6 deletions
|
@ -1191,6 +1191,17 @@ class CoroutineTest(unittest.TestCase):
|
||||||
_, result = run_async(g())
|
_, result = run_async(g())
|
||||||
self.assertIsNone(result.__context__)
|
self.assertIsNone(result.__context__)
|
||||||
|
|
||||||
|
def test_await_17(self):
|
||||||
|
# See https://github.com/python/cpython/issues/131666 for details.
|
||||||
|
class A:
|
||||||
|
async def __anext__(self):
|
||||||
|
raise StopAsyncIteration
|
||||||
|
def __aiter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
anext_awaitable = anext(A(), "a").__await__()
|
||||||
|
self.assertRaises(TypeError, anext_awaitable.close, 1)
|
||||||
|
|
||||||
def test_with_1(self):
|
def test_with_1(self):
|
||||||
class Manager:
|
class Manager:
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix signature of ``anext_awaitable.close`` objects. Patch by Bénédikt Tran.
|
|
@ -414,9 +414,11 @@ anextawaitable_proxy(anextawaitableobject *obj, char *meth, PyObject *arg)
|
||||||
if (awaitable == NULL) {
|
if (awaitable == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
// 'arg' may be a tuple (if coming from a METH_VARARGS method)
|
// When specified, 'arg' may be a tuple (if coming from a METH_VARARGS
|
||||||
// or a single object (if coming from a METH_O method).
|
// method) or a single object (if coming from a METH_O method).
|
||||||
PyObject *ret = PyObject_CallMethod(awaitable, meth, "O", arg);
|
PyObject *ret = arg == NULL
|
||||||
|
? PyObject_CallMethod(awaitable, meth, NULL)
|
||||||
|
: PyObject_CallMethod(awaitable, meth, "O", arg);
|
||||||
Py_DECREF(awaitable);
|
Py_DECREF(awaitable);
|
||||||
if (ret != NULL) {
|
if (ret != NULL) {
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -451,10 +453,10 @@ anextawaitable_throw(PyObject *op, PyObject *args)
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
anextawaitable_close(PyObject *op, PyObject *args)
|
anextawaitable_close(PyObject *op, PyObject *Py_UNUSED(dummy))
|
||||||
{
|
{
|
||||||
anextawaitableobject *obj = anextawaitableobject_CAST(op);
|
anextawaitableobject *obj = anextawaitableobject_CAST(op);
|
||||||
return anextawaitable_proxy(obj, "close", args);
|
return anextawaitable_proxy(obj, "close", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -480,7 +482,7 @@ PyDoc_STRVAR(close_doc,
|
||||||
static PyMethodDef anextawaitable_methods[] = {
|
static PyMethodDef anextawaitable_methods[] = {
|
||||||
{"send", anextawaitable_send, METH_O, send_doc},
|
{"send", anextawaitable_send, METH_O, send_doc},
|
||||||
{"throw", anextawaitable_throw, METH_VARARGS, throw_doc},
|
{"throw", anextawaitable_throw, METH_VARARGS, throw_doc},
|
||||||
{"close", anextawaitable_close, METH_VARARGS, close_doc},
|
{"close", anextawaitable_close, METH_NOARGS, close_doc},
|
||||||
{NULL, NULL} /* Sentinel */
|
{NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue