Skip to content

Commit f543fea

Browse files
[PR #10902/94de3f9d backport][3.12] Middleware cleanups (#10904)
Co-authored-by: J. Nick Koston <[email protected]>
1 parent 64fc600 commit f543fea

File tree

6 files changed

+255
-198
lines changed

6 files changed

+255
-198
lines changed

CHANGES/10902.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
9732.feature.rst

aiohttp/client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
List,
2525
Mapping,
2626
Optional,
27+
Sequence,
2728
Set,
2829
Tuple,
2930
Type,
@@ -192,7 +193,7 @@ class _RequestOptions(TypedDict, total=False):
192193
auto_decompress: Union[bool, None]
193194
max_line_size: Union[int, None]
194195
max_field_size: Union[int, None]
195-
middlewares: Optional[Tuple[ClientMiddlewareType, ...]]
196+
middlewares: Optional[Sequence[ClientMiddlewareType]]
196197

197198

198199
@attr.s(auto_attribs=True, frozen=True, slots=True)
@@ -301,7 +302,7 @@ def __init__(
301302
max_line_size: int = 8190,
302303
max_field_size: int = 8190,
303304
fallback_charset_resolver: _CharsetResolver = lambda r, b: "utf-8",
304-
middlewares: Optional[Tuple[ClientMiddlewareType, ...]] = None,
305+
middlewares: Optional[Sequence[ClientMiddlewareType]] = None,
305306
) -> None:
306307
# We initialise _connector to None immediately, as it's referenced in __del__()
307308
# and could cause issues if an exception occurs during initialisation.
@@ -505,7 +506,7 @@ async def _request(
505506
auto_decompress: Optional[bool] = None,
506507
max_line_size: Optional[int] = None,
507508
max_field_size: Optional[int] = None,
508-
middlewares: Optional[Tuple[ClientMiddlewareType, ...]] = None,
509+
middlewares: Optional[Sequence[ClientMiddlewareType]] = None,
509510
) -> ClientResponse:
510511

511512
# NOTE: timeout clamps existing connect and read timeouts. We cannot
@@ -705,7 +706,6 @@ async def _request(
705706
trust_env=self.trust_env,
706707
)
707708

708-
# Core request handler - now includes connection logic
709709
async def _connect_and_send_request(
710710
req: ClientRequest,
711711
) -> ClientResponse:

aiohttp/client_middlewares.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Client middleware support."""
22

3-
from collections.abc import Awaitable, Callable
3+
from collections.abc import Awaitable, Callable, Sequence
44

55
from .client_reqrep import ClientRequest, ClientResponse
66

@@ -17,7 +17,7 @@
1717

1818
def build_client_middlewares(
1919
handler: ClientHandlerType,
20-
middlewares: tuple[ClientMiddlewareType, ...],
20+
middlewares: Sequence[ClientMiddlewareType],
2121
) -> ClientHandlerType:
2222
"""
2323
Apply middlewares to request handler.
@@ -28,9 +28,6 @@ def build_client_middlewares(
2828
This implementation avoids using partial/update_wrapper to minimize overhead
2929
and doesn't cache to avoid holding references to stateful middleware.
3030
"""
31-
if not middlewares:
32-
return handler
33-
3431
# Optimize for single middleware case
3532
if len(middlewares) == 1:
3633
middleware = middlewares[0]

0 commit comments

Comments
 (0)