From 6024d01ecc129e467b782624baa4eb46a1b8c037 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Fri, 14 Dec 2018 12:53:32 -0700 Subject: [PATCH 1/2] bpo-32810: Allow accessing the ags_gen and agt_gen attrs of async generators --- Lib/test/test_asyncgen.py | 9 +++++++++ .../2018-12-14-12-53-04.bpo-32810.A2g1Cp.rst | 2 ++ Objects/genobject.c | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2018-12-14-12-53-04.bpo-32810.A2g1Cp.rst diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py index 71b0968c7944d6..487fba8378b6f9 100644 --- a/Lib/test/test_asyncgen.py +++ b/Lib/test/test_asyncgen.py @@ -374,6 +374,15 @@ async def gen(): self.assertTrue(inspect.isawaitable(g.aclose())) + def test_async_gen_ags_gen_agt_gen(self): + async def agen(): + yield 1 + g = agen() + asend = g.asend(1) + self.assertIsInstance(asend.ags_gen, types.AsyncGeneratorType) + athrow = g.athrow() + self.assertIsInstance(athrow.agt_gen, types.AsyncGeneratorType) + class AsyncGenAsyncioTest(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2018-12-14-12-53-04.bpo-32810.A2g1Cp.rst b/Misc/NEWS.d/next/Library/2018-12-14-12-53-04.bpo-32810.A2g1Cp.rst new file mode 100644 index 00000000000000..cf21c302cd5fa1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-12-14-12-53-04.bpo-32810.A2g1Cp.rst @@ -0,0 +1,2 @@ +Allow accessing the ``ags_gen`` and ``agt_gen`` attributes of asynchronous +generators. diff --git a/Objects/genobject.c b/Objects/genobject.c index e2def38af541a5..33db771f61dffc 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1598,6 +1598,12 @@ static PyMethodDef async_gen_asend_methods[] = { }; +static PyMemberDef async_gen_asend_memberlist[] = { + {"ags_gen", T_OBJECT, offsetof(PyAsyncGenASend, ags_gen), READONLY}, + {NULL} /* Sentinel */ +}; + + static PyAsyncMethods async_gen_asend_as_async = { PyObject_SelfIter, /* am_await */ 0, /* am_aiter */ @@ -1635,7 +1641,7 @@ PyTypeObject _PyAsyncGenASend_Type = { PyObject_SelfIter, /* tp_iter */ (iternextfunc)async_gen_asend_iternext, /* tp_iternext */ async_gen_asend_methods, /* tp_methods */ - 0, /* tp_members */ + async_gen_asend_memberlist, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ @@ -1951,6 +1957,12 @@ static PyMethodDef async_gen_athrow_methods[] = { }; +static PyMemberDef async_gen_athrow_memberlist[] = { + {"agt_gen", T_OBJECT, offsetof(PyAsyncGenAThrow, agt_gen), READONLY}, + {NULL} /* Sentinel */ +}; + + static PyAsyncMethods async_gen_athrow_as_async = { PyObject_SelfIter, /* am_await */ 0, /* am_aiter */ @@ -1988,7 +2000,7 @@ PyTypeObject _PyAsyncGenAThrow_Type = { PyObject_SelfIter, /* tp_iter */ (iternextfunc)async_gen_athrow_iternext, /* tp_iternext */ async_gen_athrow_methods, /* tp_methods */ - 0, /* tp_members */ + async_gen_athrow_memberlist, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ From b22a31e0f175903986f03babbcf35174316dbb53 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 5 Jan 2024 15:30:02 +0100 Subject: [PATCH 2/2] Fix build --- Objects/genobject.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Objects/genobject.c b/Objects/genobject.c index 4c2e7452fbb7df..60bc75e6911133 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -3,6 +3,7 @@ #define _PY_INTERPRETER #include "Python.h" +#include "structmember.h" #include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_ceval.h" // _PyEval_EvalFrame() #include "pycore_frame.h" // _PyInterpreterFrame