diff --git a/stdlib/2/os/path.pyi b/stdlib/2/os/path.pyi index bfd88a454622..7488956f2671 100644 --- a/stdlib/2/os/path.pyi +++ b/stdlib/2/os/path.pyi @@ -3,8 +3,14 @@ # based on http://docs.python.org/3.2/library/os.path.html # adapted for 2.7 by Michal Pokorny +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable +) -from typing import overload, List, Any, Tuple, BinaryIO, TextIO, TypeVar, Callable, AnyStr +_T = TypeVar('_T') +_PathType = Union[bytes, Text] # ----- os.path variables ----- supports_unicode_filenames = False @@ -22,25 +28,32 @@ devnull = ... # type: str def abspath(path: AnyStr) -> AnyStr: ... def basename(path: AnyStr) -> AnyStr: ... -def commonprefix(list: List[AnyStr]) -> AnyStr: ... +if sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[AnyStr]) -> Any: ... + def dirname(path: AnyStr) -> AnyStr: ... -def exists(path: unicode) -> bool: ... -def lexists(path: unicode) -> bool: ... +def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... def expanduser(path: AnyStr) -> AnyStr: ... def expandvars(path: AnyStr) -> AnyStr: ... # These return float if os.stat_float_times() == True, # but int is a subclass of float. -def getatime(path: unicode) -> float: ... -def getmtime(path: unicode) -> float: ... -def getctime(path: unicode) -> float: ... +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... -def getsize(path: unicode) -> int: ... -def isabs(path: unicode) -> bool: ... -def isfile(path: unicode) -> bool: ... -def isdir(path: unicode) -> bool: ... -def islink(path: unicode) -> bool: ... -def ismount(path: unicode) -> bool: ... +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... @@ -49,7 +62,7 @@ def normpath(path: AnyStr) -> AnyStr: ... def realpath(path: AnyStr) -> AnyStr: ... def relpath(path: AnyStr, start: AnyStr = ...) -> AnyStr: ... -def samefile(path1: unicode, path2: unicode) -> bool: ... +def samefile(path1: _PathType, path2: _PathType) -> bool: ... def sameopenfile(fp1: int, fp2: int) -> bool: ... # TODO # def samestat(stat1: stat_result, @@ -61,5 +74,5 @@ def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # Windows only, deprecated -_T = TypeVar('_T') -def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/stdlib/3/os/path.pyi b/stdlib/3/os/path.pyi index c695c5738ac4..7488956f2671 100644 --- a/stdlib/3/os/path.pyi +++ b/stdlib/3/os/path.pyi @@ -2,9 +2,15 @@ # Ron Murawski # based on http://docs.python.org/3.2/library/os.path.html - +# adapted for 2.7 by Michal Pokorny import sys -from typing import overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable +) + +_T = TypeVar('_T') +_PathType = Union[bytes, Text] # ----- os.path variables ----- supports_unicode_filenames = False @@ -25,26 +31,29 @@ def basename(path: AnyStr) -> AnyStr: ... if sys.version_info >= (3, 5): def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... -# NOTE: Empty List[bytes] results in '' (str) => fall back to Any return type. -def commonprefix(list: List[AnyStr]) -> Any: ... +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[AnyStr]) -> Any: ... + def dirname(path: AnyStr) -> AnyStr: ... -def exists(path: AnyStr) -> bool: ... -def lexists(path: AnyStr) -> bool: ... +def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... def expanduser(path: AnyStr) -> AnyStr: ... def expandvars(path: AnyStr) -> AnyStr: ... +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... -# These return float if os.stat_float_times() == True -def getatime(path: AnyStr) -> Any: ... -def getmtime(path: AnyStr) -> Any: ... -def getctime(path: AnyStr) -> Any: ... - -def getsize(path: AnyStr) -> int: ... -def isabs(path: AnyStr) -> bool: ... -def isfile(path: AnyStr) -> bool: ... -def isdir(path: AnyStr) -> bool: ... -def islink(path: AnyStr) -> bool: ... -def ismount(path: AnyStr) -> bool: ... +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... @@ -53,8 +62,9 @@ def normpath(path: AnyStr) -> AnyStr: ... def realpath(path: AnyStr) -> AnyStr: ... def relpath(path: AnyStr, start: AnyStr = ...) -> AnyStr: ... -def samefile(path1: AnyStr, path2: AnyStr) -> bool: ... +def samefile(path1: _PathType, path2: _PathType) -> bool: ... def sameopenfile(fp1: int, fp2: int) -> bool: ... +# TODO # def samestat(stat1: stat_result, # stat2: stat_result) -> bool: ... # Unix only @@ -62,4 +72,7 @@ def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... -# def splitunc(path: str) -> Tuple[str, str]: ... # Windows only, deprecated +def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # Windows only, deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ...