From c9fe88089393af40d72634d96b5dcf51586a65fc Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Tue, 31 May 2022 10:40:37 +0100 Subject: [PATCH 1/6] stubs/requests: expand types for files --- stubs/requests/requests/sessions.pyi | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index 7e7d6e902f11..b695b5495efd 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -48,11 +48,23 @@ class SessionRedirectMixin: _Data: TypeAlias = str | bytes | Mapping[str, Any] | Iterable[tuple[str, str | None]] | IO[Any] _Auth: TypeAlias = Union[tuple[str, str], _auth.AuthBase, Callable[[PreparedRequest], PreparedRequest]] _Cert: TypeAlias = Union[str, tuple[str, str]] +# Files can be passed as either a mapping, or a list of tuples. +_FileContent = SupportsRead[str | bytes] | str | bytes +_FileName = str | None +_FileContentType = str +_FileCustomHeaders = _TextMapping +_FileSpecTuple2 = tuple[_FileName, _FileContent] +_FileSpecTuple3 = tuple[_FileName, _FileContent, _FileContentType] +_FileSpecTuple4 = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] _Files: TypeAlias = ( - Mapping[str, SupportsRead[str | bytes] | str | bytes] - | Mapping[str, tuple[str | None, SupportsRead[str | bytes] | str | bytes]] - | Mapping[str, tuple[str | None, SupportsRead[str | bytes] | str | bytes, str]] - | Mapping[str, tuple[str | None, SupportsRead[str | bytes] | str | bytes, str, _TextMapping]] + Mapping[str, _FileContent] + | Mapping[str, _FileSpecTuple2] + | Mapping[str, _FileSpecTuple3] + | Mapping[str, _FileSpecTuple4] + | Sequence[tuple[str, _FileContent]] + | Sequence[tuple[str, _FileSpecTuple2]] + | Sequence[tuple[str, _FileSpecTuple3]] + | Sequence[tuple[str, _FileSpecTuple4]] ) _Hook: TypeAlias = Callable[[Response], Any] _HooksInput: TypeAlias = Mapping[str, Iterable[_Hook] | _Hook] From f6019047cabc7875594583d4c87fe609ce2039f1 Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Tue, 31 May 2022 11:07:10 +0100 Subject: [PATCH 2/6] [fixup] fix build failures --- stubs/requests/requests/sessions.pyi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index b695b5495efd..5ba3a96aa6de 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -1,5 +1,5 @@ from _typeshed import Self, SupportsItems, SupportsRead -from collections.abc import Callable, Iterable, Mapping, MutableMapping +from collections.abc import Callable, Iterable, Mapping, MutableMapping, Sequence from typing import IO, Any, Union from typing_extensions import TypeAlias @@ -49,10 +49,10 @@ _Data: TypeAlias = str | bytes | Mapping[str, Any] | Iterable[tuple[str, str | N _Auth: TypeAlias = Union[tuple[str, str], _auth.AuthBase, Callable[[PreparedRequest], PreparedRequest]] _Cert: TypeAlias = Union[str, tuple[str, str]] # Files can be passed as either a mapping, or a list of tuples. -_FileContent = SupportsRead[str | bytes] | str | bytes -_FileName = str | None -_FileContentType = str -_FileCustomHeaders = _TextMapping +_FileContent: TypeAlias = SupportsRead[str | bytes] | str | bytes +_FileName: TypeAlias = str | None +_FileContentType: TypeAlias = str +_FileCustomHeaders: TypeAlias = _TextMapping _FileSpecTuple2 = tuple[_FileName, _FileContent] _FileSpecTuple3 = tuple[_FileName, _FileContent, _FileContentType] _FileSpecTuple4 = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] From 6216bbdd43a4e422a09154c3ec2d79d97ee1f4cb Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Tue, 31 May 2022 12:16:29 +0100 Subject: [PATCH 3/6] [review] files don't have to have uniform structure --- stubs/requests/requests/sessions.pyi | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index 5ba3a96aa6de..6b78dae3ae69 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -56,16 +56,8 @@ _FileCustomHeaders: TypeAlias = _TextMapping _FileSpecTuple2 = tuple[_FileName, _FileContent] _FileSpecTuple3 = tuple[_FileName, _FileContent, _FileContentType] _FileSpecTuple4 = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] -_Files: TypeAlias = ( - Mapping[str, _FileContent] - | Mapping[str, _FileSpecTuple2] - | Mapping[str, _FileSpecTuple3] - | Mapping[str, _FileSpecTuple4] - | Sequence[tuple[str, _FileContent]] - | Sequence[tuple[str, _FileSpecTuple2]] - | Sequence[tuple[str, _FileSpecTuple3]] - | Sequence[tuple[str, _FileSpecTuple4]] -) +_FileSpec: TypeAlias = _FileContent | _FileSpecTuple2 | _FileSpecTuple3 | _FileSpecTuple4 +_Files: TypeAlias = Mapping[str, _FileSpec] | Sequence[tuple[str, _FileSpec]] _Hook: TypeAlias = Callable[[Response], Any] _HooksInput: TypeAlias = Mapping[str, Iterable[_Hook] | _Hook] From a5889780da41583151ed371d4fea36e39d0a68fe Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Tue, 31 May 2022 12:40:23 +0100 Subject: [PATCH 4/6] [review] add missing TypeAlias --- stubs/requests/requests/sessions.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index 6b78dae3ae69..dcc4331ac570 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -53,9 +53,9 @@ _FileContent: TypeAlias = SupportsRead[str | bytes] | str | bytes _FileName: TypeAlias = str | None _FileContentType: TypeAlias = str _FileCustomHeaders: TypeAlias = _TextMapping -_FileSpecTuple2 = tuple[_FileName, _FileContent] -_FileSpecTuple3 = tuple[_FileName, _FileContent, _FileContentType] -_FileSpecTuple4 = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] +_FileSpecTuple2: TypeAlias = tuple[_FileName, _FileContent] +_FileSpecTuple3: TypeAlias = tuple[_FileName, _FileContent, _FileContentType] +_FileSpecTuple4: TypeAlias = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] _FileSpec: TypeAlias = _FileContent | _FileSpecTuple2 | _FileSpecTuple3 | _FileSpecTuple4 _Files: TypeAlias = Mapping[str, _FileSpec] | Sequence[tuple[str, _FileSpec]] _Hook: TypeAlias = Callable[[Response], Any] From b6ec360b2a615c4decf180e3201e6f83c981ab1a Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Tue, 31 May 2022 17:14:49 +0100 Subject: [PATCH 5/6] [review] feedback from Akuli --- stubs/requests/requests/sessions.pyi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index dcc4331ac570..75bc98a7f0c5 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -1,5 +1,5 @@ from _typeshed import Self, SupportsItems, SupportsRead -from collections.abc import Callable, Iterable, Mapping, MutableMapping, Sequence +from collections.abc import Callable, Iterable, Mapping, MutableMapping from typing import IO, Any, Union from typing_extensions import TypeAlias @@ -48,16 +48,16 @@ class SessionRedirectMixin: _Data: TypeAlias = str | bytes | Mapping[str, Any] | Iterable[tuple[str, str | None]] | IO[Any] _Auth: TypeAlias = Union[tuple[str, str], _auth.AuthBase, Callable[[PreparedRequest], PreparedRequest]] _Cert: TypeAlias = Union[str, tuple[str, str]] -# Files can be passed as either a mapping, or a list of tuples. -_FileContent: TypeAlias = SupportsRead[str | bytes] | str | bytes +# Files is passed to requests.utils.to_key_val_list() _FileName: TypeAlias = str | None +_FileContent: TypeAlias = SupportsRead[str | bytes] | str | bytes _FileContentType: TypeAlias = str _FileCustomHeaders: TypeAlias = _TextMapping _FileSpecTuple2: TypeAlias = tuple[_FileName, _FileContent] _FileSpecTuple3: TypeAlias = tuple[_FileName, _FileContent, _FileContentType] _FileSpecTuple4: TypeAlias = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders] _FileSpec: TypeAlias = _FileContent | _FileSpecTuple2 | _FileSpecTuple3 | _FileSpecTuple4 -_Files: TypeAlias = Mapping[str, _FileSpec] | Sequence[tuple[str, _FileSpec]] +_Files: TypeAlias = Mapping[str, _FileSpec] | Iterable[tuple[str, _FileSpec]] _Hook: TypeAlias = Callable[[Response], Any] _HooksInput: TypeAlias = Mapping[str, Iterable[_Hook] | _Hook] From ca99caf70d9cc273b79b67243a8b5d05b480e0b7 Mon Sep 17 00:00:00 2001 From: Tom Milligan Date: Wed, 1 Jun 2022 20:22:29 +0100 Subject: [PATCH 6/6] [review] do not require mutability for file headers --- stubs/requests/requests/sessions.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/requests/requests/sessions.pyi b/stubs/requests/requests/sessions.pyi index 75bc98a7f0c5..59569137ac43 100644 --- a/stubs/requests/requests/sessions.pyi +++ b/stubs/requests/requests/sessions.pyi @@ -52,7 +52,7 @@ _Cert: TypeAlias = Union[str, tuple[str, str]] _FileName: TypeAlias = str | None _FileContent: TypeAlias = SupportsRead[str | bytes] | str | bytes _FileContentType: TypeAlias = str -_FileCustomHeaders: TypeAlias = _TextMapping +_FileCustomHeaders: TypeAlias = Mapping[str, str] _FileSpecTuple2: TypeAlias = tuple[_FileName, _FileContent] _FileSpecTuple3: TypeAlias = tuple[_FileName, _FileContent, _FileContentType] _FileSpecTuple4: TypeAlias = tuple[_FileName, _FileContent, _FileContentType, _FileCustomHeaders]