@@ -2,7 +2,7 @@ import concurrent.futures
2
2
import sys
3
3
from collections .abc import Awaitable , Coroutine , Generator , Iterable , Iterator
4
4
from types import FrameType
5
- from typing import Any , Generic , TextIO , TypeVar , overload
5
+ from typing import Any , Generic , Protocol , TextIO , TypeVar , overload
6
6
from typing_extensions import Literal , TypeAlias
7
7
8
8
from . import _CoroutineLike
@@ -14,27 +14,52 @@ if sys.version_info >= (3, 9):
14
14
if sys .version_info >= (3 , 11 ):
15
15
from contextvars import Context
16
16
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
+ )
38
63
39
64
_T = TypeVar ("_T" )
40
65
_T_co = TypeVar ("_T_co" , covariant = True )
@@ -356,5 +381,41 @@ else:
356
381
def current_task (loop : AbstractEventLoop | None = None ) -> Task [Any ] | None : ...
357
382
def _enter_task (loop : AbstractEventLoop , task : Task [Any ]) -> None : ...
358
383
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
+
359
420
def _register_task (task : Task [Any ]) -> None : ...
360
421
def _unregister_task (task : Task [Any ]) -> None : ...
0 commit comments