Skip to content

Commit fecb84e

Browse files
AlexWaygoodsrittau
andauthored
Update asyncio.tasks for py312 (#10669)
Co-authored-by: Sebastian Rittau <[email protected]>
1 parent a3f4418 commit fecb84e

File tree

2 files changed

+83
-27
lines changed

2 files changed

+83
-27
lines changed

stdlib/asyncio/tasks.pyi

+83-22
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import concurrent.futures
22
import sys
33
from collections.abc import Awaitable, Coroutine, Generator, Iterable, Iterator
44
from types import FrameType
5-
from typing import Any, Generic, TextIO, TypeVar, overload
5+
from typing import Any, Generic, Protocol, TextIO, TypeVar, overload
66
from typing_extensions import Literal, TypeAlias
77

88
from . import _CoroutineLike
@@ -14,27 +14,52 @@ if sys.version_info >= (3, 9):
1414
if sys.version_info >= (3, 11):
1515
from contextvars import Context
1616

17-
__all__ = (
18-
"Task",
19-
"create_task",
20-
"FIRST_COMPLETED",
21-
"FIRST_EXCEPTION",
22-
"ALL_COMPLETED",
23-
"wait",
24-
"wait_for",
25-
"as_completed",
26-
"sleep",
27-
"gather",
28-
"shield",
29-
"ensure_future",
30-
"run_coroutine_threadsafe",
31-
"current_task",
32-
"all_tasks",
33-
"_register_task",
34-
"_unregister_task",
35-
"_enter_task",
36-
"_leave_task",
37-
)
17+
if sys.version_info >= (3, 12):
18+
__all__ = (
19+
"Task",
20+
"create_task",
21+
"FIRST_COMPLETED",
22+
"FIRST_EXCEPTION",
23+
"ALL_COMPLETED",
24+
"wait",
25+
"wait_for",
26+
"as_completed",
27+
"sleep",
28+
"gather",
29+
"shield",
30+
"ensure_future",
31+
"run_coroutine_threadsafe",
32+
"current_task",
33+
"all_tasks",
34+
"create_eager_task_factory",
35+
"eager_task_factory",
36+
"_register_task",
37+
"_unregister_task",
38+
"_enter_task",
39+
"_leave_task",
40+
)
41+
else:
42+
__all__ = (
43+
"Task",
44+
"create_task",
45+
"FIRST_COMPLETED",
46+
"FIRST_EXCEPTION",
47+
"ALL_COMPLETED",
48+
"wait",
49+
"wait_for",
50+
"as_completed",
51+
"sleep",
52+
"gather",
53+
"shield",
54+
"ensure_future",
55+
"run_coroutine_threadsafe",
56+
"current_task",
57+
"all_tasks",
58+
"_register_task",
59+
"_unregister_task",
60+
"_enter_task",
61+
"_leave_task",
62+
)
3863

3964
_T = TypeVar("_T")
4065
_T_co = TypeVar("_T_co", covariant=True)
@@ -356,5 +381,41 @@ else:
356381
def current_task(loop: AbstractEventLoop | None = None) -> Task[Any] | None: ...
357382
def _enter_task(loop: AbstractEventLoop, task: Task[Any]) -> None: ...
358383
def _leave_task(loop: AbstractEventLoop, task: Task[Any]) -> None: ...
384+
385+
if sys.version_info >= (3, 12):
386+
_TaskT_co = TypeVar("_TaskT_co", bound=Task[Any], covariant=True)
387+
388+
class _CustomTaskConstructor(Protocol[_TaskT_co]):
389+
def __call__(
390+
self,
391+
__coro: _TaskCompatibleCoro[Any],
392+
*,
393+
loop: AbstractEventLoop,
394+
name: str | None,
395+
context: Context | None,
396+
eager_start: bool,
397+
) -> _TaskT_co: ...
398+
399+
class _EagerTaskFactoryType(Protocol[_TaskT_co]):
400+
def __call__(
401+
self,
402+
loop: AbstractEventLoop,
403+
coro: _TaskCompatibleCoro[Any],
404+
*,
405+
name: str | None = None,
406+
context: Context | None = None,
407+
) -> _TaskT_co: ...
408+
409+
def create_eager_task_factory(
410+
custom_task_constructor: _CustomTaskConstructor[_TaskT_co],
411+
) -> _EagerTaskFactoryType[_TaskT_co]: ...
412+
def eager_task_factory(
413+
loop: AbstractEventLoop | None,
414+
coro: _TaskCompatibleCoro[_T_co],
415+
*,
416+
name: str | None = None,
417+
context: Context | None = None,
418+
) -> Task[_T_co]: ...
419+
359420
def _register_task(task: Task[Any]) -> None: ...
360421
def _unregister_task(task: Task[Any]) -> None: ...

tests/stubtest_allowlists/py312.txt

-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
# Uncategorised, from Python 3.12
2-
asyncio.create_eager_task_factory
3-
asyncio.eager_task_factory
4-
asyncio.tasks.__all__
5-
asyncio.tasks.create_eager_task_factory
6-
asyncio.tasks.eager_task_factory
72
collections.UserDict.get
83
enum.Enum.__signature__
94
enum.EnumMeta.__call__

0 commit comments

Comments
 (0)