Skip to content

Commit 9386854

Browse files
authored
Add full request typing signatures for session HTTP methods (#8463)
1 parent 212bb5b commit 9386854

File tree

2 files changed

+130
-47
lines changed

2 files changed

+130
-47
lines changed

CHANGES/8463.misc.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`.

aiohttp/client.py

Lines changed: 129 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
Set,
3030
Tuple,
3131
Type,
32+
TypedDict,
3233
TypeVar,
3334
Union,
3435
final,
@@ -149,6 +150,37 @@
149150
else:
150151
SSLContext = None
151152

153+
if sys.version_info >= (3, 11) and TYPE_CHECKING:
154+
from typing import Unpack
155+
156+
157+
class _RequestOptions(TypedDict, total=False):
158+
params: Union[Mapping[str, str], None]
159+
data: Any
160+
json: Any
161+
cookies: Union[LooseCookies, None]
162+
headers: Union[LooseHeaders, None]
163+
skip_auto_headers: Union[Iterable[str], None]
164+
auth: Union[BasicAuth, None]
165+
allow_redirects: bool
166+
max_redirects: int
167+
compress: Union[str, None]
168+
chunked: Union[bool, None]
169+
expect100: bool
170+
raise_for_status: Union[None, bool, Callable[[ClientResponse], Awaitable[None]]]
171+
read_until_eof: bool
172+
proxy: Union[StrOrURL, None]
173+
proxy_auth: Union[BasicAuth, None]
174+
timeout: "Union[ClientTimeout, _SENTINEL, None]"
175+
ssl: Union[SSLContext, bool, Fingerprint]
176+
server_hostname: Union[str, None]
177+
proxy_headers: Union[LooseHeaders, None]
178+
trace_request_ctx: Union[SimpleNamespace, None]
179+
read_bufsize: Union[int, None]
180+
auto_decompress: Union[bool, None]
181+
max_line_size: Union[int, None]
182+
max_field_size: Union[int, None]
183+
152184

153185
@dataclasses.dataclass(frozen=True)
154186
class ClientTimeout:
@@ -986,61 +1018,111 @@ def _prepare_headers(self, headers: Optional[LooseHeaders]) -> "CIMultiDict[str]
9861018
added_names.add(key)
9871019
return result
9881020

989-
def get(
990-
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
991-
) -> "_RequestContextManager":
992-
"""Perform HTTP GET request."""
993-
return _RequestContextManager(
994-
self._request(hdrs.METH_GET, url, allow_redirects=allow_redirects, **kwargs)
995-
)
1021+
if sys.version_info >= (3, 11) and TYPE_CHECKING:
1022+
1023+
def get(
1024+
self,
1025+
url: StrOrURL,
1026+
**kwargs: Unpack[_RequestOptions],
1027+
) -> "_RequestContextManager": ...
1028+
1029+
def options(
1030+
self,
1031+
url: StrOrURL,
1032+
**kwargs: Unpack[_RequestOptions],
1033+
) -> "_RequestContextManager": ...
1034+
1035+
def head(
1036+
self,
1037+
url: StrOrURL,
1038+
**kwargs: Unpack[_RequestOptions],
1039+
) -> "_RequestContextManager": ...
1040+
1041+
def post(
1042+
self,
1043+
url: StrOrURL,
1044+
**kwargs: Unpack[_RequestOptions],
1045+
) -> "_RequestContextManager": ...
1046+
1047+
def put(
1048+
self,
1049+
url: StrOrURL,
1050+
**kwargs: Unpack[_RequestOptions],
1051+
) -> "_RequestContextManager": ...
1052+
1053+
def patch(
1054+
self,
1055+
url: StrOrURL,
1056+
**kwargs: Unpack[_RequestOptions],
1057+
) -> "_RequestContextManager": ...
1058+
1059+
def delete(
1060+
self,
1061+
url: StrOrURL,
1062+
**kwargs: Unpack[_RequestOptions],
1063+
) -> "_RequestContextManager": ...
1064+
1065+
else:
1066+
1067+
def get(
1068+
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1069+
) -> "_RequestContextManager":
1070+
"""Perform HTTP GET request."""
1071+
return _RequestContextManager(
1072+
self._request(
1073+
hdrs.METH_GET, url, allow_redirects=allow_redirects, **kwargs
1074+
)
1075+
)
9961076

997-
def options(
998-
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
999-
) -> "_RequestContextManager":
1000-
"""Perform HTTP OPTIONS request."""
1001-
return _RequestContextManager(
1002-
self._request(
1003-
hdrs.METH_OPTIONS, url, allow_redirects=allow_redirects, **kwargs
1077+
def options(
1078+
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1079+
) -> "_RequestContextManager":
1080+
"""Perform HTTP OPTIONS request."""
1081+
return _RequestContextManager(
1082+
self._request(
1083+
hdrs.METH_OPTIONS, url, allow_redirects=allow_redirects, **kwargs
1084+
)
10041085
)
1005-
)
10061086

1007-
def head(
1008-
self, url: StrOrURL, *, allow_redirects: bool = False, **kwargs: Any
1009-
) -> "_RequestContextManager":
1010-
"""Perform HTTP HEAD request."""
1011-
return _RequestContextManager(
1012-
self._request(
1013-
hdrs.METH_HEAD, url, allow_redirects=allow_redirects, **kwargs
1087+
def head(
1088+
self, url: StrOrURL, *, allow_redirects: bool = False, **kwargs: Any
1089+
) -> "_RequestContextManager":
1090+
"""Perform HTTP HEAD request."""
1091+
return _RequestContextManager(
1092+
self._request(
1093+
hdrs.METH_HEAD, url, allow_redirects=allow_redirects, **kwargs
1094+
)
10141095
)
1015-
)
10161096

1017-
def post(
1018-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1019-
) -> "_RequestContextManager":
1020-
"""Perform HTTP POST request."""
1021-
return _RequestContextManager(
1022-
self._request(hdrs.METH_POST, url, data=data, **kwargs)
1023-
)
1097+
def post(
1098+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1099+
) -> "_RequestContextManager":
1100+
"""Perform HTTP POST request."""
1101+
return _RequestContextManager(
1102+
self._request(hdrs.METH_POST, url, data=data, **kwargs)
1103+
)
10241104

1025-
def put(
1026-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1027-
) -> "_RequestContextManager":
1028-
"""Perform HTTP PUT request."""
1029-
return _RequestContextManager(
1030-
self._request(hdrs.METH_PUT, url, data=data, **kwargs)
1031-
)
1105+
def put(
1106+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1107+
) -> "_RequestContextManager":
1108+
"""Perform HTTP PUT request."""
1109+
return _RequestContextManager(
1110+
self._request(hdrs.METH_PUT, url, data=data, **kwargs)
1111+
)
10321112

1033-
def patch(
1034-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1035-
) -> "_RequestContextManager":
1036-
"""Perform HTTP PATCH request."""
1037-
return _RequestContextManager(
1038-
self._request(hdrs.METH_PATCH, url, data=data, **kwargs)
1039-
)
1113+
def patch(
1114+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1115+
) -> "_RequestContextManager":
1116+
"""Perform HTTP PATCH request."""
1117+
return _RequestContextManager(
1118+
self._request(hdrs.METH_PATCH, url, data=data, **kwargs)
1119+
)
10401120

1041-
def delete(self, url: StrOrURL, **kwargs: Any) -> "_RequestContextManager":
1042-
"""Perform HTTP DELETE request."""
1043-
return _RequestContextManager(self._request(hdrs.METH_DELETE, url, **kwargs))
1121+
def delete(self, url: StrOrURL, **kwargs: Any) -> "_RequestContextManager":
1122+
"""Perform HTTP DELETE request."""
1123+
return _RequestContextManager(
1124+
self._request(hdrs.METH_DELETE, url, **kwargs)
1125+
)
10441126

10451127
async def close(self) -> None:
10461128
"""Close underlying connector.

0 commit comments

Comments
 (0)