Skip to content

Commit

Permalink
PEP 604: Remove some more uses of Union/Optional (#7515)
Browse files Browse the repository at this point in the history
The following patterns still break mypy:

1. `type[]` at top level fails
2. `tuple[T1, T2]` at top level fails (but `tuple[T1, ...]` is fine)
3. `T1 | Callable[..., T2 | T3]` fails, but only <=3.9

This PR cleans up usage of `Union` and `Optional` outside these patterns.
  • Loading branch information
JelleZijlstra authored Mar 19, 2022
1 parent 1acc8f3 commit b7d129f
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 23 deletions.
4 changes: 2 additions & 2 deletions stdlib/asyncio/trsock.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import socket
import sys
from builtins import type as Type # alias to avoid name clashes with property named "type"
from types import TracebackType
from typing import Any, BinaryIO, Iterable, NoReturn, Union, overload
from typing import Any, BinaryIO, Iterable, NoReturn, overload

# These are based in socket, maybe move them out into _typeshed.pyi or such
_Address = Union[tuple[Any, ...], str]
_Address = tuple[Any, ...] | str
_RetAddress = Any
_WriteBuffer = bytearray | memoryview
_CMSG = tuple[int, int, bytes]
Expand Down
21 changes: 10 additions & 11 deletions stdlib/os/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ from typing import (
Protocol,
Sequence,
TypeVar,
Union,
overload,
runtime_checkable,
)
Expand Down Expand Up @@ -832,16 +831,16 @@ def execlpe(file: StrOrBytesPath, __arg0: StrOrBytesPath, *args: Any) -> NoRetur
# Not separating out PathLike[str] and PathLike[bytes] here because it doesn't make much difference
# in practice, and doing so would explode the number of combinations in this already long union.
# All these combinations are necessary due to list being invariant.
_ExecVArgs = Union[
tuple[StrOrBytesPath, ...],
list[bytes],
list[str],
list[PathLike[Any]],
list[bytes | str],
list[bytes | PathLike[Any]],
list[str | PathLike[Any]],
list[bytes | str | PathLike[Any]],
]
_ExecVArgs = (
tuple[StrOrBytesPath, ...]
| list[bytes]
| list[str]
| list[PathLike[Any]]
| list[bytes | str]
| list[bytes | PathLike[Any]]
| list[str | PathLike[Any]]
| list[bytes | str | PathLike[Any]]
)
_ExecEnv = Mapping[bytes, bytes | str] | Mapping[str, bytes | str]

def execv(__path: StrOrBytesPath, __argv: _ExecVArgs) -> NoReturn: ...
Expand Down
4 changes: 2 additions & 2 deletions stdlib/traceback.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys
from _typeshed import Self, SupportsWrite
from types import FrameType, TracebackType
from typing import IO, Any, Generator, Iterable, Iterator, Mapping, Optional, overload
from typing import IO, Any, Generator, Iterable, Iterator, Mapping, overload
from typing_extensions import Literal

__all__ = [
Expand All @@ -26,7 +26,7 @@ __all__ = [
"walk_tb",
]

_PT = tuple[str, int, str, Optional[str]]
_PT = tuple[str, int, str, str | None]

def print_tb(tb: TracebackType | None, limit: int | None = ..., file: IO[str] | None = ...) -> None: ...

Expand Down
4 changes: 2 additions & 2 deletions stdlib/wsgiref/handlers.pyi
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from abc import abstractmethod
from types import TracebackType
from typing import IO, Callable, MutableMapping, Optional
from typing import IO, Callable, MutableMapping

from .headers import Headers
from .types import ErrorStream, InputStream, StartResponse, WSGIApplication, WSGIEnvironment
from .util import FileWrapper

__all__ = ["BaseHandler", "SimpleHandler", "BaseCGIHandler", "CGIHandler", "IISCGIHandler", "read_environ"]

_exc_info = tuple[Optional[type[BaseException]], Optional[BaseException], Optional[TracebackType]]
_exc_info = tuple[type[BaseException] | None, BaseException | None, TracebackType | None]

def format_date_time(timestamp: float | None) -> str: ... # undocumented
def read_environ() -> dict[str, str]: ...
Expand Down
6 changes: 4 additions & 2 deletions stdlib/xmlrpc/client.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ class _SupportsTimeTuple(Protocol):
def timetuple(self) -> time.struct_time: ...

_DateTimeComparable = DateTime | datetime | str | _SupportsTimeTuple
_Marshallable = Union[None, bool, int, float, str, bytes, tuple[Any, ...], list[Any], dict[Any, Any], datetime, DateTime, Binary]
_XMLDate = Union[int, datetime, tuple[int, ...], time.struct_time]
_Marshallable = (
bool | int | float | str | bytes | None | tuple[Any, ...] | list[Any] | dict[Any, Any] | datetime | DateTime | Binary
)
_XMLDate = int | datetime | tuple[int, ...] | time.struct_time
_HostType = Union[tuple[str, dict[str, str]], str]

def escape(s: str) -> str: ... # undocumented
Expand Down
4 changes: 2 additions & 2 deletions stubs/pyaudio/pyaudio.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Callable, Mapping, Optional, Sequence
from typing import Callable, Mapping, Sequence
from typing_extensions import Final

paFloat32: Final[int]
Expand Down Expand Up @@ -70,7 +70,7 @@ paMacCoreStreamInfo: PaMacCoreStreamInfo
_ChannelMap = Sequence[int]
_PaHostApiInfo = Mapping[str, str | int]
_PaDeviceInfo = Mapping[str, str | int | float]
_StreamCallback = Callable[[Optional[bytes], int, Mapping[str, float], int], tuple[Optional[bytes], int]]
_StreamCallback = Callable[[bytes | None, int, Mapping[str, float], int], tuple[bytes | None, int]]

def get_format_from_width(width: int, unsigned: bool = ...) -> int: ...
def get_portaudio_version() -> int: ...
Expand Down
4 changes: 2 additions & 2 deletions stubs/requests/requests/sessions.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from _typeshed import Self, SupportsItems
from typing import IO, Any, Callable, Iterable, Mapping, MutableMapping, Optional, Text, TypeVar, Union
from typing import IO, Any, Callable, Iterable, Mapping, MutableMapping, Text, TypeVar, Union

from urllib3 import _collections

Expand Down Expand Up @@ -47,7 +47,7 @@ class SessionRedirectMixin:
def rebuild_proxies(self, prepared_request, proxies): ...
def should_strip_auth(self, old_url, new_url): ...

_Data = Union[None, Text, bytes, Mapping[str, Any], Mapping[Text, Any], Iterable[tuple[Text, Optional[Text]]], IO[Any]]
_Data = Text | bytes | Mapping[str, Any] | Mapping[Text, Any] | Iterable[tuple[Text, Text | None]] | IO[Any] | None

_Hook = Callable[[Response], Any]
_Hooks = MutableMapping[Text, _Hook | list[_Hook]]
Expand Down

0 comments on commit b7d129f

Please sign in to comment.