bpo-38978: Implement __class_getitem__ for asyncio objects (GH-17491)
https://bugs.python.org/issue38978
This commit is contained in:
parent
723f71abf7
commit
dec367261e
|
@ -103,6 +103,9 @@ class Future:
|
||||||
context['source_traceback'] = self._source_traceback
|
context['source_traceback'] = self._source_traceback
|
||||||
self._loop.call_exception_handler(context)
|
self._loop.call_exception_handler(context)
|
||||||
|
|
||||||
|
def __class_getitem__(cls, type):
|
||||||
|
return cls
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _log_traceback(self):
|
def _log_traceback(self):
|
||||||
return self.__log_traceback
|
return self.__log_traceback
|
||||||
|
|
|
@ -76,6 +76,9 @@ class Queue:
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'<{type(self).__name__} {self._format()}>'
|
return f'<{type(self).__name__} {self._format()}>'
|
||||||
|
|
||||||
|
def __class_getitem__(cls, type):
|
||||||
|
return cls
|
||||||
|
|
||||||
def _format(self):
|
def _format(self):
|
||||||
result = f'maxsize={self._maxsize!r}'
|
result = f'maxsize={self._maxsize!r}'
|
||||||
if getattr(self, '_queue', None):
|
if getattr(self, '_queue', None):
|
||||||
|
|
|
@ -175,6 +175,9 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
|
||||||
self._loop.call_exception_handler(context)
|
self._loop.call_exception_handler(context)
|
||||||
super().__del__()
|
super().__del__()
|
||||||
|
|
||||||
|
def __class_getitem__(cls, type):
|
||||||
|
return cls
|
||||||
|
|
||||||
def _repr_info(self):
|
def _repr_info(self):
|
||||||
return base_tasks._task_repr_info(self)
|
return base_tasks._task_repr_info(self)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Implement ``__class_getitem__`` on asyncio objects (Future, Task, Queue).
|
||||||
|
Patch by Batuhan Taskaya.
|
|
@ -1381,6 +1381,12 @@ finally:
|
||||||
PyErr_Restore(error_type, error_value, error_traceback);
|
PyErr_Restore(error_type, error_value, error_traceback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
future_cls_getitem(PyObject *cls, PyObject *type)
|
||||||
|
{
|
||||||
|
Py_INCREF(cls);
|
||||||
|
return cls;
|
||||||
|
}
|
||||||
|
|
||||||
static PyAsyncMethods FutureType_as_async = {
|
static PyAsyncMethods FutureType_as_async = {
|
||||||
(unaryfunc)future_new_iter, /* am_await */
|
(unaryfunc)future_new_iter, /* am_await */
|
||||||
|
@ -1400,6 +1406,7 @@ static PyMethodDef FutureType_methods[] = {
|
||||||
_ASYNCIO_FUTURE_DONE_METHODDEF
|
_ASYNCIO_FUTURE_DONE_METHODDEF
|
||||||
_ASYNCIO_FUTURE_GET_LOOP_METHODDEF
|
_ASYNCIO_FUTURE_GET_LOOP_METHODDEF
|
||||||
_ASYNCIO_FUTURE__REPR_INFO_METHODDEF
|
_ASYNCIO_FUTURE__REPR_INFO_METHODDEF
|
||||||
|
{"__class_getitem__", future_cls_getitem, METH_O|METH_CLASS, NULL},
|
||||||
{NULL, NULL} /* Sentinel */
|
{NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2429,6 +2436,13 @@ done:
|
||||||
FutureObj_finalize((FutureObj*)task);
|
FutureObj_finalize((FutureObj*)task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
task_cls_getitem(PyObject *cls, PyObject *type)
|
||||||
|
{
|
||||||
|
Py_INCREF(cls);
|
||||||
|
return cls;
|
||||||
|
}
|
||||||
|
|
||||||
static void TaskObj_dealloc(PyObject *); /* Needs Task_CheckExact */
|
static void TaskObj_dealloc(PyObject *); /* Needs Task_CheckExact */
|
||||||
|
|
||||||
static PyMethodDef TaskType_methods[] = {
|
static PyMethodDef TaskType_methods[] = {
|
||||||
|
@ -2449,6 +2463,7 @@ static PyMethodDef TaskType_methods[] = {
|
||||||
_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
|
_ASYNCIO_TASK_GET_CORO_METHODDEF
|
||||||
|
{"__class_getitem__", task_cls_getitem, METH_O|METH_CLASS, NULL},
|
||||||
{NULL, NULL} /* Sentinel */
|
{NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue