diff --git a/stdlib/2.7/contextlib.pyi b/stdlib/2.7/contextlib.pyi deleted file mode 100644 index 440009819473..000000000000 --- a/stdlib/2.7/contextlib.pyi +++ /dev/null @@ -1,17 +0,0 @@ -# Stubs for contextlib - -# NOTE: These are incomplete! - -from typing import Callable, Generic, Iterator, TypeVar - -_T = TypeVar('_T') - -class ContextManager(Generic[_T]): - def __enter__(self) -> _T: ... - def __exit__(self, *exc_info) -> None: ... - -# TODO this doesn't capture the relationship that the returned function's args are the same as func's. -def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., ContextManager[_T]]: ... - -class closing(ContextManager[_T], Generic[_T]): - def __init__(self, thing: _T) -> None: ... diff --git a/stdlib/2and3/contextlib.pyi b/stdlib/2and3/contextlib.pyi new file mode 100644 index 000000000000..eaae3ff72121 --- /dev/null +++ b/stdlib/2and3/contextlib.pyi @@ -0,0 +1,53 @@ +# Stubs for contextlib + +from typing import ( + Any, Callable, Generator, IO, Optional, Type, + Generic, TypeVar, +) +from types import TracebackType +import sys + +_T = TypeVar('_T') +_ExitFunc = Callable[[Optional[Type[BaseException]], + Optional[Exception], + Optional[TracebackType]], bool] +_CM_EF = TypeVar('_CM_EF', ContextManager, _ExitFunc) + +# TODO already in PEP, have to get added to mypy +class ContextManager(Generic[_T]): + def __enter__(self) -> _T: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[Exception], + exc_tb: Optional[TracebackType]) -> bool: ... + +def contextmanager(func: Callable[..., Generator[None, None, None]]) -> Callable[..., ContextManager[None]]: ... + +if sys.version_info < (3,): + def nested(*mgr: ContextManager[Any]) -> ContextManager[None]: ... + +class closing(Generic[_T], ContextManager[_T]): + def __init__(self, thing: _T) -> None: ... + +if sys.version_info >= (3, 4): + class suppress(ContextManager[None]): + def __init__(self, *exceptions: Type[BaseException]) -> None: ... + + class redirect_stdout(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3, 5): + class redirect_stderr(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3,): + class ContextDecorator: + def __call__(self, func: Callable[..., None]) -> Callable[..., ContextManager[None]]: ... + + 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[..., None], + *args: Any, **kwds: Any) -> Callable[..., None]: ... + def pop_all(self) -> ExitStack: ... + def close(self) -> None: ... diff --git a/stdlib/3/contextlib.pyi b/stdlib/3/contextlib.pyi deleted file mode 100644 index 440009819473..000000000000 --- a/stdlib/3/contextlib.pyi +++ /dev/null @@ -1,17 +0,0 @@ -# Stubs for contextlib - -# NOTE: These are incomplete! - -from typing import Callable, Generic, Iterator, TypeVar - -_T = TypeVar('_T') - -class ContextManager(Generic[_T]): - def __enter__(self) -> _T: ... - def __exit__(self, *exc_info) -> None: ... - -# TODO this doesn't capture the relationship that the returned function's args are the same as func's. -def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., ContextManager[_T]]: ... - -class closing(ContextManager[_T], Generic[_T]): - def __init__(self, thing: _T) -> None: ...