1from random import Random
2from thread import LockType
3from typing import IO, Any, AnyStr, Iterable, Iterator, List, Optional, Text, Tuple, Union, overload
4
5TMP_MAX: int
6tempdir: str
7template: str
8_name_sequence: Optional[_RandomNameSequence]
9
10class _RandomNameSequence:
11    characters: str = ...
12    mutex: LockType
13    @property
14    def rng(self) -> Random: ...
15    def __iter__(self) -> _RandomNameSequence: ...
16    def next(self) -> str: ...
17    # from os.path:
18    def normcase(self, path: AnyStr) -> AnyStr: ...
19
20class _TemporaryFileWrapper(IO[str]):
21    delete: bool
22    file: IO[str]
23    name: Any
24    def __init__(self, file: IO[str], name: Any, delete: bool = ...) -> None: ...
25    def __del__(self) -> None: ...
26    def __enter__(self) -> _TemporaryFileWrapper: ...
27    def __exit__(self, exc, value, tb) -> Optional[bool]: ...
28    def __getattr__(self, name: unicode) -> Any: ...
29    def close(self) -> None: ...
30    def unlink(self, path: unicode) -> None: ...
31    # These methods don't exist directly on this object, but
32    # are delegated to the underlying IO object through __getattr__.
33    # We need to add them here so that this class is concrete.
34    def __iter__(self) -> Iterator[str]: ...
35    def fileno(self) -> int: ...
36    def flush(self) -> None: ...
37    def isatty(self) -> bool: ...
38    def next(self) -> str: ...
39    def read(self, n: int = ...) -> str: ...
40    def readable(self) -> bool: ...
41    def readline(self, limit: int = ...) -> str: ...
42    def readlines(self, hint: int = ...) -> List[str]: ...
43    def seek(self, offset: int, whence: int = ...) -> int: ...
44    def seekable(self) -> bool: ...
45    def tell(self) -> int: ...
46    def truncate(self, size: Optional[int] = ...) -> int: ...
47    def writable(self) -> bool: ...
48    def write(self, s: Text) -> int: ...
49    def writelines(self, lines: Iterable[str]) -> None: ...
50
51# TODO text files
52
53def TemporaryFile(
54    mode: Union[bytes, unicode] = ...,
55    bufsize: int = ...,
56    suffix: Union[bytes, unicode] = ...,
57    prefix: Union[bytes, unicode] = ...,
58    dir: Union[bytes, unicode] = ...,
59) -> _TemporaryFileWrapper: ...
60def NamedTemporaryFile(
61    mode: Union[bytes, unicode] = ...,
62    bufsize: int = ...,
63    suffix: Union[bytes, unicode] = ...,
64    prefix: Union[bytes, unicode] = ...,
65    dir: Union[bytes, unicode] = ...,
66    delete: bool = ...,
67) -> _TemporaryFileWrapper: ...
68def SpooledTemporaryFile(
69    max_size: int = ...,
70    mode: Union[bytes, unicode] = ...,
71    buffering: int = ...,
72    suffix: Union[bytes, unicode] = ...,
73    prefix: Union[bytes, unicode] = ...,
74    dir: Union[bytes, unicode] = ...,
75) -> _TemporaryFileWrapper: ...
76
77class TemporaryDirectory:
78    name: Any
79    def __init__(
80        self, suffix: Union[bytes, unicode] = ..., prefix: Union[bytes, unicode] = ..., dir: Union[bytes, unicode] = ...
81    ) -> None: ...
82    def cleanup(self) -> None: ...
83    def __enter__(self) -> Any: ...  # Can be str or unicode
84    def __exit__(self, type, value, traceback) -> None: ...
85
86@overload
87def mkstemp() -> Tuple[int, str]: ...
88@overload
89def mkstemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ..., text: bool = ...) -> Tuple[int, AnyStr]: ...
90@overload
91def mkdtemp() -> str: ...
92@overload
93def mkdtemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ...
94@overload
95def mktemp() -> str: ...
96@overload
97def mktemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ...
98def gettempdir() -> str: ...
99def gettempprefix() -> str: ...
100def _candidate_tempdir_list() -> List[str]: ...
101def _get_candidate_names() -> Optional[_RandomNameSequence]: ...
102def _get_default_tempdir() -> str: ...
103