8000 Tighten tempfile() return types (#10232) · python/typeshed@0fe724d · GitHub
[go: up one dir, main page]

Skip to content

Commit 0fe724d

Browse files
authored
Tighten tempfile() return types (#10232)
1 parent 7da4847 commit 0fe724d

File tree

1 file changed

+120
-45
lines changed

1 file changed

+120
-45
lines changed

stdlib/tempfile.pyi

Lines changed: 120 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
import io
22
import sys
3-
from _typeshed import BytesPath, GenericPath, ReadableBuffer, StrPath, WriteableBuffer
3+
from _typeshed import (
4+
BytesPath,
5+
GenericPath,
6+
OpenBinaryMode,
7+
OpenBinaryModeReading,
8+
OpenBinaryModeUpdating,
9+
OpenBinaryModeWriting,
10+
OpenTextMode,
11+
ReadableBuffer,
12+
StrPath,
13+
WriteableBuffer,
14+
)
415
from collections.abc import Iterable, Iterator
516
from types import TracebackType
617
from typing import IO, Any, AnyStr, Generic, overload
7-
from typing_extensions import Literal, Self, TypeAlias
18+
from typing_extensions import Literal, Self
819

920
if sys.version_info >= (3, 9):
1021
from types import GenericAlias
@@ -30,13 +41,10 @@ TMP_MAX: int
3041
tempdir: str | None
3142
template: str
3243

33-
_StrMode: TypeAlias = Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"]
34-
_BytesMode: TypeAlias = Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"]
35-
3644
if sys.version_info >= (3, 12):
3745
@overload
3846
def NamedTemporaryFile(
39-
mode: _StrMode,
47+
mode: OpenTextMode,
4048
buffering: int = -1,
4149
encoding: str | None = None,
4250
newline: str | None = None,
@@ -50,7 +58,7 @@ if sys.version_info >= (3, 12):
5058
) -> _TemporaryFileWrapper[str]: ...
5159
@overload
5260
def NamedTemporaryFile(
53-
mode: _BytesMode = "w+b",
61+
mode: OpenBinaryMode = "w+b",
5462
buffering: int = -1,
5563
encoding: str | None = None,
5664
newline: str | None = None,
@@ -80,7 +88,7 @@ if sys.version_info >= (3, 12):
8088
elif sys.version_info >= (3, 8):
8189
@overload
8290
def NamedTemporaryFile(
83-
mode: _StrMode,
91+
mode: OpenTextMode,
8492
buffering: int = -1,
8593
encoding: str | None = None,
8694
newline: str | None = None,
@@ -93 6D40 ,7 +101,7 @@ elif sys.version_info >= (3, 8):
93101
) -> _TemporaryFileWrapper[str]: ...
94102
@overload
95103
def NamedTemporaryFile(
96-
mode: _BytesMode = "w+b",
104+
mode: OpenBinaryMode = "w+b",
97105
buffering: int = -1,
98106
encoding: str | None = None,
99107
newline: str | None = None,
@@ -121,7 +129,7 @@ elif sys.version_info >= (3, 8):
121129
else:
122130
@overload
123131
def NamedTemporaryFile(
124-
mode: _StrMode,
132+
mode: OpenTextMode,
125133
buffering: int = -1,
126134
encoding: str | None = None,
127135
newline: str | None = None,
@@ -132,7 +140,7 @@ else:
132140
) -> _TemporaryFileWrapper[str]: ...
133141
@overload
134142
def NamedTemporaryFile(
135-
mode: _BytesMode = "w+b",
143+
mode: OpenBinaryMode = "w+b",
136144
buffering: int = -1,
137145
encoding: str | None = None,
138146
newline: str | None = None,
@@ -156,10 +164,11 @@ else:
156164
if sys.platform == "win32":
157165
TemporaryFile = NamedTemporaryFile
158166
else:
167+
# See the comments for builtins.open() for an explanation of the overloads.
159168
if sys.version_info >= (3, 8):
160169
@overload
161170
def TemporaryFile(
162-
mode: _StrMode,
171+
mode: OpenTextMode,
163172
buffering: int = -1,
164173
encoding: str | None = None,
165174
newline: str | None = None,
@@ -168,19 +177,55 @@ else:
168177
dir: GenericPath[AnyStr] | None = None,
169178
*,
170179
errors: str | None = None,
171-
) -> IO[str]: ...
180+
) -> io.TextIOWrapper: ...
172181
@overload
173182
def TemporaryFile(
174-
mode: _BytesMode = "w+b",
175-
buffering: int = -1,
183+
mode: OpenBinaryMode,
184+
buffering: Literal[0],
185+
encoding: str | None = None,
186+
newline: str | None = None,
187+
suffix: AnyStr | None = None,
188+
prefix: AnyStr | None = None,
189+
dir: GenericPath[AnyStr] | None = None,
190+
*,
191+
errors: str | None = None,
192+
) -> io.FileIO: ...
193+
@overload
194+
def TemporaryFile(
195+
mode: OpenBinaryModeWriting,
196+
buffering: Literal[-1, 1] = -1,
197+
encoding: str | None = None,
198+
newline: str | None = None,
199+
suffix: AnyStr | None = None,
200+
prefix: AnyStr | None = None,
201+
dir: GenericPath[AnyStr] | None = None,
202+
*,
203+
errors: str | None = None,
204+
) -> io.BufferedWriter: ...
205+
@overload
206+
def TemporaryFile(
207+
mode: OpenBinaryModeReading,
208+
buffering: Literal[-1, 1] = -1,
176209
encoding: str | None = None,
177210
newline: str | None = None,
178211
suffix: AnyStr | None = None,
179212
prefix: AnyStr | None = None,
180213
dir: GenericPath[AnyStr] | None = None,
181214
*,
182215
errors: str | None = None,
183-
) -> IO[bytes]: ...
216+
) -> io.BufferedReader: ...
217+
@overload
218+
def TemporaryFile(
219+
mode: OpenBinaryModeUpdating = "w+b",
220+
buffering: Literal[-1, 1] = -1,
221+
encoding: str | None = None,
222+
newline: str | None = None,
223+
suffix: AnyStr | None = None,
224+
prefix: AnyStr | None = None,
225+
dir: GenericPath[AnyStr] | None = None,
226+
*,
227+
errors: str | None = None,
228+
) -> io.BufferedRandom: ...
184229
@overload
185230
def TemporaryFile(
186231
mode: str = "w+b",
@@ -196,33 +241,63 @@ else:
196241
else:
197242
@overload
198243
def TemporaryFile(
199-
mode: _StrMode,
200-
buffering: int = ...,
201-
encoding: str | None = ...,
202-
newline: str | None = ...,
203-
suffix: AnyStr | None = ...,
204-
prefix: AnyStr | None = ...,
205-
dir: GenericPath[AnyStr] | None = ...,
206-
) -> IO[str]: ...
244+
mode: OpenTextMode,
245+
buffering: int = -1,
246+
encoding: str | None = None,
247+
newline: str | None = None,
248+
suffix: AnyStr | None = None,
249+
prefix: AnyStr | None = None,
250+
dir: GenericPath[AnyStr] | None = None,
251+
) -> io.TextIOWrapper: ...
252+
@overload
253+
def TemporaryFile(
254+
mode: OpenBinaryMode,
255+
buffering: Literal[0],
256+
encoding: str | None = None,
257+
newline: str | None = None,
258+
suffix: AnyStr | None = None,
259+
prefix: AnyStr | None = None,
260+
dir: GenericPath[AnyStr] | None = None,
261+
) -> io.FileIO: ...
262+
@overload
263+
def TemporaryFile(
264+
mode: OpenBinaryModeUpdating = "w+b",
265+
buffering: Literal[-1, 1] = -1,
266+
encoding: str | None = None,
267+
newline: str | None = None,
268+
suffix: AnyStr | None = None,
269+
prefix: AnyStr | None = None,
270+
dir: GenericPath[AnyStr] | None = None,
271+
) -> io.BufferedRandom: ...
272+
@overload
273+
def TemporaryFile(
274+
mode: OpenBinaryModeWriting,
275+
buffering: Literal[-1, 1] = -1,
276+
encoding: str | None = None,
277+
newline: str | None = None,
278+
suffix: AnyStr | None = None,
279+
prefix: AnyStr | None = None,
280+
dir: GenericPath[AnyStr] | None = None,
281+
) -> io.BufferedWriter: ...
207282
@overload
208283
def TemporaryFile(
209-
mode: _BytesMode = ...,
210-
buffering: int = ...,
211-
encoding: str | None = ...,
212-
newline: str | None = ...,
213-
suffix: AnyStr | None = ...,
214-
prefix: AnyStr | None = ...,
215-
dir: GenericPath[AnyStr] | None = ...,
216-
) -> IO[bytes]: ...
284+
mode: OpenBinaryModeReading,
285+
buffering: Literal[-1, 1] = -1,
286+
encoding: str | None = None,
287+
newline: str | None = None,
288+
suffix: AnyStr | None = None,
289+
prefix: AnyStr | None = None,
290+
dir: GenericPath[AnyStr] | None = None,
291+
) -> io.BufferedReader: ...
217292
@overload
218293
def TemporaryFile(
219-
mode: str = ...,
220-
buffering: int = ...,
221-
encoding: str | None = ...,
222-
newline: str | None = ...,
223-
suffix: AnyStr | None = ...,
224-
prefix: AnyStr | None = ...,
225-
dir: GenericPath[AnyStr] | None = ...,
294+
mode: str = "w+b",
295+
buffering: int = -1,
296+
encoding: str | None = None,
297+
newline: str | None = None,
298+
suffix: AnyStr | None = None,
299+
prefix: AnyStr | None = None,
300+
dir: GenericPath[AnyStr] | None = None,
226301
) -> IO[Any]: ...
227302

228303
class _TemporaryFileWrapper(Generic[AnyStr], IO[AnyStr]):
@@ -294,7 +369,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
294369
def __init__(
295370
self: SpooledTemporaryFile[bytes],
296371
max_size: int = 0,
297-
mode: _BytesMode = "w+b",
372+
mode: OpenBinaryMode = "w+b",
298373
buffering: int = -1,
299374
encoding: str | None = None,
300375
newline: str | None = None,
@@ -308,7 +383,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
308383
def __init__(
309384
self: SpooledTemporaryFile[str],
310385
max_size: int,
311-
mode: _StrMode,
386+
mode: OpenTextMode,
312387
buffering: int = -1,
313388
encoding: str | None = None,
314389
newline: str | None = None,
@@ -323,7 +398,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
323398
self: SpooledTemporaryFile[str],
324399
max_size: int = 0,
325400
*,
326-
mode: _StrMode,
401+
mode: OpenTextMode,
327402
buffering: int = -1,
328403
encoding: str | None = None,
329404
newline: str | None = None,
@@ -367,7 +442,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
367442
def __init__(
368443
self: SpooledTemporaryFile[bytes],
369444
max_size: int = 0,
370-
mode: _BytesMode = "w+b",
445+
mode: OpenBinaryMode = "w+b",
371446
buffering: int = -1,
372447
encoding: str | None = None,
373448
newline: str | None = None,
@@ -379,7 +454,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
379454
def __init__(
380455
self: SpooledTemporaryFile[str],
381456
max_size: int,
382-
mode: _StrMode,
457+
mode: OpenTextMode,
383458
buffering: int = -1,
384459
encoding: str | None = None,
385460
newline: str | None = None,
@@ -392,7 +467,7 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
392467
self: SpooledTemporaryFile[str],
393468
max_size: int = 0,
394469
*,
395-
mode: _StrMode,
470+
mode: OpenTextMode,
396471
buffering: int = -1,
397472
encoding: str | None = None,
398473
newline: str | None = None,

0 commit comments

Comments
 (0)
0