From 7a304d4f49d8ad7e4b7f76198309434616c4fb8e Mon Sep 17 00:00:00 2001 From: Avasam Date: Mon, 2 Nov 2026 16:36:33 -0500 Subject: [PATCH 1/2] pywin32 fixes for pywin32's own demos and tests --- stubs/pywin32/_win32typing.pyi | 7 ++++-- stubs/pywin32/win32/win32net.pyi | 42 +++++++++++++++++--------------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/stubs/pywin32/_win32typing.pyi b/stubs/pywin32/_win32typing.pyi index 1c154db22535..2aa7c963d83e 100644 --- a/stubs/pywin32/_win32typing.pyi +++ b/stubs/pywin32/_win32typing.pyi @@ -1437,7 +1437,8 @@ class PyOVERLAPPED: Internal: int InternalHigh: int -class PyOVERLAPPEDReadBuffer: ... +# Is actually a memoryview over a bytearray, as created by win32file.AllocateReadBuffer +PyOVERLAPPEDReadBuffer: TypeAlias = memoryview class PyPERF_COUNTER_DEFINITION: @property @@ -3028,7 +3029,9 @@ class PyDSOP_SCOPE_INIT_INFO: @disjoint_base class PyDSOP_SCOPE_INIT_INFOs: - def __new__(cls, size, /): ... + def __new__(cls, size: int, /) -> Self: ... + def __len__(self) -> int: ... + def __getitem__(self, index: SupportsIndex, /) -> PyDSOP_SCOPE_INIT_INFO: ... class PyDSOP_UPLEVEL_FILTER_FLAGS: @property diff --git a/stubs/pywin32/win32/win32net.pyi b/stubs/pywin32/win32/win32net.pyi index 2a01d0e39135..c4ca2fc378e5 100644 --- a/stubs/pywin32/win32/win32net.pyi +++ b/stubs/pywin32/win32/win32net.pyi @@ -1,47 +1,53 @@ from _typeshed import Incomplete +from typing import TypeAlias, overload from win32.lib.pywintypes import error as error +_EnumResult: TypeAlias = tuple[list[dict[str, Incomplete]], int, int] # ([dict, ...], total, resumeHandle) + def NetGetJoinInformation() -> tuple[str, Incomplete]: ... def NetGroupGetInfo(server: str, groupname: str, level, /): ... def NetGroupGetUsers( - server: str, groupName: str, level, resumeHandle: int = ..., prefLen: int = ..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... + server: str | None, groupName: str, level: int, resumeHandle: int | None = 0, prefLen: int = 4096, / +) -> _EnumResult: ... def NetGroupSetUsers(server: str, group: str, level, members: tuple[Incomplete, Incomplete], /) -> None: ... def NetGroupSetInfo(server: str, groupname: str, level, data, /) -> None: ... def NetGroupAdd(server: str, level, data, /) -> None: ... def NetGroupAddUser(server: str, group: str, username: str, /) -> None: ... def NetGroupDel(server: str, groupname: str, /) -> None: ... def NetGroupDelUser(server: str, group: str, username: str, /) -> None: ... -def NetGroupEnum(server: str, level, prefLen, resumeHandle=..., /) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... +def NetGroupEnum(server: str | None, level: int, resumeHandle: int | None = 0, prefLen: int = ..., /) -> _EnumResult: ... def NetLocalGroupAddMembers(server: str, group: str, level, members: tuple[Incomplete, Incomplete], /) -> None: ... def NetLocalGroupDelMembers(server: str, group: str, members: list[str], /) -> None: ... def NetLocalGroupGetMembers( - server: str, groupName: str, level, resumeHandle: int = ..., prefLen: int = ..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... + server: str | None, groupName: str, level: int, resumeHandle: int | None = 0, prefLen: int = 4096, / +) -> _EnumResult: ... def NetLocalGroupSetMembers(server: str, group: str, level, members: tuple[Incomplete, Incomplete], /) -> None: ... def NetMessageBufferSend(domain: str, userName: str, fromName: str, message: str, /) -> None: ... def NetMessageNameAdd(server, msgname, /) -> None: ... def NetMessageNameDel(server, msgname, /) -> None: ... def NetMessageNameEnum(Server, /) -> None: ... def NetServerEnum( - server: str, level, _type, prefLen, domain: str | None = ..., resumeHandle: int = ..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... + server: str | None, level: int, type: int = ..., domain: str | None = None, resumeHandle: int = 0, prefLen: int = ..., / +) -> _EnumResult: ... def NetServerGetInfo(server: str, level, /): ... def NetServerSetInfo(server: str, level, data, /) -> None: ... def NetShareAdd(server: str, level, data, /) -> None: ... def NetShareDel(server: str, shareName: str, reserved: int = ..., /) -> None: ... def NetShareCheck(server: str, deviceName: str, /) -> tuple[Incomplete, Incomplete]: ... -def NetShareEnum( - server: str, level, prefLen, serverName, resumeHandle=..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... + +@overload +def NetShareEnum(serverName: str | None, /) -> list[tuple[str, int, str]]: ... +@overload +def NetShareEnum(server: str | None, level: int, resumeHandle: int | None = 0, prefLen: int = ..., /) -> _EnumResult: ... + def NetShareGetInfo(server: str, netname: str, level, /): ... def NetShareSetInfo(server: str, netname: str, level, data, /) -> None: ... def NetUserAdd(server: str, level, data, /) -> None: ... def NetUserChangePassword(server: str, username: str, oldPassword: str, newPassword: str, /) -> None: ... def NetUserEnum( - server: str, level, arg, prefLen, resumeHandle=..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... + server: str | None, level: int, filter: int = ..., resumeHandle: int = 0, prefLen: int = ..., / +) -> _EnumResult: ... def NetUserGetGroups(serverName: str, userName: str, /) -> list[tuple[Incomplete, Incomplete]]: ... def NetUserGetInfo(server: str, username: str, level, /): ... def NetUserGetLocalGroups(serverName: str, userName: str, flags, /) -> list[Incomplete]: ... @@ -49,20 +55,16 @@ def NetUserSetInfo(server: str, username: str, level, data, /) -> None: ... def NetUserDel(server: str, username: str, /) -> None: ... def NetUserModalsGet(server: str, level, /): ... def NetUserModalsSet(server: str, level, data, /) -> None: ... -def NetWkstaUserEnum( - server: str, level, prefLen, resumeHandle=..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... +def NetWkstaUserEnum(server: str | None, level: int, resumeHandle: int = 0, prefLen: int = ..., /) -> _EnumResult: ... def NetWkstaGetInfo(server: str, level, /): ... def NetWkstaSetInfo(server: str, level, data, /) -> None: ... -def NetWkstaTransportEnum( - server: str, level, prefLen, resumeHandle=..., / -) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... +def NetWkstaTransportEnum(server: str | None, level: int, resumeHandle: int = 0, prefLen: int = ..., /) -> _EnumResult: ... def NetWkstaTransportAdd(server: str, level, data, /) -> None: ... def NetWkstaTransportDel(server: str, TransportName: str, ucond: int = ..., /) -> None: ... def NetServerDiskEnum(server: str, level, /): ... def NetUseAdd(server: str, level, data, /) -> None: ... def NetUseDel(server: str, useName: str, forceCond: int = ..., /) -> None: ... -def NetUseEnum(server: str, level, prefLen, resumeHandle=..., /) -> tuple[Incomplete, Incomplete, Incomplete, Incomplete]: ... +def NetUseEnum(server: str | None, level: int, resumeHandle: int = 0, prefLen: int = ..., /) -> _EnumResult: ... def NetUseGetInfo(server: str, usename: str, level: int = ..., /): ... def NetGetAnyDCName(server: str | None = ..., domain: str | None = ..., /) -> str: ... def NetGetDCName(server: str | None = ..., domain: str | None = ..., /) -> str: ... @@ -83,7 +85,7 @@ def NetValidateName(Server: str, Name: str, NameType, Account: str | None = ..., def NetValidatePasswordPolicy(Server: str, Qualifier, ValidationType, arg, /) -> None: ... def NetLocalGroupAdd(server: str, level: int, data, /) -> None: ... def NetLocalGroupDel(server: str, groupname: str, data, /) -> None: ... -def NetLocalGroupEnum(server: str, level: int, resumeHandle=..., prefLen: int = ..., /): ... +def NetLocalGroupEnum(server: str | None, level: int, resumeHandle: int | None = 0, prefLen: int = ..., /) -> _EnumResult: ... def NetLocalGroupGetInfo(server: str, groupname: str, level: int, /): ... def NetLocalGroupSetInfo(server: str, groupname: str, level: int, data, /) -> None: ... From 67a948ef5d4e29d94b3946a7cf3bfaf13c21b566 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 21:43:14 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/pywin32/win32/win32net.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/pywin32/win32/win32net.pyi b/stubs/pywin32/win32/win32net.pyi index c4ca2fc378e5..380d8ec00eaa 100644 --- a/stubs/pywin32/win32/win32net.pyi +++ b/stubs/pywin32/win32/win32net.pyi @@ -3,7 +3,7 @@ from typing import TypeAlias, overload from win32.lib.pywintypes import error as error -_EnumResult: TypeAlias = tuple[list[dict[str, Incomplete]], int, int] # ([dict, ...], total, resumeHandle) +_EnumResult: TypeAlias = tuple[list[dict[str, Incomplete]], int, int] # ([dict, ...], total, resumeHandle) def NetGetJoinInformation() -> tuple[str, Incomplete]: ... def NetGroupGetInfo(server: str, groupname: str, level, /): ...