From 31685f762ceb888c42ee2b0d6ccc7608c4842fda Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sat, 5 Jan 2019 01:28:31 -0800 Subject: [PATCH 1/4] Use overlapped signatures of _winapi functions For https://github.com/python/mypy/pull/6148 --- stdlib/3/_winapi.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/3/_winapi.pyi b/stdlib/3/_winapi.pyi index 24767ea5073b..cd7a2bd81e38 100644 --- a/stdlib/3/_winapi.pyi +++ b/stdlib/3/_winapi.pyi @@ -45,7 +45,7 @@ WAIT_OBJECT_0: int WAIT_TIMEOUT: int def CloseHandle(handle: int) -> None: ... -def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> None: ... +def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> Overlapped: ... def CreateFile(file_name: str, desired_access: int, share_mode: int, security_attributes: int, creation_disposition: int, flags_and_attributes: int, template_file: int) -> int: ... def CreateJunction(src_path: str, dest_path: str) -> None: ... def CreateNamedPipe(name: str, open_mode: int, pipe_mode: int, max_instances: int, out_buffer_size: int, in_buffer_size: int, default_timeout: int, security_attributes: int) -> int: ... @@ -63,13 +63,13 @@ def GetStdHandle(std_handle: int) -> int: ... def GetVersion() -> int: ... def OpenProcess(desired_access: int, inherit_handle: bool, process_id: int) -> int: ... def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[bytes, int, int]]: ... -def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Tuple[bytes, int]: ... +def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... def SetNamedPipeHandleState(named_pipe: int, mode: Optional[int], max_collection_count: Optional[int], collect_data_timeout: Optional[int]) -> None: ... def TerminateProcess(handle: int, exit_code: int) -> None: ... def WaitForMultipleObjects(handle_seq: Sequence[int], wait_flag: bool, milliseconds: int = ...) -> int: ... def WaitForSingleObject(handle: int, milliseconds: int) -> int: ... def WaitNamedPipe(name: str, timeout: int) -> None: ... -def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...): ... +def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... class Overlapped: event: int = ... From 40b3a4679c77d32606a3ea27bf3ba5350344e297 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 6 Jan 2019 15:02:20 -0800 Subject: [PATCH 2/4] Overload _winapi functions for overlapped I/O --- stdlib/3/_winapi.pyi | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/stdlib/3/_winapi.pyi b/stdlib/3/_winapi.pyi index cd7a2bd81e38..ee57ff30c174 100644 --- a/stdlib/3/_winapi.pyi +++ b/stdlib/3/_winapi.pyi @@ -1,4 +1,4 @@ -from typing import Any, Union, Tuple, Optional, Dict, NoReturn, Sequence +from typing import Any, Union, Tuple, Optional, overload, Dict, NoReturn, Sequence CREATE_NEW_CONSOLE: int CREATE_NEW_PROCESS_GROUP: int @@ -45,7 +45,12 @@ WAIT_OBJECT_0: int WAIT_TIMEOUT: int def CloseHandle(handle: int) -> None: ... + +@overload def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> Overlapped: ... +@overload +def ConnectNamedPipe(handle: int) -> None: ... + def CreateFile(file_name: str, desired_access: int, share_mode: int, security_attributes: int, creation_disposition: int, flags_and_attributes: int, template_file: int) -> int: ... def CreateJunction(src_path: str, dest_path: str) -> None: ... def CreateNamedPipe(name: str, open_mode: int, pipe_mode: int, max_instances: int, out_buffer_size: int, in_buffer_size: int, default_timeout: int, security_attributes: int) -> int: ... @@ -63,13 +68,23 @@ def GetStdHandle(std_handle: int) -> int: ... def GetVersion() -> int: ... def OpenProcess(desired_access: int, inherit_handle: bool, process_id: int) -> int: ... def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[bytes, int, int]]: ... + +@overload def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... +@overload +def ReadFile(handle: int, size: int) -> Tuple[int, int]: ... + def SetNamedPipeHandleState(named_pipe: int, mode: Optional[int], max_collection_count: Optional[int], collect_data_timeout: Optional[int]) -> None: ... def TerminateProcess(handle: int, exit_code: int) -> None: ... def WaitForMultipleObjects(handle_seq: Sequence[int], wait_flag: bool, milliseconds: int = ...) -> int: ... def WaitForSingleObject(handle: int, milliseconds: int) -> int: ... def WaitNamedPipe(name: str, timeout: int) -> None: ... + +@overload def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... +@overload +def WriteFile(handle: int, buffer: bytes) -> Tuple[bytes, int]: ... + class Overlapped: event: int = ... From 9d72e551c74ce2d5613b4b5855713dad501227ca Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 6 Jan 2019 15:10:31 -0800 Subject: [PATCH 3/4] Change return types to Any for overload functions --- stdlib/3/_winapi.pyi | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/stdlib/3/_winapi.pyi b/stdlib/3/_winapi.pyi index ee57ff30c174..ad090fff0b26 100644 --- a/stdlib/3/_winapi.pyi +++ b/stdlib/3/_winapi.pyi @@ -46,8 +46,9 @@ WAIT_TIMEOUT: int def CloseHandle(handle: int) -> None: ... +# TODO: once literal types are supported, overload with Literal[True/False] @overload -def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> Overlapped: ... +def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> Any: ... @overload def ConnectNamedPipe(handle: int) -> None: ... @@ -69,8 +70,9 @@ def GetVersion() -> int: ... def OpenProcess(desired_access: int, inherit_handle: bool, process_id: int) -> int: ... def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[bytes, int, int]]: ... +# TODO: once literal types are supported, overload with Literal[True/False] @overload -def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... +def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Any: ... @overload def ReadFile(handle: int, size: int) -> Tuple[int, int]: ... @@ -80,8 +82,9 @@ def WaitForMultipleObjects(handle_seq: Sequence[int], wait_flag: bool, milliseco def WaitForSingleObject(handle: int, milliseconds: int) -> int: ... def WaitNamedPipe(name: str, timeout: int) -> None: ... +# TODO: once literal types are supported, overload with Literal[True/False] @overload -def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...) -> Tuple[Overlapped, int]: ... +def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...) -> Any: ... @overload def WriteFile(handle: int, buffer: bytes) -> Tuple[bytes, int]: ... From 8fb32a3027b0acb6cc10c049d4bda573f554b899 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 6 Jan 2019 15:28:42 -0800 Subject: [PATCH 4/4] Remove overlap from signatures --- stdlib/3/_winapi.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/3/_winapi.pyi b/stdlib/3/_winapi.pyi index ad090fff0b26..af6c9231b05c 100644 --- a/stdlib/3/_winapi.pyi +++ b/stdlib/3/_winapi.pyi @@ -48,7 +48,7 @@ def CloseHandle(handle: int) -> None: ... # TODO: once literal types are supported, overload with Literal[True/False] @overload -def ConnectNamedPipe(handle: int, overlapped: Union[int, bool] = ...) -> Any: ... +def ConnectNamedPipe(handle: int, overlapped: Union[int, bool]) -> Any: ... @overload def ConnectNamedPipe(handle: int) -> None: ... @@ -72,7 +72,7 @@ def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[ # TODO: once literal types are supported, overload with Literal[True/False] @overload -def ReadFile(handle: int, size: int, overlapped: Union[int, bool] = ...) -> Any: ... +def ReadFile(handle: int, size: int, overlapped: Union[int, bool]) -> Any: ... @overload def ReadFile(handle: int, size: int) -> Tuple[int, int]: ... @@ -84,7 +84,7 @@ def WaitNamedPipe(name: str, timeout: int) -> None: ... # TODO: once literal types are supported, overload with Literal[True/False] @overload -def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool] = ...) -> Any: ... +def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool]) -> Any: ... @overload def WriteFile(handle: int, buffer: bytes) -> Tuple[bytes, int]: ...