From 09fa9612b11de930efca4cb4416011885b957e1f Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 05:26:46 +0100 Subject: [PATCH 01/10] stdlib: Add urllib.parse.unwrap(url) --- stdlib/urllib/parse.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/urllib/parse.pyi b/stdlib/urllib/parse.pyi index ed5b127b5b89..0a92585d6372 100644 --- a/stdlib/urllib/parse.pyi +++ b/stdlib/urllib/parse.pyi @@ -168,3 +168,4 @@ def urlunparse(components: Sequence[AnyStr | None]) -> AnyStr: ... def urlunsplit(components: tuple[AnyStr | None, AnyStr | None, AnyStr | None, AnyStr | None, AnyStr | None]) -> AnyStr: ... @overload def urlunsplit(components: Sequence[AnyStr | None]) -> AnyStr: ... +def unwrap(url: str) -> str: ... From 7f9579e22921be4c55d306e0070a920ad0813879 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 05:38:09 +0100 Subject: [PATCH 02/10] stdlib: Add time.pthread_getcpuclockid(thread_id) --- stdlib/time.pyi | 3 +++ tests/stubtest_allowlists/linux-py310.txt | 1 - tests/stubtest_allowlists/linux-py37.txt | 3 --- tests/stubtest_allowlists/linux-py38.txt | 1 - tests/stubtest_allowlists/linux-py39.txt | 1 - 5 files changed, 3 insertions(+), 6 deletions(-) diff --git a/stdlib/time.pyi b/stdlib/time.pyi index 815171f0c7dd..c1a8727b1ea0 100644 --- a/stdlib/time.pyi +++ b/stdlib/time.pyi @@ -100,6 +100,9 @@ if sys.version_info >= (3, 7): def clock_gettime_ns(clock_id: int) -> int: ... def clock_settime_ns(clock_id: int, time: int) -> int: ... + if sys.platform == "linux": + def pthread_getcpuclockid(thread_id: int) -> int: ... + def monotonic_ns() -> int: ... def perf_counter_ns() -> int: ... def process_time_ns() -> int: ... diff --git a/tests/stubtest_allowlists/linux-py310.txt b/tests/stubtest_allowlists/linux-py310.txt index d435cdd0a567..fc3ceeb4c706 100644 --- a/tests/stubtest_allowlists/linux-py310.txt +++ b/tests/stubtest_allowlists/linux-py310.txt @@ -38,4 +38,3 @@ posix.eventfd_read posix.eventfd_write posix.pidfd_open posix.splice -time.pthread_getcpuclockid diff --git a/tests/stubtest_allowlists/linux-py37.txt b/tests/stubtest_allowlists/linux-py37.txt index 65b1d3a20294..15011803b089 100644 --- a/tests/stubtest_allowlists/linux-py37.txt +++ b/tests/stubtest_allowlists/linux-py37.txt @@ -1,6 +1,3 @@ ctypes.wintypes ftplib.FTP.trust_server_pasv_ipv4_address # Dangerous to use, intentionally undocumented, intentionally missing from typeshed. #6154 pwd.getpwnam - -# Exists at runtime, but missing from stubs -time.pthread_getcpuclockid diff --git a/tests/stubtest_allowlists/linux-py38.txt b/tests/stubtest_allowlists/linux-py38.txt index 1b2d122b2cbf..639de17fc983 100644 --- a/tests/stubtest_allowlists/linux-py38.txt +++ b/tests/stubtest_allowlists/linux-py38.txt @@ -3,4 +3,3 @@ select.epoll.register # Exists at runtime, but missing from stubs os.copy_file_range posix.copy_file_range -time.pthread_getcpuclockid diff --git a/tests/stubtest_allowlists/linux-py39.txt b/tests/stubtest_allowlists/linux-py39.txt index 125db92f25ae..1975288fac14 100644 --- a/tests/stubtest_allowlists/linux-py39.txt +++ b/tests/stubtest_allowlists/linux-py39.txt @@ -6,4 +6,3 @@ os.copy_file_range os.pidfd_open posix.copy_file_range posix.pidfd_open -time.pthread_getcpuclockid From 0fed369649dcb47a2adc12b565e5bc78df471848 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:02:15 +0100 Subject: [PATCH 03/10] stdlib: Add os.pidfd_open(pid) --- stdlib/os/__init__.pyi | 3 +++ stdlib/posix.pyi | 3 ++- tests/stubtest_allowlists/linux-py310.txt | 2 -- tests/stubtest_allowlists/linux-py39.txt | 2 -- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stdlib/os/__init__.pyi b/stdlib/os/__init__.pyi index d38148e7921f..9506629f0c83 100644 --- a/stdlib/os/__init__.pyi +++ b/stdlib/os/__init__.pyi @@ -1022,3 +1022,6 @@ if sys.version_info >= (3, 8): if sys.version_info >= (3, 9): def waitstatus_to_exitcode(status: int) -> int: ... + + if sys.platform == "linux": + def pidfd_open(pid: int, flags: int = ...) -> int: ... diff --git a/stdlib/posix.pyi b/stdlib/posix.pyi index 9f658039bcf2..b0b3fc4d2d2c 100644 --- a/stdlib/posix.pyi +++ b/stdlib/posix.pyi @@ -273,7 +273,8 @@ if sys.platform != "win32": from os import CLD_KILLED as CLD_KILLED, CLD_STOPPED as CLD_STOPPED, waitstatus_to_exitcode as waitstatus_to_exitcode if sys.platform == "linux": - from os import P_PIDFD as P_PIDFD + from os import P_PIDFD as P_PIDFD, pidfd_open as pidfd_open + if sys.version_info >= (3, 8): from os import ( POSIX_SPAWN_CLOSE as POSIX_SPAWN_CLOSE, diff --git a/tests/stubtest_allowlists/linux-py310.txt b/tests/stubtest_allowlists/linux-py310.txt index fc3ceeb4c706..48bc781a15c8 100644 --- a/tests/stubtest_allowlists/linux-py310.txt +++ b/tests/stubtest_allowlists/linux-py310.txt @@ -28,7 +28,6 @@ os.copy_file_range os.eventfd os.eventfd_read os.eventfd_write -os.pidfd_open os.splice posix.EFD_[A-Z]+ posix.SPLICE_[A-Z_]+ @@ -36,5 +35,4 @@ posix.copy_file_range posix.eventfd posix.eventfd_read posix.eventfd_write -posix.pidfd_open posix.splice diff --git a/tests/stubtest_allowlists/linux-py39.txt b/tests/stubtest_allowlists/linux-py39.txt index 1975288fac14..eb8a71b493ba 100644 --- a/tests/stubtest_allowlists/linux-py39.txt +++ b/tests/stubtest_allowlists/linux-py39.txt @@ -3,6 +3,4 @@ select.epoll.register # Exists at runtime, but missing from stubs os.copy_file_range -os.pidfd_open posix.copy_file_range -posix.pidfd_open From f718e2014344fa46ec2ef73d58c39aee94bdc78d Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:03:54 +0100 Subject: [PATCH 04/10] stdlib: Add signal.pidfd_send_signal(pidfd, sig) --- stdlib/signal.pyi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdlib/signal.pyi b/stdlib/signal.pyi index a6bc2daad4d0..50f1e0ff0cf1 100644 --- a/stdlib/signal.pyi +++ b/stdlib/signal.pyi @@ -176,3 +176,7 @@ if sys.version_info >= (3, 7): else: def set_wakeup_fd(fd: int) -> int: ... + +if sys.version_info >= (3, 9): + if sys.platform == "linux": + def pidfd_send_signal(__pidfd: int, __sig: int, __siginfo: None = ..., __flags: int = ...) -> None: ... From 9fd73c8e91d8f029fc557e8fffd479c5a62832d6 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:13:34 +0100 Subject: [PATCH 05/10] stdlib: Add os.copy_file_range(src, dst, count) --- stdlib/os/__init__.pyi | 3 +++ stdlib/posix.pyi | 1 + tests/stubtest_allowlists/linux-py310.txt | 2 -- tests/stubtest_allowlists/linux-py38.txt | 4 ---- tests/stubtest_allowlists/linux-py39.txt | 4 ---- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/stdlib/os/__init__.pyi b/stdlib/os/__init__.pyi index 9506629f0c83..892277a0dd5c 100644 --- a/stdlib/os/__init__.pyi +++ b/stdlib/os/__init__.pyi @@ -1019,6 +1019,9 @@ if sys.version_info >= (3, 8): MFD_HUGE_2GB: int MFD_HUGE_16GB: int def memfd_create(name: str, flags: int = ...) -> int: ... + def copy_file_range( + src: int, dst: int, count: int, offset_src: int | None = ..., offset_dst: int | None = ... + ) -> int: ... if sys.version_info >= (3, 9): def waitstatus_to_exitcode(status: int) -> int: ... diff --git a/stdlib/posix.pyi b/stdlib/posix.pyi index b0b3fc4d2d2c..5dba5b36e3d2 100644 --- a/stdlib/posix.pyi +++ b/stdlib/posix.pyi @@ -303,6 +303,7 @@ if sys.platform != "win32": MFD_HUGE_MASK as MFD_HUGE_MASK, MFD_HUGE_SHIFT as MFD_HUGE_SHIFT, MFD_HUGETLB as MFD_HUGETLB, + copy_file_range as copy_file_range, memfd_create as memfd_create, ) if sys.version_info >= (3, 7): diff --git a/tests/stubtest_allowlists/linux-py310.txt b/tests/stubtest_allowlists/linux-py310.txt index 48bc781a15c8..239cddc0a336 100644 --- a/tests/stubtest_allowlists/linux-py310.txt +++ b/tests/stubtest_allowlists/linux-py310.txt @@ -24,14 +24,12 @@ os.EFD_SEMAPHORE os.SPLICE_F_MORE os.SPLICE_F_MOVE os.SPLICE_F_NONBLOCK -os.copy_file_range os.eventfd os.eventfd_read os.eventfd_write os.splice posix.EFD_[A-Z]+ posix.SPLICE_[A-Z_]+ -posix.copy_file_range posix.eventfd posix.eventfd_read posix.eventfd_write diff --git a/tests/stubtest_allowlists/linux-py38.txt b/tests/stubtest_allowlists/linux-py38.txt index 639de17fc983..2c835817c208 100644 --- a/tests/stubtest_allowlists/linux-py38.txt +++ b/tests/stubtest_allowlists/linux-py38.txt @@ -1,5 +1 @@ select.epoll.register - -# Exists at runtime, but missing from stubs -os.copy_file_range -posix.copy_file_range diff --git a/tests/stubtest_allowlists/linux-py39.txt b/tests/stubtest_allowlists/linux-py39.txt index eb8a71b493ba..71f4eb92dd40 100644 --- a/tests/stubtest_allowlists/linux-py39.txt +++ b/tests/stubtest_allowlists/linux-py39.txt @@ -1,6 +1,2 @@ (os|posix).sendfile select.epoll.register - -# Exists at runtime, but missing from stubs -os.copy_file_range -posix.copy_file_range From c41027c28e3c548c16f10d9c91147145c3232338 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:22:24 +0100 Subject: [PATCH 06/10] stdlib: Add email.iterators._structure(msg) --- stdlib/email/iterators.pyi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdlib/email/iterators.pyi b/stdlib/email/iterators.pyi index 4bc81c09326a..ad5517712d25 100644 --- a/stdlib/email/iterators.pyi +++ b/stdlib/email/iterators.pyi @@ -1,3 +1,4 @@ +from _typeshed import SupportsWrite from email.message import Message from typing import Iterator @@ -6,3 +7,6 @@ __all__ = ["body_line_iterator", "typed_subpart_iterator", "walk"] def body_line_iterator(msg: Message, decode: bool = ...) -> Iterator[str]: ... def typed_subpart_iterator(msg: Message, maintype: str = ..., subtype: str | None = ...) -> Iterator[str]: ... def walk(self: Message) -> Iterator[Message]: ... + +# We include the seemingly private function because it is documented in the stdlib documentation. +def _structure(msg: Message, fp: SupportsWrite[str] | None = ..., level: int = ..., include_default: bool = ...) -> None: ... From ef0c69624550944b68135c4f5618ba7a7abebcb7 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:29:53 +0100 Subject: [PATCH 07/10] stdlib: Add sys._enablelegacywindowsfsencoding() --- stdlib/sys.pyi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdlib/sys.pyi b/stdlib/sys.pyi index a6e10affcbfc..c437f3f667d1 100644 --- a/stdlib/sys.pyi +++ b/stdlib/sys.pyi @@ -317,6 +317,10 @@ class _asyncgen_hooks(structseq[_AsyncgenHook], tuple[_AsyncgenHook, _AsyncgenHo def get_asyncgen_hooks() -> _asyncgen_hooks: ... def set_asyncgen_hooks(firstiter: _AsyncgenHook = ..., finalizer: _AsyncgenHook = ...) -> None: ... +if sys.version_info >= (3, 6): + if sys.platform == "win32": + def _enablelegacywindowsfsencoding() -> None: ... + if sys.version_info >= (3, 7): def get_coroutine_origin_tracking_depth() -> int: ... def set_coroutine_origin_tracking_depth(depth: int) -> None: ... From be1a5675f6668a07fc082751f4ae2d6d9e8a833a Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:45:41 +0100 Subject: [PATCH 08/10] stdlib: Add missing re-exports for UuidCreate, FCICreate, OpenDatabase & CreateRecord --- stdlib/_msi.pyi | 6 +++--- stdlib/msilib/__init__.pyi | 8 +++++++- tests/stubtest_allowlists/win32-py310.txt | 3 --- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/stdlib/_msi.pyi b/stdlib/_msi.pyi index b7e852f38ae9..ffe53c819e53 100644 --- a/stdlib/_msi.pyi +++ b/stdlib/_msi.pyi @@ -43,6 +43,6 @@ if sys.platform == "win32": __new__: None # type: ignore[assignment] __init__: None # type: ignore[assignment] def UuidCreate() -> str: ... - def FCICreate(cabname: str, files: list[str]) -> None: ... - def OpenDatabase(name: str, flags: int) -> _Database: ... - def CreateRecord(count: int) -> _Record: ... + def FCICreate(__cabname: str, __files: list[str]) -> None: ... + def OpenDatabase(__path: str, __persist: int) -> _Database: ... + def CreateRecord(__count: int) -> _Record: ... diff --git a/stdlib/msilib/__init__.pyi b/stdlib/msilib/__init__.pyi index db6f27126247..c512489be34d 100644 --- a/stdlib/msilib/__init__.pyi +++ b/stdlib/msilib/__init__.pyi @@ -4,7 +4,13 @@ from typing import Any, Container, Iterable, Sequence from typing_extensions import Literal if sys.platform == "win32": - from _msi import _Database + from _msi import ( + CreateRecord as CreateRecord, + FCICreate as FCICreate, + OpenDatabase as OpenDatabase, + UuidCreate as UuidCreate, + _Database, + ) AMD64: bool if sys.version_info < (3, 7): diff --git a/tests/stubtest_allowlists/win32-py310.txt b/tests/stubtest_allowlists/win32-py310.txt index 2fcacc00a5b2..a0cd0783a6b4 100644 --- a/tests/stubtest_allowlists/win32-py310.txt +++ b/tests/stubtest_allowlists/win32-py310.txt @@ -1,6 +1,3 @@ -_msi.CreateRecord -_msi.FCICreate -_msi.OpenDatabase sqlite3.Connection.enable_load_extension sqlite3.Connection.load_extension sqlite3.dbapi2.Connection.enable_load_extension From 7c45890ddaa406c323d8e4e17b402d85091ea711 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 06:53:26 +0100 Subject: [PATCH 09/10] stdlib: Add os.get_handle_inheritable & setter --- stdlib/os/__init__.pyi | 4 ++++ tests/stubtest_allowlists/win32.txt | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/stdlib/os/__init__.pyi b/stdlib/os/__init__.pyi index 892277a0dd5c..a1e4d78a14f3 100644 --- a/stdlib/os/__init__.pyi +++ b/stdlib/os/__init__.pyi @@ -660,6 +660,10 @@ def get_terminal_size(fd: int = ...) -> terminal_size: ... def get_inheritable(__fd: int) -> bool: ... def set_inheritable(__fd: int, __inheritable: bool) -> None: ... +if sys.platform == "win32": + def get_handle_inheritable(__handle: int) -> bool: ... + def set_handle_inheritable(__handle: int, __inheritable: bool) -> None: ... + if sys.platform != "win32": # Unix only def tcgetpgrp(__fd: int) -> int: ... diff --git a/tests/stubtest_allowlists/win32.txt b/tests/stubtest_allowlists/win32.txt index 6f25a3ad7bce..a198792c33ae 100644 --- a/tests/stubtest_allowlists/win32.txt +++ b/tests/stubtest_allowlists/win32.txt @@ -70,8 +70,6 @@ distutils.msvccompiler.MSVCCompiler.manifest_get_embed_info distutils.msvccompiler.MSVCCompiler.manifest_setup_ldargs distutils.msvccompiler.OldMSVCCompiler msvcrt.SetErrorMode -os.get_handle_inheritable -os.set_handle_inheritable socket.MsgFlag.MSG_BCAST socket.MsgFlag.MSG_MCAST ssl.SSLSocket.recvmsg From 5b622c83be13143b1adde7989a241481be6a8209 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 28 Feb 2022 14:00:25 +0100 Subject: [PATCH 10/10] stdlib: Add errno.EDEADLK --- stdlib/errno.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/errno.pyi b/stdlib/errno.pyi index b053604fc33a..5180b5940eae 100644 --- a/stdlib/errno.pyi +++ b/stdlib/errno.pyi @@ -36,6 +36,7 @@ EMLINK: int EPIPE: int EDOM: int ERANGE: int +EDEADLK: int EDEADLCK: int ENAMETOOLONG: int ENOLCK: int