From b7d6bab83f0a9cf81302573d5bb0ecca2ed0f0dc Mon Sep 17 00:00:00 2001 From: Ruud van Asseldonk Date: Tue, 20 Nov 2018 11:03:21 +0100 Subject: [PATCH] Fix stub for SpooledTemporaryFile (#2452) Fixes #2431 --- stdlib/3/tempfile.pyi | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/stdlib/3/tempfile.pyi b/stdlib/3/tempfile.pyi index bbacfa136..c3e296327 100644 --- a/stdlib/3/tempfile.pyi +++ b/stdlib/3/tempfile.pyi @@ -5,7 +5,7 @@ import sys from types import TracebackType -from typing import Any, AnyStr, Generic, IO, Optional, Tuple, Type +from typing import Any, AnyStr, Generic, IO, Iterable, Iterator, List, Optional, Tuple, Type # global variables TMP_MAX: int @@ -26,12 +26,41 @@ if sys.version_info >= (3, 5): dir: Optional[AnyStr] = ..., delete: bool = ... ) -> IO[Any]: ... - def SpooledTemporaryFile( - max_size: int = ..., mode: str = ..., buffering: int = ..., - encoding: str = ..., newline: str = ..., suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ... - ) -> IO[Any]: - ... + + # It does not actually derive from IO[AnyStr], but it does implement the + # protocol. + class SpooledTemporaryFile(IO[AnyStr]): + def __init__(self, max_size: int = ..., mode: str = ..., + buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[str] = ..., + prefix: Optional[str] = ..., dir: Optional[str] = ... + ) -> None: ... + def rollover(self) -> None: ... + def __enter__(self) -> SpooledTemporaryFile: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + # These methods are copied from the abstract methods of IO, because + # SpooledTemporaryFile implements IO. + # See also https://github.com/python/typeshed/pull/2452#issuecomment-420657918. + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, n: int = ...) -> AnyStr: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> AnyStr: ... + def readlines(self, hint: int = ...) -> List[AnyStr]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: AnyStr) -> int: ... + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + def __next__(self) -> AnyStr: ... + def __iter__(self) -> Iterator[AnyStr]: ... class TemporaryDirectory(Generic[AnyStr]): name = ... # type: str