mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-21 03:11:16 +08:00
contextlib: Remove explicit base class from ExitStack (#7963)
Fixes #7961
This commit is contained in:
@@ -163,7 +163,7 @@ class _RedirectStream(AbstractContextManager[_T_io]):
|
||||
class redirect_stdout(_RedirectStream[_T_io]): ...
|
||||
class redirect_stderr(_RedirectStream[_T_io]): ...
|
||||
|
||||
class ExitStack(AbstractContextManager[ExitStack]):
|
||||
class ExitStack:
|
||||
def __init__(self) -> None: ...
|
||||
def enter_context(self, cm: AbstractContextManager[_T]) -> _T: ...
|
||||
def push(self, exit: _CM_EF) -> _CM_EF: ...
|
||||
@@ -179,7 +179,7 @@ if sys.version_info >= (3, 7):
|
||||
_ExitCoroFunc: TypeAlias = Callable[[type[BaseException] | None, BaseException | None, TracebackType | None], Awaitable[bool]]
|
||||
_ACM_EF = TypeVar("_ACM_EF", bound=AbstractAsyncContextManager[Any] | _ExitCoroFunc)
|
||||
|
||||
class AsyncExitStack(AbstractAsyncContextManager[AsyncExitStack]):
|
||||
class AsyncExitStack:
|
||||
def __init__(self) -> None: ...
|
||||
def enter_context(self, cm: AbstractContextManager[_T]) -> _T: ...
|
||||
async def enter_async_context(self, cm: AbstractAsyncContextManager[_T]) -> _T: ...
|
||||
|
||||
18
test_cases/stdlib/test_contextlib.py
Normal file
18
test_cases/stdlib/test_contextlib.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from contextlib import ExitStack
|
||||
from typing_extensions import assert_type
|
||||
|
||||
|
||||
# See issue #7961
|
||||
class Thing(ExitStack):
|
||||
pass
|
||||
|
||||
|
||||
stack = ExitStack()
|
||||
thing = Thing()
|
||||
assert_type(stack.enter_context(Thing()), Thing)
|
||||
assert_type(thing.enter_context(ExitStack()), ExitStack)
|
||||
|
||||
with stack as cm:
|
||||
assert_type(cm, ExitStack)
|
||||
with thing as cm2:
|
||||
assert_type(cm2, Thing)
|
||||
Reference in New Issue
Block a user