From e6cd19ac2f9f67acb522ed618ea84f109e579295 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Mon, 20 Feb 2023 15:45:34 +0000 Subject: [PATCH 1/2] Use a generic `NamedTuple` for `concurrent.futures.DoneAndNotDoneFutures` --- stdlib/concurrent/futures/_base.pyi | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/stdlib/concurrent/futures/_base.pyi b/stdlib/concurrent/futures/_base.pyi index e792cf1a83c0..9b3149df9612 100644 --- a/stdlib/concurrent/futures/_base.pyi +++ b/stdlib/concurrent/futures/_base.pyi @@ -4,7 +4,7 @@ from _typeshed import Unused from collections.abc import Callable, Iterable, Iterator, Sequence from logging import Logger from types import TracebackType -from typing import Any, Generic, TypeVar, overload +from typing import Any, Generic, NamedTuple, TypeVar from typing_extensions import Literal, ParamSpec, Self, SupportsIndex if sys.version_info >= (3, 9): @@ -69,20 +69,9 @@ class Executor: def as_completed(fs: Iterable[Future[_T]], timeout: float | None = None) -> Iterator[Future[_T]]: ... -# Ideally this would be a namedtuple, but mypy doesn't support generic tuple types. See #1976 -class DoneAndNotDoneFutures(Sequence[set[Future[_T]]]): - if sys.version_info >= (3, 10): - __match_args__ = ("done", "not_done") - @property - def done(self) -> set[Future[_T]]: ... - @property - def not_done(self) -> set[Future[_T]]: ... - def __new__(_cls, done: set[Future[_T]], not_done: set[Future[_T]]) -> DoneAndNotDoneFutures[_T]: ... - def __len__(self) -> int: ... - @overload - def __getitem__(self, __i: SupportsIndex) -> set[Future[_T]]: ... - @overload - def __getitem__(self, __s: slice) -> DoneAndNotDoneFutures[_T]: ... +class DoneAndNotDoneFutures(NamedTuple, Generic[_T]): + done: set[Future[_T]] + not_done: set[Future[_T]] def wait( fs: Iterable[Future[_T]], timeout: float | None = None, return_when: str = "ALL_COMPLETED" From 73a6e701ff4aeb093d61d92e756e435504b7176e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 15:46:51 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/concurrent/futures/_base.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/concurrent/futures/_base.pyi b/stdlib/concurrent/futures/_base.pyi index 9b3149df9612..eb5ca4e2dd35 100644 --- a/stdlib/concurrent/futures/_base.pyi +++ b/stdlib/concurrent/futures/_base.pyi @@ -1,11 +1,11 @@ import sys import threading from _typeshed import Unused -from collections.abc import Callable, Iterable, Iterator, Sequence +from collections.abc import Callable, Iterable, Iterator from logging import Logger from types import TracebackType from typing import Any, Generic, NamedTuple, TypeVar -from typing_extensions import Literal, ParamSpec, Self, SupportsIndex +from typing_extensions import Literal, ParamSpec, Self if sys.version_info >= (3, 9): from types import GenericAlias