Skip to content

Commit 6024d01

Browse files
committed
bpo-32810: Allow accessing the ags_gen and agt_gen attrs of async generators
1 parent d7538dd commit 6024d01

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

Lib/test/test_asyncgen.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,15 @@ async def gen():
374374

375375
self.assertTrue(inspect.isawaitable(g.aclose()))
376376

377+
def test_async_gen_ags_gen_agt_gen(self):
378+
async def agen():
379+
yield 1
380+
g = agen()
381+
asend = g.asend(1)
382+
self.assertIsInstance(asend.ags_gen, types.AsyncGeneratorType)
383+
athrow = g.athrow()
384+
self.assertIsInstance(athrow.agt_gen, types.AsyncGeneratorType)
385+
377386

378387
class AsyncGenAsyncioTest(unittest.TestCase):
379388

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Allow accessing the ``ags_gen`` and ``agt_gen`` attributes of asynchronous
2+
generators.

Objects/genobject.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,12 @@ static PyMethodDef async_gen_asend_methods[] = {
15981598
};
15991599

16001600

1601+
static PyMemberDef async_gen_asend_memberlist[] = {
1602+
{"ags_gen", T_OBJECT, offsetof(PyAsyncGenASend, ags_gen), READONLY},
1603+
{NULL} /* Sentinel */
1604+
};
1605+
1606+
16011607
static PyAsyncMethods async_gen_asend_as_async = {
16021608
PyObject_SelfIter, /* am_await */
16031609
0, /* am_aiter */
@@ -1635,7 +1641,7 @@ PyTypeObject _PyAsyncGenASend_Type = {
16351641
PyObject_SelfIter, /* tp_iter */
16361642
(iternextfunc)async_gen_asend_iternext, /* tp_iternext */
16371643
async_gen_asend_methods, /* tp_methods */
1638-
0, /* tp_members */
1644+
async_gen_asend_memberlist, /* tp_members */
16391645
0, /* tp_getset */
16401646
0, /* tp_base */
16411647
0, /* tp_dict */
@@ -1951,6 +1957,12 @@ static PyMethodDef async_gen_athrow_methods[] = {
19511957
};
19521958

19531959

1960+
static PyMemberDef async_gen_athrow_memberlist[] = {
1961+
{"agt_gen", T_OBJECT, offsetof(PyAsyncGenAThrow, agt_gen), READONLY},
1962+
{NULL} /* Sentinel */
1963+
};
1964+
1965+
19541966
static PyAsyncMethods async_gen_athrow_as_async = {
19551967
PyObject_SelfIter, /* am_await */
19561968
0, /* am_aiter */
@@ -1988,7 +2000,7 @@ PyTypeObject _PyAsyncGenAThrow_Type = {
19882000
PyObject_SelfIter, /* tp_iter */
19892001
(iternextfunc)async_gen_athrow_iternext, /* tp_iternext */
19902002
async_gen_athrow_methods, /* tp_methods */
1991-
0, /* tp_members */
2003+
async_gen_athrow_memberlist, /* tp_members */
19922004
0, /* tp_getset */
19932005
0, /* tp_base */
19942006
0, /* tp_dict */

0 commit comments

Comments
 (0)