Skip to content

Commit ce798c7

Browse files
max-muotopatchback[bot]
authored andcommitted
Add full request typing signatures for session HTTP methods (#8463)
(cherry picked from commit 9386854)
1 parent 6d2c5cb commit ce798c7

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
@@ -27,6 +27,7 @@
2727
Set,
2828
Tuple,
2929
Type,
30+
TypedDict,
3031
TypeVar,
3132
Union,
3233
)
@@ -150,6 +151,37 @@
150151
else:
151152
SSLContext = None
152153

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

154186
@attr.s(auto_attribs=True, frozen=True, slots=True)
155187
class ClientTimeout:
@@ -1024,61 +1056,111 @@ def _prepare_headers(self, headers: Optional[LooseHeaders]) -> "CIMultiDict[str]
10241056
added_names.add(key)
10251057
return result
10261058

1027-
def get(
1028-
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1029-
) -> "_RequestContextManager":
1030-
"""Perform HTTP GET request."""
1031-
return _RequestContextManager(
1032-
self._request(hdrs.METH_GET, url, allow_redirects=allow_redirects, **kwargs)
1033-
)
1059+
if sys.version_info >= (3, 11) and TYPE_CHECKING:
1060+
1061+
def get(
1062+
self,
1063+
url: StrOrURL,
1064+
**kwargs: Unpack[_RequestOptions],
1065+
) -> "_RequestContextManager": ...
1066+
1067+
def options(
1068+
self,
1069+
url: StrOrURL,
1070+
**kwargs: Unpack[_RequestOptions],
1071+
) -> "_RequestContextManager": ...
1072+
1073+
def head(
1074+
self,
1075+
url: StrOrURL,
1076+
**kwargs: Unpack[_RequestOptions],
1077+
) -> "_RequestContextManager": ...
1078+
1079+
def post(
1080+
self,
1081+
url: StrOrURL,
1082+
**kwargs: Unpack[_RequestOptions],
1083+
) -> "_RequestContextManager": ...
1084+
1085+
def put(
1086+
self,
1087+
url: StrOrURL,
1088+
**kwargs: Unpack[_RequestOptions],
1089+
) -> "_RequestContextManager": ...
1090+
1091+
def patch(
1092+
self,
1093+
url: StrOrURL,
1094+
**kwargs: Unpack[_RequestOptions],
1095+
) -> "_RequestContextManager": ...
1096+
1097+
def delete(
1098+
self,
1099+
url: StrOrURL,
1100+
**kwargs: Unpack[_RequestOptions],
1101+
) -> "_RequestContextManager": ...
1102+
1103+
else:
1104+
1105+
def get(
1106+
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1107+
) -> "_RequestContextManager":
1108+
"""Perform HTTP GET request."""
1109+
return _RequestContextManager(
1110+
self._request(
1111+
hdrs.METH_GET, url, allow_redirects=allow_redirects, **kwargs
1112+
)
1113+
)
10341114

1035-
def options(
1036-
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1037-
) -> "_RequestContextManager":
1038-
"""Perform HTTP OPTIONS request."""
1039-
return _RequestContextManager(
1040-
self._request(
1041-
hdrs.METH_OPTIONS, url, allow_redirects=allow_redirects, **kwargs
1115+
def options(
1116+
self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any
1117+
) -> "_RequestContextManager":
1118+
"""Perform HTTP OPTIONS request."""
1119+
return _RequestContextManager(
1120+
self._request(
1121+
hdrs.METH_OPTIONS, url, allow_redirects=allow_redirects, **kwargs
1122+
)
10421123
)
1043-
)
10441124

1045-
def head(
1046-
self, url: StrOrURL, *, allow_redirects: bool = False, **kwargs: Any
1047-
) -> "_RequestContextManager":
1048-
"""Perform HTTP HEAD request."""
1049-
return _RequestContextManager(
1050-
self._request(
1051-
hdrs.METH_HEAD, url, allow_redirects=allow_redirects, **kwargs
1125+
def head(
1126+
self, url: StrOrURL, *, allow_redirects: bool = False, **kwargs: Any
1127+
) -> "_RequestContextManager":
1128+
"""Perform HTTP HEAD request."""
1129+
return _RequestContextManager(
1130+
self._request(
1131+
hdrs.METH_HEAD, url, allow_redirects=allow_redirects, **kwargs
1132+
)
10521133
)
1053-
)
10541134

1055-
def post(
1056-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1057-
) -> "_RequestContextManager":
1058-
"""Perform HTTP POST request."""
1059-
return _RequestContextManager(
1060-
self._request(hdrs.METH_POST, url, data=data, **kwargs)
1061-
)
1135+
def post(
1136+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1137+
) -> "_RequestContextManager":
1138+
"""Perform HTTP POST request."""
1139+
return _RequestContextManager(
1140+
self._request(hdrs.METH_POST, url, data=data, **kwargs)
1141+
)
10621142

1063-
def put(
1064-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1065-
) -> "_RequestContextManager":
1066-
"""Perform HTTP PUT request."""
1067-
return _RequestContextManager(
1068-
self._request(hdrs.METH_PUT, url, data=data, **kwargs)
1069-
)
1143+
def put(
1144+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1145+
) -> "_RequestContextManager":
1146+
"""Perform HTTP PUT request."""
1147+
return _RequestContextManager(
1148+
self._request(hdrs.METH_PUT, url, data=data, **kwargs)
1149+
)
10701150

1071-
def patch(
1072-
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1073-
) -> "_RequestContextManager":
1074-
"""Perform HTTP PATCH request."""
1075-
return _RequestContextManager(
1076-
self._request(hdrs.METH_PATCH, url, data=data, **kwargs)
1077-
)
1151+
def patch(
1152+
self, url: StrOrURL, *, data: Any = None, **kwargs: Any
1153+
) -> "_RequestContextManager":
1154+
"""Perform HTTP PATCH request."""
1155+
return _RequestContextManager(
1156+
self._request(hdrs.METH_PATCH, url, data=data, **kwargs)
1157+
)
10781158

1079-
def delete(self, url: StrOrURL, **kwargs: Any) -> "_RequestContextManager":
1080-
"""Perform HTTP DELETE request."""
1081-
return _RequestContextManager(self._request(hdrs.METH_DELETE, url, **kwargs))
1159+
def delete(self, url: StrOrURL, **kwargs: Any) -> "_RequestContextManager":
1160+
"""Perform HTTP DELETE request."""
1161+
return _RequestContextManager(
1162+
self._request(hdrs.METH_DELETE, url, **kwargs)
1163+
)
10821164

10831165
async def close(self) -> None:
10841166
"""Close underlying connector.

0 commit comments

Comments
 (0)