From 4948422a6692161709a776219b9bd83ddd1a8cf6 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 14 Sep 2021 08:56:56 +0200 Subject: [PATCH 1/2] Fix set annotations in concurrent.futures._base Fixes #6033 --- stdlib/concurrent/futures/_base.pyi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/stdlib/concurrent/futures/_base.pyi b/stdlib/concurrent/futures/_base.pyi index 3a7b56082281..c098d9d97571 100644 --- a/stdlib/concurrent/futures/_base.pyi +++ b/stdlib/concurrent/futures/_base.pyi @@ -2,7 +2,7 @@ import sys import threading from _typeshed import Self from abc import abstractmethod -from collections.abc import Container, Iterable, Iterator, Sequence, Set +from collections.abc import Container, Iterable, Iterator, Sequence from logging import Logger from typing import Any, Callable, Generic, Protocol, TypeVar, overload @@ -75,13 +75,13 @@ class Executor: def as_completed(fs: Iterable[Future[_T]], timeout: float | 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]]]): - done: Set[Future[_T]] - not_done: Set[Future[_T]] - def __new__(_cls, done: Set[Future[_T]], not_done: Set[Future[_T]]) -> DoneAndNotDoneFutures[_T]: ... +class DoneAndNotDoneFutures(Sequence[set[Future[_T]]]): + done: set[Future[_T]] + not_done: 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: int) -> Set[Future[_T]]: ... + def __getitem__(self, i: int) -> set[Future[_T]]: ... @overload def __getitem__(self, s: slice) -> DoneAndNotDoneFutures[_T]: ... From a4764d0e7304aad5253f08a2ce0ddcce47ca58d0 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 14 Sep 2021 09:01:21 +0200 Subject: [PATCH 2/2] Work around mypy's broken generics handling --- 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 c098d9d97571..fd7333420b39 100644 --- a/stdlib/concurrent/futures/_base.pyi +++ b/stdlib/concurrent/futures/_base.pyi @@ -4,7 +4,7 @@ from _typeshed import Self from abc import abstractmethod from collections.abc import Container, Iterable, Iterator, Sequence from logging import Logger -from typing import Any, Callable, Generic, Protocol, TypeVar, overload +from typing import Any, Callable, Generic, Protocol, Set, TypeVar, overload if sys.version_info >= (3, 9): from types import GenericAlias @@ -75,7 +75,7 @@ class Executor: def as_completed(fs: Iterable[Future[_T]], timeout: float | 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]]]): +class DoneAndNotDoneFutures(Sequence[Set[Future[_T]]]): done: set[Future[_T]] not_done: set[Future[_T]] def __new__(_cls, done: set[Future[_T]], not_done: set[Future[_T]]) -> DoneAndNotDoneFutures[_T]: ...