From a6597520dec2d7974944285b5dbfa372275034a7 Mon Sep 17 00:00:00 2001 From: g97iulio1609 Date: Sat, 28 Feb 2026 06:35:18 +0100 Subject: [PATCH 1/2] perf: use deque for FormData.add_fields() queue add_fields() drains a work-list via .pop(0) and may grow it with .extend() when MultiDict entries are encountered (BFS pattern). Each .pop(0) is O(n); switching to collections.deque with .popleft() gives O(1) front removal. --- aiohttp/formdata.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aiohttp/formdata.py b/aiohttp/formdata.py index 8e9157f8e07..50dae68244f 100644 --- a/aiohttp/formdata.py +++ b/aiohttp/formdata.py @@ -1,4 +1,5 @@ import io +from collections import deque from collections.abc import Iterable from typing import Any from urllib.parse import urlencode @@ -81,10 +82,10 @@ def add_field( self._fields.append((type_options, headers, value)) def add_fields(self, *fields: Any) -> None: - to_add = list(fields) + to_add: deque[Any] = deque(fields) while to_add: - rec = to_add.pop(0) + rec = to_add.popleft() if isinstance(rec, io.IOBase): k = guess_filename(rec, "unknown") From 63c7ea9cc751eb77a71d27fa437f55f2a25a02fe Mon Sep 17 00:00:00 2001 From: g97iulio1609 Date: Sat, 28 Feb 2026 21:33:27 +0100 Subject: [PATCH 2/2] ci: re-trigger CI (flaky test_data_file)