From 4e00841ede8c46e630a1b35d44cd532a3a4b153a Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:20:01 +0200 Subject: [PATCH 1/8] TemporaryFile(): Handle one more case correctly Also add tests. --- stdlib/tempfile.pyi | 4 ++-- test_cases/stdlib/check_tempfile.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test_cases/stdlib/check_tempfile.py diff --git a/stdlib/tempfile.pyi b/stdlib/tempfile.pyi index eca58a3720db..ec14f1754fb7 100644 --- a/stdlib/tempfile.pyi +++ b/stdlib/tempfile.pyi @@ -180,7 +180,7 @@ else: ) -> io.TextIOWrapper: ... @overload def TemporaryFile( - mode: OpenBinaryMode, + mode: OpenBinaryMode = "w+b", buffering: Literal[0], encoding: str | None = None, newline: str | None = None, @@ -251,7 +251,7 @@ else: ) -> io.TextIOWrapper: ... @overload def TemporaryFile( - mode: OpenBinaryMode, + mode: OpenBinaryMode = "w+b", buffering: Literal[0], encoding: str | None = None, newline: str | None = None, diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py new file mode 100644 index 000000000000..81c2cd493aa2 --- /dev/null +++ b/test_cases/stdlib/check_tempfile.py @@ -0,0 +1,10 @@ +import io +from tempfile import TemporaryFile +from typing_extensions import assert_type + +assert_type(TemporaryFile(), io.BufferedRandom) +assert_type(TemporaryFile(buffering=0), io.FileIO) +assert_type(TemporaryFile(mode="w+"), io.TextIOWrapper) +assert_type(TemporaryFile(mode="w+b"), io.BufferedRandom) +assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) +assert_type(TemporaryFile(mode="rb"), io.BufferedReader) From 8a307858937b23552a9cc6114cda82f8490e600a Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:22:32 +0200 Subject: [PATCH 2/8] Add future annotation --- stdlib/tempfile.pyi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdlib/tempfile.pyi b/stdlib/tempfile.pyi index ec14f1754fb7..d4396a2e8eb2 100644 --- a/stdlib/tempfile.pyi +++ b/stdlib/tempfile.pyi @@ -1,3 +1,5 @@ +from __future__ import annotations + import io import sys from _typeshed import ( From 57334d62da79817d8a9e8853727547701f5fb45d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:27:35 +0200 Subject: [PATCH 3/8] Add additional overload because of Python syntax problems --- stdlib/tempfile.pyi | 26 ++++++++++++++++++++++++-- test_cases/stdlib/check_tempfile.py | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/stdlib/tempfile.pyi b/stdlib/tempfile.pyi index d4396a2e8eb2..665fa0b05c34 100644 --- a/stdlib/tempfile.pyi +++ b/stdlib/tempfile.pyi @@ -182,7 +182,19 @@ else: ) -> io.TextIOWrapper: ... @overload def TemporaryFile( - mode: OpenBinaryMode = "w+b", + mode: OpenBinaryMode, + buffering: Literal[0], + encoding: str | None = None, + newline: str | None = None, + suffix: AnyStr | None = None, + prefix: AnyStr | None = None, + dir: GenericPath[AnyStr] | None = None, + *, + errors: str | None = None, + ) -> io.FileIO: ... + @overload + def TemporaryFile( + *, buffering: Literal[0], encoding: str | None = None, newline: str | None = None, @@ -253,7 +265,17 @@ else: ) -> io.TextIOWrapper: ... @overload def TemporaryFile( - mode: OpenBinaryMode = "w+b", + mode: OpenBinaryMode, + buffering: Literal[0], + encoding: str | None = None, + newline: str | None = None, + suffix: AnyStr | None = None, + prefix: AnyStr | None = None, + dir: GenericPath[AnyStr] | None = None, + ) -> io.FileIO: ... + @overload + def TemporaryFile( + *, buffering: Literal[0], encoding: str | None = None, newline: str | None = None, diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py index 81c2cd493aa2..6518633a978a 100644 --- a/test_cases/stdlib/check_tempfile.py +++ b/test_cases/stdlib/check_tempfile.py @@ -8,3 +8,5 @@ assert_type(TemporaryFile(mode="w+b"), io.BufferedRandom) assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) assert_type(TemporaryFile(mode="rb"), io.BufferedReader) +assert_type(TemporaryFile("wb"), io.BufferedWriter) +assert_type(TemporaryFile("wb", 0), FileIO) From 93cff00ba606f85d4de0ef3dbbfef3757cccb6e0 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:28:02 +0200 Subject: [PATCH 4/8] D'oh --- stdlib/tempfile.pyi | 2 -- test_cases/stdlib/check_tempfile.py | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/tempfile.pyi b/stdlib/tempfile.pyi index 665fa0b05c34..e90c9b55a6f4 100644 --- a/stdlib/tempfile.pyi +++ b/stdlib/tempfile.pyi @@ -1,5 +1,3 @@ -from __future__ import annotations - import io import sys from _typeshed import ( diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py index 6518633a978a..909fd457ac74 100644 --- a/test_cases/stdlib/check_tempfile.py +++ b/test_cases/stdlib/check_tempfile.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import io from tempfile import TemporaryFile from typing_extensions import assert_type From 2f94a09c9fb9e34a160cf18916c9d52bc8fd06c9 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:29:18 +0200 Subject: [PATCH 5/8] Add missing 'io' --- test_cases/stdlib/check_tempfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py index 909fd457ac74..79559f01ff16 100644 --- a/test_cases/stdlib/check_tempfile.py +++ b/test_cases/stdlib/check_tempfile.py @@ -11,4 +11,4 @@ assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) assert_type(TemporaryFile(mode="rb"), io.BufferedReader) assert_type(TemporaryFile("wb"), io.BufferedWriter) -assert_type(TemporaryFile("wb", 0), FileIO) +assert_type(TemporaryFile("wb", 0), io.FileIO) From 677a6657204315463a50fb8ae2627332ca4596b8 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:31:35 +0200 Subject: [PATCH 6/8] Fix syntax --- stdlib/tempfile.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/tempfile.pyi b/stdlib/tempfile.pyi index e90c9b55a6f4..b251f8b9d029 100644 --- a/stdlib/tempfile.pyi +++ b/stdlib/tempfile.pyi @@ -199,7 +199,6 @@ else: suffix: AnyStr | None = None, prefix: AnyStr | None = None, dir: GenericPath[AnyStr] | None = None, - *, errors: str | None = None, ) -> io.FileIO: ... @overload From 8f509bd3b11d9cb589d5d648125159f436760f8d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Thu, 8 Jun 2023 12:39:26 +0200 Subject: [PATCH 7/8] Only test return types on non-Windows platforms --- test_cases/stdlib/check_tempfile.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py index 79559f01ff16..10d1d5fe2e27 100644 --- a/test_cases/stdlib/check_tempfile.py +++ b/test_cases/stdlib/check_tempfile.py @@ -1,14 +1,16 @@ from __future__ import annotations import io +import sys from tempfile import TemporaryFile from typing_extensions import assert_type -assert_type(TemporaryFile(), io.BufferedRandom) -assert_type(TemporaryFile(buffering=0), io.FileIO) -assert_type(TemporaryFile(mode="w+"), io.TextIOWrapper) -assert_type(TemporaryFile(mode="w+b"), io.BufferedRandom) -assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) -assert_type(TemporaryFile(mode="rb"), io.BufferedReader) -assert_type(TemporaryFile("wb"), io.BufferedWriter) -assert_type(TemporaryFile("wb", 0), io.FileIO) +if sys.platform != "win32": + assert_type(TemporaryFile(), io.BufferedRandom) + assert_type(TemporaryFile(buffering=0), io.FileIO) + assert_type(TemporaryFile(mode="w+"), io.TextIOWrapper) + assert_type(TemporaryFile(mode="w+b"), io.BufferedRandom) + assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) + assert_type(TemporaryFile(mode="rb"), io.BufferedReader) + assert_type(TemporaryFile("wb"), io.BufferedWriter) + assert_type(TemporaryFile("wb", 0), io.FileIO) From 2e28f272381ccb75b469d2755bc9218fafe357d0 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 12 Jun 2023 12:11:55 +0200 Subject: [PATCH 8/8] Add windows tests --- test_cases/stdlib/check_tempfile.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/test_cases/stdlib/check_tempfile.py b/test_cases/stdlib/check_tempfile.py index 10d1d5fe2e27..c259c192a140 100644 --- a/test_cases/stdlib/check_tempfile.py +++ b/test_cases/stdlib/check_tempfile.py @@ -2,15 +2,30 @@ import io import sys -from tempfile import TemporaryFile +from tempfile import TemporaryFile, _TemporaryFileWrapper from typing_extensions import assert_type -if sys.platform != "win32": +if sys.platform == "win32": + assert_type(TemporaryFile(), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile("w+"), _TemporaryFileWrapper[str]) + assert_type(TemporaryFile("w+b"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile("wb"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile("rb"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile("wb", 0), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile(mode="w+"), _TemporaryFileWrapper[str]) + assert_type(TemporaryFile(mode="w+b"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile(mode="wb"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile(mode="rb"), _TemporaryFileWrapper[bytes]) + assert_type(TemporaryFile(buffering=0), _TemporaryFileWrapper[bytes]) +else: assert_type(TemporaryFile(), io.BufferedRandom) - assert_type(TemporaryFile(buffering=0), io.FileIO) + assert_type(TemporaryFile("w+"), io.TextIOWrapper) + assert_type(TemporaryFile("w+b"), io.BufferedRandom) + assert_type(TemporaryFile("wb"), io.BufferedWriter) + assert_type(TemporaryFile("rb"), io.BufferedReader) + assert_type(TemporaryFile("wb", 0), io.FileIO) assert_type(TemporaryFile(mode="w+"), io.TextIOWrapper) assert_type(TemporaryFile(mode="w+b"), io.BufferedRandom) assert_type(TemporaryFile(mode="wb"), io.BufferedWriter) assert_type(TemporaryFile(mode="rb"), io.BufferedReader) - assert_type(TemporaryFile("wb"), io.BufferedWriter) - assert_type(TemporaryFile("wb", 0), io.FileIO) + assert_type(TemporaryFile(buffering=0), io.FileIO)