From 42247feefb58f59925848b5c70c864afeda37fac Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 6 Jul 2021 09:47:49 +0300 Subject: [PATCH] use Self in async context managers (#5724) --- stdlib/asyncio/events.pyi | 4 ++-- stdlib/contextlib.pyi | 10 +++------- stubs/aiofiles/aiofiles/base.pyi | 3 ++- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/stdlib/asyncio/events.pyi b/stdlib/asyncio/events.pyi index 978bbea63716..61aecbf6a698 100644 --- a/stdlib/asyncio/events.pyi +++ b/stdlib/asyncio/events.pyi @@ -1,6 +1,6 @@ import ssl import sys -from _typeshed import FileDescriptorLike +from _typeshed import FileDescriptorLike, Self from abc import ABCMeta, abstractmethod from socket import AddressFamily, SocketKind, _Address, _RetAddress, socket from typing import IO, Any, Awaitable, Callable, Dict, Generator, List, Optional, Sequence, Tuple, TypeVar, Union, overload @@ -57,7 +57,7 @@ class TimerHandle(Handle): class AbstractServer: def close(self) -> None: ... if sys.version_info >= (3, 7): - async def __aenter__(self: _T) -> _T: ... + async def __aenter__(self: Self) -> Self: ... async def __aexit__(self, *exc: Any) -> None: ... def get_loop(self) -> AbstractEventLoop: ... def is_serving(self) -> bool: ... diff --git a/stdlib/contextlib.pyi b/stdlib/contextlib.pyi index 72cd757e00bf..e2a680e4c65e 100644 --- a/stdlib/contextlib.pyi +++ b/stdlib/contextlib.pyi @@ -72,14 +72,12 @@ class redirect_stderr(ContextManager[_T_io]): class ContextDecorator: def __call__(self, func: _F) -> _F: ... -_U = TypeVar("_U", bound=ExitStack) - class ExitStack(ContextManager[ExitStack]): def __init__(self) -> None: ... def enter_context(self, cm: ContextManager[_T]) -> _T: ... def push(self, exit: _CM_EF) -> _CM_EF: ... def callback(self, callback: Callable[..., Any], *args: Any, **kwds: Any) -> Callable[..., Any]: ... - def pop_all(self: _U) -> _U: ... + def pop_all(self: Self) -> Self: ... def close(self) -> None: ... def __enter__(self: Self) -> Self: ... def __exit__( @@ -90,8 +88,6 @@ class ExitStack(ContextManager[ExitStack]): ) -> bool: ... if sys.version_info >= (3, 7): - _S = TypeVar("_S", bound=AsyncExitStack) - _ExitCoroFunc = Callable[[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]], Awaitable[bool]] _CallbackCoroFunc = Callable[..., Awaitable[Any]] _ACM_EF = TypeVar("_ACM_EF", AsyncContextManager[Any], _ExitCoroFunc) @@ -103,9 +99,9 @@ if sys.version_info >= (3, 7): def push_async_exit(self, exit: _ACM_EF) -> _ACM_EF: ... def callback(self, callback: Callable[..., Any], *args: Any, **kwds: Any) -> Callable[..., Any]: ... def push_async_callback(self, callback: _CallbackCoroFunc, *args: Any, **kwds: Any) -> _CallbackCoroFunc: ... - def pop_all(self: _S) -> _S: ... + def pop_all(self: Self) -> Self: ... def aclose(self) -> Awaitable[None]: ... - def __aenter__(self: _S) -> Awaitable[_S]: ... + def __aenter__(self: Self) -> Awaitable[Self]: ... def __aexit__( self, __exc_type: Optional[Type[BaseException]], diff --git a/stubs/aiofiles/aiofiles/base.pyi b/stubs/aiofiles/aiofiles/base.pyi index 0f5f99a2e467..b06adf68074a 100644 --- a/stubs/aiofiles/aiofiles/base.pyi +++ b/stubs/aiofiles/aiofiles/base.pyi @@ -1,3 +1,4 @@ +from _typeshed import Self from types import CodeType, FrameType, TracebackType, coroutine from typing import Any, Coroutine, Generator, Generic, Iterator, Optional, Type, TypeVar, Union @@ -8,7 +9,7 @@ _T_contra = TypeVar("_T_contra", contravariant=True) class AsyncBase(Generic[_T]): def __init__(self, file: str, loop: Any, executor: Any) -> None: ... - async def __aiter__(self) -> Iterator[_T]: ... + async def __aiter__(self: Self) -> Self: ... async def __anext__(self) -> _T: ... class AiofilesContextManager(Generic[_T_co, _T_contra, _V_co]):