Skip to content

Commit 4766ca0

Browse files
aloisklinksrittau
authored andcommitted
Use Literal to improve SpooledTemporaryFile (#3526)
* Run black code formatter on tempfile.pyi * Use Literal to improve SpooledTemporaryFile Previously, SpooledTemporaryFile was always an AnyStr. Now, we load a SpooledTemporaryFile[bytes] if we open in bytes mode, and we load a SpooledTemporaryFile[str] if we open in str mode.
1 parent 6b32154 commit 4766ca0

File tree

1 file changed

+50
-21
lines changed

1 file changed

+50
-21
lines changed

stdlib/3/tempfile.pyi

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ def TemporaryFile(
5555
prefix: Optional[AnyStr] = ...,
5656
dir: Optional[_DirT[AnyStr]] = ...,
5757
) -> IO[Any]: ...
58-
5958
@overload
6059
def NamedTemporaryFile(
6160
mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"],
@@ -93,17 +92,48 @@ def NamedTemporaryFile(
9392
# It does not actually derive from IO[AnyStr], but it does implement the
9493
# protocol.
9594
class SpooledTemporaryFile(IO[AnyStr]):
96-
def __init__(self, max_size: int = ..., mode: str = ...,
97-
buffering: int = ..., encoding: Optional[str] = ...,
98-
newline: Optional[str] = ..., suffix: Optional[str] = ...,
99-
prefix: Optional[str] = ..., dir: Optional[str] = ...
100-
) -> None: ...
95+
# bytes needs to go first, as default mode is to open as bytes
96+
@overload
97+
def __init__(
98+
self: SpooledTemporaryFile[bytes],
99+
max_size: int = ...,
100+
mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ...,
101+
buffering: int = ...,
102+
encoding: Optional[str] = ...,
103+
newline: Optional[str] = ...,
104+
suffix: Optional[str] = ...,
105+
prefix: Optional[str] = ...,
106+
dir: Optional[str] = ...,
107+
) -> None: ...
108+
@overload
109+
def __init__(
110+
self: SpooledTemporaryFile[str],
111+
max_size: int = ...,
112+
mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"] = ...,
113+
buffering: int = ...,
114+
encoding: Optional[str] = ...,
115+
newline: Optional[str] = ...,
116+
suffix: Optional[str] = ...,
117+
prefix: Optional[str] = ...,
118+
dir: Optional[str] = ...,
119+
) -> None: ...
120+
@overload
121+
def __init__(
122+
self,
123+
max_size: int = ...,
124+
mode: str = ...,
125+
buffering: int = ...,
126+
encoding: Optional[str] = ...,
127+
newline: Optional[str] = ...,
128+
suffix: Optional[str] = ...,
129+
prefix: Optional[str] = ...,
130+
dir: Optional[str] = ...,
131+
) -> None: ...
101132
def rollover(self) -> None: ...
102133
def __enter__(self: _S) -> _S: ...
103-
def __exit__(self, exc_type: Optional[Type[BaseException]],
104-
exc_val: Optional[BaseException],
105-
exc_tb: Optional[TracebackType]) -> Optional[bool]: ...
106-
134+
def __exit__(
135+
self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
136+
) -> Optional[bool]: ...
107137
# These methods are copied from the abstract methods of IO, because
108138
# SpooledTemporaryFile implements IO.
109139
# See also https://github.com/python/typeshed/pull/2452#issuecomment-420657918.
@@ -127,25 +157,24 @@ class SpooledTemporaryFile(IO[AnyStr]):
127157

128158
class TemporaryDirectory(Generic[AnyStr]):
129159
name: str
130-
def __init__(self, suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ...,
131-
dir: Optional[_DirT[AnyStr]] = ...) -> None: ...
160+
def __init__(
161+
self, suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ...
162+
) -> None: ...
132163
def cleanup(self) -> None: ...
133164
def __enter__(self) -> AnyStr: ...
134-
def __exit__(self, exc_type: Optional[Type[BaseException]],
135-
exc_val: Optional[BaseException],
136-
exc_tb: Optional[TracebackType]) -> None: ...
165+
def __exit__(
166+
self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
167+
) -> None: ...
137168

138-
def mkstemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ...,
139-
text: bool = ...) -> Tuple[int, AnyStr]: ...
169+
def mkstemp(
170+
suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., text: bool = ...
171+
) -> Tuple[int, AnyStr]: ...
140172
@overload
141173
def mkdtemp() -> str: ...
142174
@overload
143-
def mkdtemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ...,
144-
dir: Optional[_DirT[AnyStr]] = ...) -> AnyStr: ...
175+
def mkdtemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ...) -> AnyStr: ...
145176
def mktemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ...) -> AnyStr: ...
146-
147177
def gettempdirb() -> bytes: ...
148178
def gettempprefixb() -> bytes: ...
149-
150179
def gettempdir() -> str: ...
151180
def gettempprefix() -> str: ...

0 commit comments

Comments
 (0)