Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitea5b968

Browse files
kumaraditya303blurb-it[bot]JelleZijlstra
authored
bpo-46469: Make asyncio generic classes return GenericAlias (GH-30777)
*bpo-46469: Make asyncio generic classes return GenericAlias* 📜🤖 Added by blurb_it.* Update Misc/NEWS.d/next/Library/2022-01-22-05-05-08.bpo-46469.plUab5.rstCo-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
1 parentab8fe22 commitea5b968

File tree

8 files changed

+28
-26
lines changed

8 files changed

+28
-26
lines changed

‎Lib/asyncio/futures.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
importcontextvars
99
importlogging
1010
importsys
11+
fromtypesimportGenericAlias
1112

1213
from .importbase_futures
1314
from .importevents
@@ -106,8 +107,7 @@ def __del__(self):
106107
context['source_traceback']=self._source_traceback
107108
self._loop.call_exception_handler(context)
108109

109-
def__class_getitem__(cls,type):
110-
returncls
110+
__class_getitem__=classmethod(GenericAlias)
111111

112112
@property
113113
def_log_traceback(self):

‎Lib/asyncio/queues.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
importcollections
44
importheapq
5+
fromtypesimportGenericAlias
56

67
from .importlocks
78
from .importmixins
@@ -69,8 +70,7 @@ def __repr__(self):
6970
def__str__(self):
7071
returnf'<{type(self).__name__}{self._format()}>'
7172

72-
def__class_getitem__(cls,type):
73-
returncls
73+
__class_getitem__=classmethod(GenericAlias)
7474

7575
def_format(self):
7676
result=f'maxsize={self._maxsize!r}'

‎Lib/asyncio/tasks.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
importtypes
1818
importwarnings
1919
importweakref
20+
fromtypesimportGenericAlias
2021

2122
from .importbase_tasks
2223
from .importcoroutines
@@ -123,8 +124,7 @@ def __del__(self):
123124
self._loop.call_exception_handler(context)
124125
super().__del__()
125126

126-
def__class_getitem__(cls,type):
127-
returncls
127+
__class_getitem__=classmethod(GenericAlias)
128128

129129
def_repr_info(self):
130130
returnbase_tasks._task_repr_info(self)

‎Lib/test/test_asyncio/test_futures.py‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
importthreading
88
importunittest
99
fromunittestimportmock
10-
10+
fromtypesimportGenericAlias
1111
importasyncio
1212
fromasyncioimportfutures
1313
fromtest.test_asyncioimportutilsastest_utils
@@ -109,6 +109,11 @@ def setUp(self):
109109
self.loop=self.new_test_loop()
110110
self.addCleanup(self.loop.close)
111111

112+
deftest_generic_alias(self):
113+
future=self.cls[str]
114+
self.assertEqual(future.__args__, (str,))
115+
self.assertIsInstance(future,GenericAlias)
116+
112117
deftest_isfuture(self):
113118
classMyFuture:
114119
_asyncio_future_blocking=None

‎Lib/test/test_asyncio/test_queues.py‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
"""Tests for queues.py"""
22

33
importunittest
4-
fromunittestimportmock
5-
64
importasyncio
5+
fromtypesimportGenericAlias
76
fromtest.test_asyncioimportutilsastest_utils
87

98

@@ -74,6 +73,11 @@ def test_repr(self):
7473
deftest_str(self):
7574
self._test_repr_or_str(str,False)
7675

76+
deftest_generic_alias(self):
77+
q=asyncio.Queue[int]
78+
self.assertEqual(q.__args__, (int,))
79+
self.assertIsInstance(q,GenericAlias)
80+
7781
deftest_empty(self):
7882
q=asyncio.Queue()
7983
self.assertTrue(q.empty())

‎Lib/test/test_asyncio/test_tasks.py‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
importsys
1212
importtextwrap
1313
importtraceback
14-
importtypes
1514
importunittest
1615
importweakref
1716
fromunittestimportmock
17+
fromtypesimportGenericAlias
1818

1919
importasyncio
2020
fromasyncioimportcoroutines
@@ -108,6 +108,12 @@ def setUp(self):
108108
self.loop.set_task_factory(self.new_task)
109109
self.loop.create_future=lambda:self.new_future(self.loop)
110110

111+
112+
deftest_generic_alias(self):
113+
task=self.__class__.Task[str]
114+
self.assertEqual(task.__args__, (str,))
115+
self.assertIsInstance(task,GenericAlias)
116+
111117
deftest_task_cancel_message_getter(self):
112118
asyncdefcoro():
113119
pass
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:mod:`asyncio` generic classes now return:class:`types.GenericAlias` in ``__class_getitem__`` instead of the same class.

‎Modules/_asynciomodule.c‎

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,13 +1480,6 @@ FutureObj_finalize(FutureObj *fut)
14801480
PyErr_Restore(error_type,error_value,error_traceback);
14811481
}
14821482

1483-
staticPyObject*
1484-
future_cls_getitem(PyObject*cls,PyObject*type)
1485-
{
1486-
Py_INCREF(cls);
1487-
returncls;
1488-
}
1489-
14901483
staticPyAsyncMethodsFutureType_as_async= {
14911484
(unaryfunc)future_new_iter,/* am_await */
14921485
0,/* am_aiter */
@@ -1507,7 +1500,7 @@ static PyMethodDef FutureType_methods[] = {
15071500
_ASYNCIO_FUTURE_GET_LOOP_METHODDEF
15081501
_ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF
15091502
_ASYNCIO_FUTURE__REPR_INFO_METHODDEF
1510-
{"__class_getitem__",future_cls_getitem,METH_O|METH_CLASS,NULL},
1503+
{"__class_getitem__",Py_GenericAlias,METH_O|METH_CLASS,PyDoc_STR("See PEP 585")},
15111504
{NULL,NULL}/* Sentinel */
15121505
};
15131506

@@ -2449,13 +2442,6 @@ TaskObj_finalize(TaskObj *task)
24492442
FutureObj_finalize((FutureObj*)task);
24502443
}
24512444

2452-
staticPyObject*
2453-
task_cls_getitem(PyObject*cls,PyObject*type)
2454-
{
2455-
Py_INCREF(cls);
2456-
returncls;
2457-
}
2458-
24592445
staticvoidTaskObj_dealloc(PyObject*);/* Needs Task_CheckExact */
24602446

24612447
staticPyMethodDefTaskType_methods[]= {
@@ -2475,7 +2461,7 @@ static PyMethodDef TaskType_methods[] = {
24752461
_ASYNCIO_TASK_GET_NAME_METHODDEF
24762462
_ASYNCIO_TASK_SET_NAME_METHODDEF
24772463
_ASYNCIO_TASK_GET_CORO_METHODDEF
2478-
{"__class_getitem__",task_cls_getitem,METH_O|METH_CLASS,NULL},
2464+
{"__class_getitem__",Py_GenericAlias,METH_O|METH_CLASS,PyDoc_STR("See PEP 585")},
24792465
{NULL,NULL}/* Sentinel */
24802466
};
24812467

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp