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/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: ... 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 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/stdlib/os/__init__.pyi b/stdlib/os/__init__.pyi index d38148e7921f..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: ... @@ -1019,6 +1023,12 @@ 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: ... + + if sys.platform == "linux": + def pidfd_open(pid: int, flags: int = ...) -> int: ... diff --git a/stdlib/posix.pyi b/stdlib/posix.pyi index 9f658039bcf2..5dba5b36e3d2 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, @@ -302,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/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: ... 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: ... 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/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: ... diff --git a/tests/stubtest_allowlists/linux-py310.txt b/tests/stubtest_allowlists/linux-py310.txt index d435cdd0a567..239cddc0a336 100644 --- a/tests/stubtest_allowlists/linux-py310.txt +++ b/tests/stubtest_allowlists/linux-py310.txt @@ -24,18 +24,13 @@ 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.pidfd_open os.splice posix.EFD_[A-Z]+ posix.SPLICE_[A-Z_]+ -posix.copy_file_range posix.eventfd 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..2c835817c208 100644 --- a/tests/stubtest_allowlists/linux-py38.txt +++ b/tests/stubtest_allowlists/linux-py38.txt @@ -1,6 +1 @@ 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..71f4eb92dd40 100644 --- a/tests/stubtest_allowlists/linux-py39.txt +++ b/tests/stubtest_allowlists/linux-py39.txt @@ -1,9 +1,2 @@ (os|posix).sendfile select.epoll.register - -# Exists at runtime, but missing from stubs -os.copy_file_range -os.pidfd_open -posix.copy_file_range -posix.pidfd_open -time.pthread_getcpuclockid 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 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