From eeea0ac614116827d2f95c41faae076bd3164b99 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Tue, 21 May 2024 05:18:38 -0400 Subject: [PATCH] asyncio: fix task factory types (#11993) --- .../@tests/test_cases/asyncio/check_task_factory.py | 13 +++++++++++++ stdlib/asyncio/__init__.pyi | 10 +++++----- stdlib/asyncio/events.pyi | 4 ++-- 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 stdlib/@tests/test_cases/asyncio/check_task_factory.py diff --git a/stdlib/@tests/test_cases/asyncio/check_task_factory.py b/stdlib/@tests/test_cases/asyncio/check_task_factory.py new file mode 100644 index 000000000..30b587d9c --- /dev/null +++ b/stdlib/@tests/test_cases/asyncio/check_task_factory.py @@ -0,0 +1,13 @@ +import asyncio +import sys + + +def get_set(loop: asyncio.BaseEventLoop) -> None: + loop.set_task_factory(loop.get_task_factory()) + + +if sys.version_info >= (3, 12): + + def eager(loop: asyncio.BaseEventLoop) -> None: + loop.set_task_factory(asyncio.eager_task_factory) + loop.set_task_factory(asyncio.create_eager_task_factory(asyncio.Task)) diff --git a/stdlib/asyncio/__init__.pyi b/stdlib/asyncio/__init__.pyi index d5bbe8cb0..daf28862a 100644 --- a/stdlib/asyncio/__init__.pyi +++ b/stdlib/asyncio/__init__.pyi @@ -30,12 +30,12 @@ if sys.platform == "win32": else: from .unix_events import * -_T = TypeVar("_T") +_T_co = TypeVar("_T_co", covariant=True) # Aliases imported by multiple submodules in typeshed if sys.version_info >= (3, 12): - _AwaitableLike: TypeAlias = Awaitable[_T] # noqa: Y047 - _CoroutineLike: TypeAlias = Coroutine[Any, Any, _T] # noqa: Y047 + _AwaitableLike: TypeAlias = Awaitable[_T_co] # noqa: Y047 + _CoroutineLike: TypeAlias = Coroutine[Any, Any, _T_co] # noqa: Y047 else: - _AwaitableLike: TypeAlias = Generator[Any, None, _T] | Awaitable[_T] - _CoroutineLike: TypeAlias = Generator[Any, None, _T] | Coroutine[Any, Any, _T] + _AwaitableLike: TypeAlias = Generator[Any, None, _T_co] | Awaitable[_T_co] + _CoroutineLike: TypeAlias = Generator[Any, None, _T_co] | Coroutine[Any, Any, _T_co] diff --git a/stdlib/asyncio/events.pyi b/stdlib/asyncio/events.pyi index 95de28c50..c0345eb1b 100644 --- a/stdlib/asyncio/events.pyi +++ b/stdlib/asyncio/events.pyi @@ -2,7 +2,7 @@ import ssl import sys from _typeshed import FileDescriptorLike, ReadableBuffer, StrPath, Unused, WriteableBuffer from abc import ABCMeta, abstractmethod -from collections.abc import Callable, Coroutine, Generator, Sequence +from collections.abc import Callable, Sequence from contextvars import Context from socket import AddressFamily, SocketKind, _Address, _RetAddress, socket from typing import IO, Any, Literal, Protocol, TypeVar, overload @@ -43,7 +43,7 @@ _ProtocolFactory: TypeAlias = Callable[[], BaseProtocol] _SSLContext: TypeAlias = bool | None | ssl.SSLContext class _TaskFactory(Protocol): - def __call__(self, loop: AbstractEventLoop, factory: Coroutine[Any, Any, _T] | Generator[Any, None, _T], /) -> Future[_T]: ... + def __call__(self, loop: AbstractEventLoop, factory: _CoroutineLike[_T], /) -> Future[_T]: ... class Handle: _cancelled: bool