From 76f9fdba4a5f13832a44b128ba440689111067e9 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 17:59:30 -0400 Subject: [PATCH 1/6] filecmp can handle pathlib.Path --- stdlib/2and3/filecmp.pyi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/2and3/filecmp.pyi b/stdlib/2and3/filecmp.pyi index cc0a621a0870..917b5b04aae1 100644 --- a/stdlib/2and3/filecmp.pyi +++ b/stdlib/2and3/filecmp.pyi @@ -1,5 +1,6 @@ # Stubs for filecmp (Python 2/3) import sys +import os from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Sequence, Tuple, Union, Text DEFAULT_IGNORES = ... # type: List[str] @@ -9,7 +10,7 @@ def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... class dircmp(Generic[AnyStr]): - def __init__(self, a: AnyStr, b: AnyStr, + def __init__(self, a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], ignore: Optional[Sequence[AnyStr]] = ..., hide: Optional[Sequence[AnyStr]] = ...) -> None: ... From 26cb0d421015e5d574e127f4ddb91de2d8d3275b Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 18:21:15 -0400 Subject: [PATCH 2/6] filecmp.cmp also handles pathlib.Path --- stdlib/2and3/filecmp.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2and3/filecmp.pyi b/stdlib/2and3/filecmp.pyi index 917b5b04aae1..8749fbc66bf1 100644 --- a/stdlib/2and3/filecmp.pyi +++ b/stdlib/2and3/filecmp.pyi @@ -5,7 +5,7 @@ from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Se DEFAULT_IGNORES = ... # type: List[str] -def cmp(f1: Union[bytes, Text], f2: Union[bytes, Text], shallow: Union[int, bool] = ...) -> bool: ... +def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], shallow: Union[int, bool] = ...) -> bool: ... def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... From 96f612ffda4d496eb337f033e2a7d9a274f42482 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 18:26:22 -0400 Subject: [PATCH 3/6] filecmp.cmpfiles, too --- stdlib/2and3/filecmp.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2and3/filecmp.pyi b/stdlib/2and3/filecmp.pyi index 8749fbc66bf1..84bc7eae761c 100644 --- a/stdlib/2and3/filecmp.pyi +++ b/stdlib/2and3/filecmp.pyi @@ -6,7 +6,7 @@ from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Se DEFAULT_IGNORES = ... # type: List[str] def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], shallow: Union[int, bool] = ...) -> bool: ... -def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], +def cmpfiles(a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], common: Iterable[Union[AnyStr, os.PathLike]], shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... class dircmp(Generic[AnyStr]): From d36f1140a631223df5ce9eac97fce7e00f7223e1 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 23:31:37 -0400 Subject: [PATCH 4/6] similarly update tempfile --- stdlib/3/tempfile.pyi | 47 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/stdlib/3/tempfile.pyi b/stdlib/3/tempfile.pyi index 5900f25af78e..d2542b3454a6 100644 --- a/stdlib/3/tempfile.pyi +++ b/stdlib/3/tempfile.pyi @@ -4,8 +4,9 @@ # based on http://docs.python.org/3.3/library/tempfile.html import sys +import os from types import TracebackType -from typing import Any, AnyStr, Generic, IO, Optional, Tuple, Type +from typing import Any, AnyStr, Generic, IO, Optional, Tuple, Type, Union # global variables TMP_MAX: int @@ -14,6 +15,48 @@ template = ... # type: str if sys.version_info >= (3, 5): + def gettempdirb() -> bytes: ... + def gettempprefixb() -> bytes: ... + +if sys.version_info >= (3, 6): + def TemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ... + ) -> IO[Any]: + ... + def NamedTemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ..., delete: bool =... + ) -> IO[Any]: + ... + def SpooledTemporaryFile( + max_size: int = ..., mode: str = ..., buffering: int = ..., + encoding: str = ..., newline: str = ..., suffix: Optional[AnyStr] = ..., + prefix: Optional[AnyStr] = ..., dir: Optional[Union[AnyStr, os.PathLike]] = ... + ) -> IO[Any]: + ... + + class TemporaryDirectory(Generic[AnyStr]): + name = ... # type: str + def __init__(self, suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> AnyStr: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + def mkstemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ..., + text: bool = ...) -> Tuple[int, AnyStr]: ... + def mkdtemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ...) -> AnyStr: ... + def mktemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[Union[AnyStr, os.PathLike]] = ...) -> AnyStr: ... + +elif sys.version_info >= (3, 5): def TemporaryFile( mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., @@ -49,8 +92,6 @@ if sys.version_info >= (3, 5): dir: Optional[str] = ...) -> AnyStr: ... def mktemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... - def gettempdirb() -> bytes: ... - def gettempprefixb() -> bytes: ... else: def TemporaryFile( mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., From 84e1a45820421eb6fee72d39d0df749a4dc8a1f2 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 23:38:02 -0400 Subject: [PATCH 5/6] conditional if py >= 3.6 --- stdlib/2and3/filecmp.pyi | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/stdlib/2and3/filecmp.pyi b/stdlib/2and3/filecmp.pyi index 84bc7eae761c..dacc9829e6dd 100644 --- a/stdlib/2and3/filecmp.pyi +++ b/stdlib/2and3/filecmp.pyi @@ -5,14 +5,27 @@ from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Se DEFAULT_IGNORES = ... # type: List[str] -def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], shallow: Union[int, bool] = ...) -> bool: ... -def cmpfiles(a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], common: Iterable[Union[AnyStr, os.PathLike]], - shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... +if sys.version_info >= (3, 6): + def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], + shallow: Union[int, bool] = ...) -> bool: ... + def cmpfiles(a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], common: Iterable[Union[AnyStr, os.PathLike]], + shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... +else: + def cmp(f1: Union[bytes, Text], f2: Union[bytes, Text], shallow: Union[int, bool] = ...) -> bool: ... + def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], + shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... + class dircmp(Generic[AnyStr]): - def __init__(self, a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], - ignore: Optional[Sequence[AnyStr]] = ..., - hide: Optional[Sequence[AnyStr]] = ...) -> None: ... + + if sys.version_info >= (3, 6): + def __init__(self, a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], + ignore: Optional[Sequence[AnyStr]] = ..., + hide: Optional[Sequence[AnyStr]] = ...) -> None: ... + else: + def __init__(self, a: AnyStr, b: AnyStr, + ignore: Optional[Sequence[AnyStr]] = ..., + hide: Optional[Sequence[AnyStr]] = ...) -> None: ... left = ... # type: AnyStr right = ... # type: AnyStr From 3e64cad5ccf14ef54fb1b0e6ebbd70869022d0fa Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Wed, 20 Jun 2018 23:51:05 -0400 Subject: [PATCH 6/6] deblank --- stdlib/2and3/filecmp.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/2and3/filecmp.pyi b/stdlib/2and3/filecmp.pyi index dacc9829e6dd..1ce45080f6ed 100644 --- a/stdlib/2and3/filecmp.pyi +++ b/stdlib/2and3/filecmp.pyi @@ -6,7 +6,7 @@ from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Se DEFAULT_IGNORES = ... # type: List[str] if sys.version_info >= (3, 6): - def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], + def cmp(f1: Union[bytes, Text, os.PathLike], f2: Union[bytes, Text, os.PathLike], shallow: Union[int, bool] = ...) -> bool: ... def cmpfiles(a: Union[AnyStr, os.PathLike], b: Union[AnyStr, os.PathLike], common: Iterable[Union[AnyStr, os.PathLike]], shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ...