From 5cf2fb703a645190f56efc88e010c5f47d15371d Mon Sep 17 00:00:00 2001 From: Shantanu Date: Wed, 27 May 2020 20:22:01 -0700 Subject: [PATCH] tempfile: fix TemporaryFile on Windows (#4112) Co-authored-by: hauntsaninja <> --- stdlib/3/tempfile.pyi | 161 ++++++++++++++-------------- tests/stubtest_whitelists/win32.txt | 1 - 2 files changed, 82 insertions(+), 80 deletions(-) diff --git a/stdlib/3/tempfile.pyi b/stdlib/3/tempfile.pyi index 4df4ac58a..a50da2961 100644 --- a/stdlib/3/tempfile.pyi +++ b/stdlib/3/tempfile.pyi @@ -27,7 +27,7 @@ else: if sys.version_info >= (3, 8): @overload - def TemporaryFile( + def NamedTemporaryFile( mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], buffering: int = ..., encoding: Optional[str] = ..., @@ -35,11 +35,12 @@ if sys.version_info >= (3, 8): suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., *, errors: Optional[str] = ... ) -> IO[str]: ... @overload - def TemporaryFile( + def NamedTemporaryFile( mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., buffering: int = ..., encoding: Optional[str] = ..., @@ -47,11 +48,12 @@ if sys.version_info >= (3, 8): suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., *, errors: Optional[str] = ... ) -> IO[bytes]: ... @overload - def TemporaryFile( + def NamedTemporaryFile( mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., @@ -59,12 +61,13 @@ if sys.version_info >= (3, 8): suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., *, errors: Optional[str] = ... ) -> IO[Any]: ... else: @overload - def TemporaryFile( + def NamedTemporaryFile( mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], buffering: int = ..., encoding: Optional[str] = ..., @@ -72,9 +75,10 @@ else: suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., ) -> IO[str]: ... @overload - def TemporaryFile( + def NamedTemporaryFile( mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., buffering: int = ..., encoding: Optional[str] = ..., @@ -82,9 +86,10 @@ else: suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., ) -> IO[bytes]: ... @overload - def TemporaryFile( + def NamedTemporaryFile( mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., @@ -92,82 +97,80 @@ else: suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[_DirT[AnyStr]] = ..., + delete: bool = ..., ) -> IO[Any]: ... -if sys.version_info >= (3, 8): - @overload - def NamedTemporaryFile( - mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - *, - errors: Optional[str] = ... - ) -> IO[str]: ... - @overload - def NamedTemporaryFile( - mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - *, - errors: Optional[str] = ... - ) -> IO[bytes]: ... - @overload - def NamedTemporaryFile( - mode: str = ..., - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - *, - errors: Optional[str] = ... - ) -> IO[Any]: ... +if sys.platform == "win32": + TemporaryFile = NamedTemporaryFile else: - @overload - def NamedTemporaryFile( - mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - ) -> IO[str]: ... - @overload - def NamedTemporaryFile( - mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - ) -> IO[bytes]: ... - @overload - def NamedTemporaryFile( - mode: str = ..., - buffering: int = ..., - encoding: Optional[str] = ..., - newline: Optional[str] = ..., - suffix: Optional[AnyStr] = ..., - prefix: Optional[AnyStr] = ..., - dir: Optional[_DirT[AnyStr]] = ..., - delete: bool = ..., - ) -> IO[Any]: ... + if sys.version_info >= (3, 8): + @overload + def TemporaryFile( + mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + *, + errors: Optional[str] = ... + ) -> IO[str]: ... + @overload + def TemporaryFile( + mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + *, + errors: Optional[str] = ... + ) -> IO[bytes]: ... + @overload + def TemporaryFile( + mode: str = ..., + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + *, + errors: Optional[str] = ... + ) -> IO[Any]: ... + else: + @overload + def TemporaryFile( + mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+", "rt", "wt", "at", "xt", "r+t", "w+t", "a+t", "x+t"], + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + ) -> IO[str]: ... + @overload + def TemporaryFile( + mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"] = ..., + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + ) -> IO[bytes]: ... + @overload + def TemporaryFile( + mode: str = ..., + buffering: int = ..., + encoding: Optional[str] = ..., + newline: Optional[str] = ..., + suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., + dir: Optional[_DirT[AnyStr]] = ..., + ) -> IO[Any]: ... # It does not actually derive from IO[AnyStr], but it does implement the # protocol. diff --git a/tests/stubtest_whitelists/win32.txt b/tests/stubtest_whitelists/win32.txt index 60267c655..91c8e98a9 100644 --- a/tests/stubtest_whitelists/win32.txt +++ b/tests/stubtest_whitelists/win32.txt @@ -6,7 +6,6 @@ posixpath.altsep # Type mismatch posixpath.realpath # Parameter name mismatch sys.abiflags # Not present sys.setdlopenflags # Not present -tempfile.TemporaryFile # TODO: Weird inconsistency urllib.request.pathname2url # Parameter name mismatch urllib.request.url2pathname # Same winreg.[A-Za-z]+ # Should be made positional only