From 46ada1bf2a292147a481e624c41f3e197689cdba Mon Sep 17 00:00:00 2001 From: Abhishek Date: Tue, 10 Nov 2026 18:17:11 -0600 Subject: [PATCH 1/3] [boltons] Preserve priority queue task and fallback types --- stubs/boltons/boltons/queueutils.pyi | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/stubs/boltons/boltons/queueutils.pyi b/stubs/boltons/boltons/queueutils.pyi index 83c6dd01e8a5..e6d2a4761613 100644 --- a/stubs/boltons/boltons/queueutils.pyi +++ b/stubs/boltons/boltons/queueutils.pyi @@ -1,16 +1,29 @@ -from typing import TypeAlias - -class BasePriorityQueue: - def __init__(self, **kw) -> None: ... - def add(self, task, priority: int | None = None) -> None: ... - def remove(self, task) -> None: ... - def peek(self, default=...): ... - def pop(self, default=...): ... +from collections.abc import Hashable +from typing import Any, Generic, TypeAlias, TypeVar, overload + +_TaskT = TypeVar("_TaskT", bound=Hashable, default=Any) +_DefaultT = TypeVar("_DefaultT") + +class BasePriorityQueue(Generic[_TaskT]): + def __init__(self, **kw: Any) -> None: ... + def add(self, task: _TaskT, priority: float | None = None) -> None: ... + def remove(self, task: _TaskT) -> None: ... + + @overload + def peek(self) -> _TaskT: ... + @overload + def peek(self, default: _DefaultT) -> _TaskT | _DefaultT: ... + + @overload + def pop(self) -> _TaskT: ... + @overload + def pop(self, default: _DefaultT) -> _TaskT | _DefaultT: ... + def __len__(self) -> int: ... -class HeapPriorityQueue(BasePriorityQueue): ... -class SortedPriorityQueue(BasePriorityQueue): ... +class HeapPriorityQueue(BasePriorityQueue[_TaskT]): ... +class SortedPriorityQueue(BasePriorityQueue[_TaskT]): ... -PriorityQueue: TypeAlias = SortedPriorityQueue +PriorityQueue: TypeAlias = SortedPriorityQueue[_TaskT] __all__ = ["PriorityQueue", "BasePriorityQueue", "HeapPriorityQueue", "SortedPriorityQueue"] From 950d5b1d3c2fc0a37be3c5c9ff29b17011ca038d Mon Sep 17 00:00:00 2001 From: Abhishek Date: Tue, 10 Nov 2026 18:19:41 -0600 Subject: [PATCH 2/3] [boltons] Correct atomic saver file object types --- stubs/boltons/boltons/fileutils.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/boltons/boltons/fileutils.pyi b/stubs/boltons/boltons/fileutils.pyi index 8e2fb8b75b27..cbe65ae82abd 100644 --- a/stubs/boltons/boltons/fileutils.pyi +++ b/stubs/boltons/boltons/fileutils.pyi @@ -37,10 +37,10 @@ class AtomicSaver: part_path: str mode: str open_flags: int - part_file: str | None + part_file: IO[Any] | None def __init__(self, dest_path: str, **kwargs) -> None: ... def setup(self) -> None: ... - def __enter__(self) -> IO[Any] | None: ... + def __enter__(self) -> IO[Any]: ... def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None ) -> None: ... From 0dee8fa14621d55e0261d7100db2a4aa5beaf730 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Tue, 10 Nov 2026 18:52:31 -0600 Subject: [PATCH 3/3] [boltons] Accept supported string and path-like file inputs --- stubs/boltons/boltons/fileutils.pyi | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/stubs/boltons/boltons/fileutils.pyi b/stubs/boltons/boltons/fileutils.pyi index cbe65ae82abd..c7ed18ef9bcb 100644 --- a/stubs/boltons/boltons/fileutils.pyi +++ b/stubs/boltons/boltons/fileutils.pyi @@ -1,6 +1,5 @@ from _typeshed import BytesPath, StrOrBytesPath, StrPath from collections.abc import Callable, Generator, Iterable -from os import PathLike from types import TracebackType from typing import IO, Any, TypeVar, overload from typing_extensions import Never, Self @@ -9,7 +8,7 @@ _StrPathT = TypeVar("_StrPathT", bound=StrPath) _BytesPathT = TypeVar("_BytesPathT", bound=BytesPath) def mkdir_p(path: StrOrBytesPath) -> None: ... -def rotate_file(filename: PathLike[str], *, keep: int = 5) -> None: ... +def rotate_file(filename: StrPath, *, keep: int = 5) -> None: ... class FilePerms: user: str @@ -22,7 +21,7 @@ class FilePerms: def from_path(cls, path: StrOrBytesPath) -> Self: ... def __int__(self) -> int: ... -def atomic_save(dest_path: str, **kwargs) -> AtomicSaver: ... +def atomic_save(dest_path: StrPath, **kwargs) -> AtomicSaver: ... class AtomicSaver: dest_path: str @@ -38,7 +37,7 @@ class AtomicSaver: mode: str open_flags: int part_file: IO[Any] | None - def __init__(self, dest_path: str, **kwargs) -> None: ... + def __init__(self, dest_path: StrPath, **kwargs) -> None: ... def setup(self) -> None: ... def __enter__(self) -> IO[Any]: ... def __exit__(