bpo-36999: Add asyncio.Task.get_coro() (GH-13680)
https://bugs.python.org/issue36999
This commit is contained in:
parent
25ee0c3bf1
commit
98ef92002e
|
@ -842,6 +842,12 @@ Task Object
|
||||||
The *file* argument is an I/O stream to which the output
|
The *file* argument is an I/O stream to which the output
|
||||||
is written; by default output is written to :data:`sys.stderr`.
|
is written; by default output is written to :data:`sys.stderr`.
|
||||||
|
|
||||||
|
.. method:: get_coro()
|
||||||
|
|
||||||
|
Return the coroutine object wrapped by the :class:`Task`.
|
||||||
|
|
||||||
|
.. versionadded:: 3.8
|
||||||
|
|
||||||
.. method:: get_name()
|
.. method:: get_name()
|
||||||
|
|
||||||
Return the name of the Task.
|
Return the name of the Task.
|
||||||
|
|
|
@ -152,6 +152,9 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
|
||||||
def _repr_info(self):
|
def _repr_info(self):
|
||||||
return base_tasks._task_repr_info(self)
|
return base_tasks._task_repr_info(self)
|
||||||
|
|
||||||
|
def get_coro(self):
|
||||||
|
return self._coro
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
|
|
|
@ -2425,6 +2425,16 @@ class BaseTaskTests:
|
||||||
|
|
||||||
self.assertEqual(cvar.get(), -1)
|
self.assertEqual(cvar.get(), -1)
|
||||||
|
|
||||||
|
def test_get_coro(self):
|
||||||
|
loop = asyncio.new_event_loop()
|
||||||
|
coro = coroutine_function()
|
||||||
|
try:
|
||||||
|
task = self.new_task(loop, coro)
|
||||||
|
loop.run_until_complete(task)
|
||||||
|
self.assertIs(task.get_coro(), coro)
|
||||||
|
finally:
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
|
||||||
def add_subclass_tests(cls):
|
def add_subclass_tests(cls):
|
||||||
BaseTask = cls.Task
|
BaseTask = cls.Task
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Add the ``asyncio.Task.get_coro()`` method to publicly expose the tasks's
|
||||||
|
coroutine object.
|
|
@ -2313,6 +2313,18 @@ _asyncio_Task_set_exception(TaskObj *self, PyObject *exception)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
_asyncio.Task.get_coro
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_asyncio_Task_get_coro_impl(TaskObj *self)
|
||||||
|
/*[clinic end generated code: output=bcac27c8cc6c8073 input=d2e8606c42a7b403]*/
|
||||||
|
{
|
||||||
|
Py_INCREF(self->task_coro);
|
||||||
|
return self->task_coro;
|
||||||
|
}
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
_asyncio.Task.get_name
|
_asyncio.Task.get_name
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
@ -2439,6 +2451,7 @@ static PyMethodDef TaskType_methods[] = {
|
||||||
_ASYNCIO_TASK__REPR_INFO_METHODDEF
|
_ASYNCIO_TASK__REPR_INFO_METHODDEF
|
||||||
_ASYNCIO_TASK_GET_NAME_METHODDEF
|
_ASYNCIO_TASK_GET_NAME_METHODDEF
|
||||||
_ASYNCIO_TASK_SET_NAME_METHODDEF
|
_ASYNCIO_TASK_SET_NAME_METHODDEF
|
||||||
|
_ASYNCIO_TASK_GET_CORO_METHODDEF
|
||||||
{NULL, NULL} /* Sentinel */
|
{NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -569,6 +569,23 @@ PyDoc_STRVAR(_asyncio_Task_set_exception__doc__,
|
||||||
#define _ASYNCIO_TASK_SET_EXCEPTION_METHODDEF \
|
#define _ASYNCIO_TASK_SET_EXCEPTION_METHODDEF \
|
||||||
{"set_exception", (PyCFunction)_asyncio_Task_set_exception, METH_O, _asyncio_Task_set_exception__doc__},
|
{"set_exception", (PyCFunction)_asyncio_Task_set_exception, METH_O, _asyncio_Task_set_exception__doc__},
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_asyncio_Task_get_coro__doc__,
|
||||||
|
"get_coro($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n");
|
||||||
|
|
||||||
|
#define _ASYNCIO_TASK_GET_CORO_METHODDEF \
|
||||||
|
{"get_coro", (PyCFunction)_asyncio_Task_get_coro, METH_NOARGS, _asyncio_Task_get_coro__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_asyncio_Task_get_coro_impl(TaskObj *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_asyncio_Task_get_coro(TaskObj *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return _asyncio_Task_get_coro_impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(_asyncio_Task_get_name__doc__,
|
PyDoc_STRVAR(_asyncio_Task_get_name__doc__,
|
||||||
"get_name($self, /)\n"
|
"get_name($self, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -815,4 +832,4 @@ _asyncio__leave_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs,
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=e3b02d96da56e80c input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=51c50219f6a0863a input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue