From f4e3657c573b668a3e26c1c29a9d4d49c8579f0b Mon Sep 17 00:00:00 2001 From: Roy Williams Date: Mon, 6 Nov 2017 10:28:08 -0800 Subject: [PATCH] Allow subprocess functions to accept PathLike objects in 3.6 and above (#1713) * Allow subprocess functions to accept PathLike objects in 3.6 and above * Split up _PATH from _TXT in subprocess --- stdlib/3/subprocess.pyi | 57 +++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/stdlib/3/subprocess.pyi b/stdlib/3/subprocess.pyi index c0a861333..8bb75ab23 100644 --- a/stdlib/3/subprocess.pyi +++ b/stdlib/3/subprocess.pyi @@ -7,7 +7,14 @@ from types import TracebackType _FILE = Union[None, int, IO[Any]] _TXT = Union[bytes, Text] -_CMD = Union[_TXT, Sequence[_TXT]] +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PATH = Union[bytes, Text, _PathLike] +else: + _PATH = Union[bytes, Text] +# Python 3.6 does't support _CMD being a single PathLike. +# See: https://bugs.python.org/issue31961 +_CMD = Union[_TXT, Sequence[_PATH]] _ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] if sys.version_info >= (3, 5): @@ -31,14 +38,14 @@ if sys.version_info >= (3, 5): input: Optional[_TXT] = ..., check: bool = ..., bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -56,14 +63,14 @@ if sys.version_info >= (3, 5): input: Optional[_TXT] = ..., check: bool = ..., bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -77,14 +84,14 @@ if sys.version_info >= (3, 3): # 3.3 added timeout def call(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -96,14 +103,14 @@ if sys.version_info >= (3, 3): else: def call(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -117,14 +124,14 @@ if sys.version_info >= (3, 3): # 3.3 added timeout def check_call(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -136,14 +143,14 @@ if sys.version_info >= (3, 3): else: def check_call(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stdout: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -156,13 +163,13 @@ if sys.version_info >= (3, 6): # 3.6 added encoding and errors def check_output(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -180,13 +187,13 @@ elif sys.version_info >= (3, 4): # 3.4 added input def check_output(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -201,13 +208,13 @@ elif sys.version_info >= (3, 3): # 3.3 added timeout def check_output(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -221,13 +228,13 @@ else: # Same args as Popen.__init__, except for stdout def check_output(args: _CMD, bufsize: int = ..., - executable: _TXT = ..., + executable: _PATH = ..., stdin: _FILE = ..., stderr: _FILE = ..., preexec_fn: Callable[[], Any] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Any = ..., @@ -277,14 +284,14 @@ class Popen: def __init__(self, args: _CMD, bufsize: int = ..., - executable: Optional[_TXT] = ..., + executable: Optional[_PATH] = ..., stdin: Optional[_FILE] = ..., stdout: Optional[_FILE] = ..., stderr: Optional[_FILE] = ..., preexec_fn: Optional[Callable[[], Any]] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Optional[Any] = ..., @@ -299,14 +306,14 @@ class Popen: def __init__(self, args: _CMD, bufsize: int = ..., - executable: Optional[_TXT] = ..., + executable: Optional[_PATH] = ..., stdin: Optional[_FILE] = ..., stdout: Optional[_FILE] = ..., stderr: Optional[_FILE] = ..., preexec_fn: Optional[Callable[[], Any]] = ..., close_fds: bool = ..., shell: bool = ..., - cwd: Optional[_TXT] = ..., + cwd: Optional[_PATH] = ..., env: Optional[_ENV] = ..., universal_newlines: bool = ..., startupinfo: Optional[Any] = ...,