This is an automated email from the ASF dual-hosted git repository.
jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 21f6df79a78 Bump aiohttp regarding dependabot warning (#67978)
21f6df79a78 is described below
commit 21f6df79a781d80813b09bbd8737c52076e4c83b
Author: Jens Scheffler <[email protected]>
AuthorDate: Thu Jun 4 23:51:02 2026 +0200
Bump aiohttp regarding dependabot warning (#67978)
* Bump aiohttp regarding dependabot warning
* Fix aioresponses not compatble with aiohttp anymore
* Remove aioresponses as incompatibility for testing with own mock
* Add missing transitive dependency to slack
* Fix missing attrs
---
devel-common/pyproject.toml | 1 -
.../src/tests_common/test_utils/aiohttp.py | 90 ++++++++
generated/provider_dependencies.json | 11 +-
generated/provider_dependencies.json.sha256sum | 2 +-
providers/apache/livy/README.rst | 2 +-
providers/apache/livy/docs/index.rst | 2 +-
providers/apache/livy/pyproject.toml | 2 +-
.../tests/unit/atlassian/jira/hooks/test_jira.py | 23 +-
providers/databricks/README.rst | 2 +-
providers/databricks/docs/index.rst | 2 +-
providers/databricks/pyproject.toml | 2 +-
providers/dbt/cloud/README.rst | 2 +-
providers/dbt/cloud/docs/index.rst | 2 +-
providers/dbt/cloud/pyproject.toml | 2 +-
.../unit/discord/hooks/test_discord_webhook.py | 21 +-
providers/edge3/README.rst | 2 +-
providers/edge3/docs/index.rst | 2 +-
providers/edge3/pyproject.toml | 2 +-
.../edge3/tests/unit/edge3/cli/test_api_client.py | 127 +++++++---
.../unit/google/cloud/hooks/test_cloud_sql.py | 46 ++--
.../unit/google/cloud/hooks/test_datafusion.py | 46 ++--
providers/http/README.rst | 2 +-
providers/http/docs/index.rst | 2 +-
providers/http/pyproject.toml | 2 +-
providers/http/tests/unit/http/hooks/test_http.py | 190 +++++++--------
.../unit/pagerduty/hooks/test_pagerduty_events.py | 30 ++-
providers/slack/README.rst | 1 +
providers/slack/docs/index.rst | 1 +
providers/slack/pyproject.toml | 1 +
pyproject.toml | 7 +
shared/dagnode/tests/dagnode/test_node.py | 6 +-
uv.lock | 255 +++++++++++----------
32 files changed, 506 insertions(+), 382 deletions(-)
diff --git a/devel-common/pyproject.toml b/devel-common/pyproject.toml
index ebbbdb2e3d5..d8807ab3528 100644
--- a/devel-common/pyproject.toml
+++ b/devel-common/pyproject.toml
@@ -28,7 +28,6 @@ classifiers = [
]
dependencies = [
- "aioresponses>=0.7.6",
"black>=26.1.0",
"filelock>=3.13.0",
"jmespath>=0.7.0",
diff --git a/devel-common/src/tests_common/test_utils/aiohttp.py
b/devel-common/src/tests_common/test_utils/aiohttp.py
new file mode 100644
index 00000000000..f88b65c8723
--- /dev/null
+++ b/devel-common/src/tests_common/test_utils/aiohttp.py
@@ -0,0 +1,90 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import json
+from http import HTTPStatus
+from typing import Any
+
+from aiohttp import ClientResponseError, RequestInfo
+from yarl import URL
+
+
+class MockAiohttpClientResponse:
+ """Minimal aiohttp-like response for unit tests.
+
+ This avoids constructing ``aiohttp.ClientResponse`` directly, which can
change
+ required constructor parameters between aiohttp versions.
+ """
+
+ def __init__(
+ self,
+ *,
+ status: int = 200,
+ payload: Any = None,
+ text_payload: str | None = None,
+ method: str = "GET",
+ url: str = "http://example.com",
+ reason: str | None = None,
+ ) -> None:
+ self.status = status
+ self._payload = payload
+ self._text_payload = text_payload
+ self._method = method
+ self._url = url
+ self._reason = reason
+
+ @property
+ def reason(self) -> str:
+ if self._reason is not None:
+ return self._reason
+ try:
+ return HTTPStatus(self.status).phrase
+ except ValueError:
+ return ""
+
+ def raise_for_status(self) -> None:
+ if self.status >= HTTPStatus.BAD_REQUEST:
+ raise ClientResponseError(
+ request_info=RequestInfo(url=URL(self._url),
method=self._method, headers=None), # type: ignore[arg-type]
+ history=(),
+ status=self.status,
+ message=self.reason,
+ )
+
+ async def json(self, content_type: str | None = None) -> Any:
+ del content_type
+ if self._payload is None:
+ return {}
+ if isinstance(self._payload, (dict, list, int, float, bool)):
+ return self._payload
+ if isinstance(self._payload, bytes):
+ return json.loads(self._payload.decode())
+ if isinstance(self._payload, str):
+ return json.loads(self._payload)
+ return self._payload
+
+ async def text(self) -> str:
+ if self._text_payload is not None:
+ return self._text_payload
+ if self._payload is None:
+ return ""
+ if isinstance(self._payload, bytes):
+ return self._payload.decode()
+ if isinstance(self._payload, str):
+ return self._payload
+ return json.dumps(self._payload)
diff --git a/generated/provider_dependencies.json
b/generated/provider_dependencies.json
index 1387c1da42d..4f515a8bd1b 100644
--- a/generated/provider_dependencies.json
+++ b/generated/provider_dependencies.json
@@ -321,7 +321,7 @@
},
"apache.livy": {
"deps": [
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
"apache-airflow-providers-common-compat>=1.12.0",
"apache-airflow-providers-http>=6.0.1",
"apache-airflow>=2.11.0"
@@ -648,7 +648,7 @@
},
"databricks": {
"deps": [
- "aiohttp>=3.9.2, <4",
+ "aiohttp>=3.14.0, <4",
"apache-airflow-providers-common-compat>=1.13.0",
"apache-airflow-providers-common-sql>=1.32.0",
"apache-airflow>=2.11.0",
@@ -698,7 +698,7 @@
},
"dbt.cloud": {
"deps": [
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
"apache-airflow-providers-common-compat>=1.12.0",
"apache-airflow-providers-http",
"apache-airflow>=2.11.0",
@@ -768,7 +768,7 @@
"edge3": {
"deps": [
"aiofiles>=23.2.0",
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
"apache-airflow-providers-common-compat>=1.15.0",
"apache-airflow>=3.0.0,!=3.1.0",
"pydantic>=2.11.0",
@@ -1063,7 +1063,7 @@
},
"http": {
"deps": [
- "aiohttp>=3.12.14",
+ "aiohttp>=3.14.0",
"apache-airflow-providers-common-compat>=1.12.0",
"apache-airflow>=2.11.0",
"asgiref>=2.3.0; python_version < '3.14'",
@@ -1744,6 +1744,7 @@
},
"slack": {
"deps": [
+ "aiohttp>=3.14.0",
"apache-airflow-providers-common-compat>=1.10.1",
"apache-airflow-providers-common-sql>=1.27.0",
"apache-airflow>=2.11.0",
diff --git a/generated/provider_dependencies.json.sha256sum
b/generated/provider_dependencies.json.sha256sum
index 580078b1623..95164b9ed8a 100644
--- a/generated/provider_dependencies.json.sha256sum
+++ b/generated/provider_dependencies.json.sha256sum
@@ -1 +1 @@
-2ccde55d75b93c7fc2c5723fc7f74bf8995244606190c98acf005ea1f39f04ca
+d27aa81c6d9dccf8d5e95ad2422eceffbf6d00717fae734ebc27d13fa9759337
diff --git a/providers/apache/livy/README.rst b/providers/apache/livy/README.rst
index 9bbb56d6c97..3f9c971840a 100644
--- a/providers/apache/livy/README.rst
+++ b/providers/apache/livy/README.rst
@@ -56,7 +56,7 @@ PIP package Version required
``apache-airflow`` ``>=2.11.0``
``apache-airflow-providers-http`` ``>=6.0.1``
``apache-airflow-providers-common-compat`` ``>=1.12.0``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
========================================== ==================
Cross provider package dependencies
diff --git a/providers/apache/livy/docs/index.rst
b/providers/apache/livy/docs/index.rst
index 5c6ec882f29..a16e5c45813 100644
--- a/providers/apache/livy/docs/index.rst
+++ b/providers/apache/livy/docs/index.rst
@@ -102,7 +102,7 @@ PIP package Version required
``apache-airflow`` ``>=2.11.0``
``apache-airflow-providers-http`` ``>=6.0.1``
``apache-airflow-providers-common-compat`` ``>=1.12.0``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
========================================== ==================
Cross provider package dependencies
diff --git a/providers/apache/livy/pyproject.toml
b/providers/apache/livy/pyproject.toml
index c959d3cc2f7..8384615082d 100644
--- a/providers/apache/livy/pyproject.toml
+++ b/providers/apache/livy/pyproject.toml
@@ -62,7 +62,7 @@ dependencies = [
"apache-airflow>=2.11.0",
"apache-airflow-providers-http>=6.0.1",
"apache-airflow-providers-common-compat>=1.12.0",
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
]
[dependency-groups]
diff --git
a/providers/atlassian/jira/tests/unit/atlassian/jira/hooks/test_jira.py
b/providers/atlassian/jira/tests/unit/atlassian/jira/hooks/test_jira.py
index 0e18bccfedf..e961b71dedc 100644
--- a/providers/atlassian/jira/tests/unit/atlassian/jira/hooks/test_jira.py
+++ b/providers/atlassian/jira/tests/unit/atlassian/jira/hooks/test_jira.py
@@ -20,23 +20,14 @@ from __future__ import annotations
from unittest import mock
import pytest
-from aioresponses import aioresponses
from airflow.models import Connection
from airflow.providers.atlassian.jira.hooks.jira import JiraAsyncHook, JiraHook
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
from tests_common.test_utils.compat import connection_as_json
[email protected]
-def aioresponse():
- """
- Creates mock async API response.
- """
- with aioresponses() as async_response:
- yield async_response
-
-
@pytest.fixture
def mocked_jira_client():
with mock.patch("airflow.providers.atlassian.jira.hooks.jira.Jira",
autospec=True) as m:
@@ -176,7 +167,7 @@ class TestJiraAsyncHook:
assert mocked_function.call_args.kwargs.get("auth").password ==
"password"
@pytest.mark.asyncio
- async def test_create_issue_with_success(self, aioresponse,
setup_connections):
+ async def test_create_issue_with_success(self, setup_connections):
"""Asserts that create issue return with success."""
hook = JiraAsyncHook(jira_conn_id="jira_default")
fields = {
@@ -185,7 +176,11 @@ class TestJiraAsyncHook:
"summary": "test rest",
"description": "rest rest",
}
- aioresponse.post("http://test.atlassian.net/rest/api/2/issue",
status=200)
-
- res = await hook.create_issue(fields)
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_post:
+ mocked_post.return_value = MockAiohttpClientResponse(
+ status=200,
+ method="POST",
+ url="http://test.atlassian.net/rest/api/2/issue",
+ )
+ res = await hook.create_issue(fields)
assert res.status == 200
diff --git a/providers/databricks/README.rst b/providers/databricks/README.rst
index f2bcdbc3dcc..7ef609dafd5 100644
--- a/providers/databricks/README.rst
+++ b/providers/databricks/README.rst
@@ -58,7 +58,7 @@ PIP package Version required
``apache-airflow-providers-common-sql`` ``>=1.32.0``
``requests`` ``>=2.32.0,<3``
``databricks-sql-connector`` ``>=4.0.0``
-``aiohttp`` ``>=3.9.2,<4``
+``aiohttp`` ``>=3.14.0,<4``
``mergedeep`` ``>=1.3.4``
``pandas`` ``>=2.1.2; python_version <
"3.13"``
``pandas`` ``>=2.2.3; python_version >=
"3.13" and python_version < "3.14"``
diff --git a/providers/databricks/docs/index.rst
b/providers/databricks/docs/index.rst
index 6cde31cb134..d4a5a0a2bc1 100644
--- a/providers/databricks/docs/index.rst
+++ b/providers/databricks/docs/index.rst
@@ -106,7 +106,7 @@ PIP package Version required
``apache-airflow-providers-common-sql`` ``>=1.32.0``
``requests`` ``>=2.32.0,<3``
``databricks-sql-connector`` ``>=4.0.0``
-``aiohttp`` ``>=3.9.2,<4``
+``aiohttp`` ``>=3.14.0,<4``
``mergedeep`` ``>=1.3.4``
``pandas`` ``>=2.1.2; python_version <
"3.13"``
``pandas`` ``>=2.2.3; python_version >=
"3.13" and python_version < "3.14"``
diff --git a/providers/databricks/pyproject.toml
b/providers/databricks/pyproject.toml
index e2337d88220..a85a7e7017c 100644
--- a/providers/databricks/pyproject.toml
+++ b/providers/databricks/pyproject.toml
@@ -64,7 +64,7 @@ dependencies = [
"apache-airflow-providers-common-sql>=1.32.0",
"requests>=2.32.0,<3",
"databricks-sql-connector>=4.0.0", # use >=4.2.7 for pandas 3.0.0. See
https://github.com/databricks/databricks-sql-python/pull/768
- "aiohttp>=3.9.2, <4",
+ "aiohttp>=3.14.0, <4",
"mergedeep>=1.3.4",
'pandas>=2.1.2; python_version <"3.13"',
'pandas>=2.2.3; python_version >="3.13" and python_version <"3.14"',
diff --git a/providers/dbt/cloud/README.rst b/providers/dbt/cloud/README.rst
index 674730706aa..fa6867f650b 100644
--- a/providers/dbt/cloud/README.rst
+++ b/providers/dbt/cloud/README.rst
@@ -58,7 +58,7 @@ PIP package Version required
``apache-airflow-providers-http``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
``tenacity`` ``>=8.3.0``
==========================================
======================================
diff --git a/providers/dbt/cloud/docs/index.rst
b/providers/dbt/cloud/docs/index.rst
index 098495095f3..4d29df082df 100644
--- a/providers/dbt/cloud/docs/index.rst
+++ b/providers/dbt/cloud/docs/index.rst
@@ -109,7 +109,7 @@ PIP package Version required
``apache-airflow-providers-http``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
``tenacity`` ``>=8.3.0``
==========================================
======================================
diff --git a/providers/dbt/cloud/pyproject.toml
b/providers/dbt/cloud/pyproject.toml
index d5418a2e12f..6a70927592f 100644
--- a/providers/dbt/cloud/pyproject.toml
+++ b/providers/dbt/cloud/pyproject.toml
@@ -64,7 +64,7 @@ dependencies = [
"apache-airflow-providers-http",
"asgiref>=2.3.0; python_version < '3.14'",
"asgiref>=3.11.1; python_version >= '3.14'",
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
"tenacity>=8.3.0",
]
diff --git a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
index 3cf82c7f113..81af113f7c4 100644
--- a/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
+++ b/providers/discord/tests/unit/discord/hooks/test_discord_webhook.py
@@ -22,7 +22,6 @@ from contextlib import nullcontext
from unittest import mock
import pytest
-from aioresponses import aioresponses
from airflow.models import Connection
from airflow.providers.discord.hooks.discord_webhook import (
@@ -31,14 +30,7 @@ from airflow.providers.discord.hooks.discord_webhook import (
DiscordWebhookHook,
)
-
[email protected]
-def aioresponse():
- """
- Creates mock async API response.
- """
- with aioresponses() as async_response:
- yield async_response
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
class TestDiscordCommonHandler:
@@ -275,7 +267,7 @@ class TestDiscordWebhookAsyncHook:
assert mocked_function.call_args.kwargs.get("data") ==
json.dumps(expected_payload_dict)
@pytest.mark.asyncio
- async def test_execute_with_success(self, aioresponse):
+ async def test_execute_with_success(self):
conn_id = "default-discord-webhook"
hook = DiscordWebhookAsyncHook(
http_conn_id=conn_id,
@@ -284,5 +276,10 @@ class TestDiscordWebhookAsyncHook:
avatar_url="https://static-cdn.avatars.com/my-avatar-path",
tts=False,
)
-
aioresponse.post("https://discordapp.com/api/webhooks/00000/some-discord-token_000",
status=200)
- await hook.execute()
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_post:
+ mocked_post.return_value = MockAiohttpClientResponse(
+ status=200,
+ method="POST",
+
url="https://discordapp.com/api/webhooks/00000/some-discord-token_000",
+ )
+ await hook.execute()
diff --git a/providers/edge3/README.rst b/providers/edge3/README.rst
index 801c2e916bd..98c484fcab0 100644
--- a/providers/edge3/README.rst
+++ b/providers/edge3/README.rst
@@ -70,7 +70,7 @@ PIP package Version required
``pydantic`` ``>=2.11.0``
``retryhttp`` ``>=1.4.0``
``aiofiles`` ``>=23.2.0``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
========================================== ===================
Cross provider package dependencies
diff --git a/providers/edge3/docs/index.rst b/providers/edge3/docs/index.rst
index 51d73abe9fe..96f663c22a6 100644
--- a/providers/edge3/docs/index.rst
+++ b/providers/edge3/docs/index.rst
@@ -126,7 +126,7 @@ PIP package Version required
``pydantic`` ``>=2.11.0``
``retryhttp`` ``>=1.4.0``
``aiofiles`` ``>=23.2.0``
-``aiohttp`` ``>=3.9.2``
+``aiohttp`` ``>=3.14.0``
========================================== ===================
Cross provider package dependencies
diff --git a/providers/edge3/pyproject.toml b/providers/edge3/pyproject.toml
index e339c4a4a16..aff24a39297 100644
--- a/providers/edge3/pyproject.toml
+++ b/providers/edge3/pyproject.toml
@@ -71,7 +71,7 @@ dependencies = [
"pydantic>=2.11.0",
"retryhttp>=1.4.0",
"aiofiles>=23.2.0",
- "aiohttp>=3.9.2",
+ "aiohttp>=3.14.0",
]
[dependency-groups]
diff --git a/providers/edge3/tests/unit/edge3/cli/test_api_client.py
b/providers/edge3/tests/unit/edge3/cli/test_api_client.py
index 186f403ea80..8554d4be796 100644
--- a/providers/edge3/tests/unit/edge3/cli/test_api_client.py
+++ b/providers/edge3/tests/unit/edge3/cli/test_api_client.py
@@ -16,71 +16,132 @@
# under the License.
from __future__ import annotations
+from dataclasses import dataclass
from http import HTTPStatus
-from typing import TYPE_CHECKING
from unittest.mock import patch
import pytest
from aiohttp import ClientResponseError, ConnectionTimeoutError
-from aioresponses import aioresponses
-from yarl import URL
from airflow.providers.edge3.cli.api_client import _make_generic_request
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
from tests_common.test_utils.config import conf_vars
-if TYPE_CHECKING:
- from aioresponses.core import RequestCall
-
pytestmark = [pytest.mark.asyncio]
MOCK_ENDPOINT = "https://mock-api-test-endpoint"
MOCK_OK_PAYLOAD = {"test": "ok"}
[email protected]
-def mock_responses():
- with conf_vars({("edge", "api_url"): MOCK_ENDPOINT}), aioresponses() as m:
- yield m
+@dataclass
+class _ResponseSpec:
+ status: int
+ payload: dict | None = None
-class TestApiClient:
- async def test_make_generic_request_success(self, mock_responses:
aioresponses):
- mock_responses.get(f"{MOCK_ENDPOINT}/mock_service", repeat=True,
payload=MOCK_OK_PAYLOAD)
- mock_responses.post(f"{MOCK_ENDPOINT}/service_no_content",
status=HTTPStatus.NO_CONTENT, repeat=True)
+class _MockRequestContext:
+ def __init__(self, *, response: MockAiohttpClientResponse | None = None,
exc: Exception | None = None):
+ self._response = response
+ self._exc = exc
+
+ async def __aenter__(self) -> MockAiohttpClientResponse:
+ if self._exc:
+ raise self._exc
+ return self._response # type: ignore[return-value]
+
+ async def __aexit__(self, exc_type, exc, tb) -> bool:
+ return False
+
+
+def _build_request_side_effect(
+ sequence: list[_ResponseSpec | Exception],
+ calls: list[tuple[str, str, str | None]],
+):
+ iterator = iter(sequence)
- result1 = await _make_generic_request("GET",
f"{MOCK_ENDPOINT}/mock_service")
- result2 = await _make_generic_request("POST",
f"{MOCK_ENDPOINT}/service_no_content", "test")
+ def _request(method: str, *, url: str, data: str | None = None,
headers=None):
+ calls.append((method, url, data))
+ current = next(iterator)
+ if isinstance(current, Exception):
+ return _MockRequestContext(exc=current)
+ return _MockRequestContext(
+ response=MockAiohttpClientResponse(
+ status=current.status,
+ payload=current.payload,
+ method=method,
+ url=url,
+ reason=f"HTTP {current.status}",
+ )
+ )
+
+ return _request
+
+
+class TestApiClient:
+ @patch.dict("os.environ", {"AIRFLOW__EDGE__API_RETRIES": "10"},
clear=False)
+ async def test_make_generic_request_success(self):
+ calls: list[tuple[str, str, str | None]] = []
+ request_side_effect = _build_request_side_effect(
+ [
+ _ResponseSpec(status=HTTPStatus.OK, payload=MOCK_OK_PAYLOAD),
+ _ResponseSpec(status=HTTPStatus.NO_CONTENT),
+ ],
+ calls,
+ )
+
+ with (
+ conf_vars({("edge", "api_url"): MOCK_ENDPOINT}),
+ patch("airflow.providers.edge3.cli.api_client.request",
side_effect=request_side_effect),
+ ):
+ result1 = await _make_generic_request("GET",
f"{MOCK_ENDPOINT}/mock_service")
+ result2 = await _make_generic_request("POST",
f"{MOCK_ENDPOINT}/service_no_content", "test")
assert result1 == MOCK_OK_PAYLOAD
assert result2 is None
- assert len(mock_responses.requests) == 2
+ assert len(calls) == 2
@patch("asyncio.sleep", return_value=None)
- async def test_make_generic_request_retry(self, mock_sleep,
mock_responses: aioresponses):
+ async def test_make_generic_request_retry(self, mock_sleep):
flaky_service = f"{MOCK_ENDPOINT}/flaky_service"
- mock_responses.get(flaky_service,
status=HTTPStatus.SERVICE_UNAVAILABLE)
- mock_responses.get(flaky_service,
status=HTTPStatus.SERVICE_UNAVAILABLE)
- mock_responses.get(flaky_service,
status=HTTPStatus.SERVICE_UNAVAILABLE)
- mock_responses.get(flaky_service, exception=ConnectionTimeoutError())
- mock_responses.get(flaky_service, payload=MOCK_OK_PAYLOAD)
- result = await _make_generic_request("GET", flaky_service)
+ calls: list[tuple[str, str, str | None]] = []
+ request_side_effect = _build_request_side_effect(
+ [
+ _ResponseSpec(status=HTTPStatus.SERVICE_UNAVAILABLE),
+ _ResponseSpec(status=HTTPStatus.SERVICE_UNAVAILABLE),
+ _ResponseSpec(status=HTTPStatus.SERVICE_UNAVAILABLE),
+ ConnectionTimeoutError(),
+ _ResponseSpec(status=HTTPStatus.OK, payload=MOCK_OK_PAYLOAD),
+ ],
+ calls,
+ )
+ with (
+ conf_vars({("edge", "api_url"): MOCK_ENDPOINT}),
+ patch("airflow.providers.edge3.cli.api_client.request",
side_effect=request_side_effect),
+ ):
+ result = await _make_generic_request("GET", flaky_service)
assert result == MOCK_OK_PAYLOAD
- calls: list[RequestCall] | None = mock_responses.requests.get(("GET",
URL(flaky_service)))
- assert calls
assert len(calls) == 5
+ assert all(call[0] == "GET" and call[1] == flaky_service for call in
calls)
@patch("asyncio.sleep", return_value=None)
- async def test_make_generic_request_unrecoverable_error(self, mock_sleep,
mock_responses: aioresponses):
+ async def test_make_generic_request_unrecoverable_error(self, mock_sleep):
unreliable_service = f"{MOCK_ENDPOINT}/bad_service"
- mock_responses.post(unreliable_service,
status=HTTPStatus.INTERNAL_SERVER_ERROR, repeat=True)
-
- with pytest.raises(ClientResponseError) as err:
- await _make_generic_request("POST", unreliable_service, "test")
+ calls: list[tuple[str, str, str | None]] = []
+ request_side_effect = _build_request_side_effect(
+ [_ResponseSpec(status=HTTPStatus.INTERNAL_SERVER_ERROR) for _ in
range(10)],
+ calls,
+ )
+
+ with (
+ conf_vars({("edge", "api_url"): MOCK_ENDPOINT}),
+ patch("airflow.providers.edge3.cli.api_client.request",
side_effect=request_side_effect),
+ ):
+ with pytest.raises(ClientResponseError) as err:
+ await _make_generic_request("POST", unreliable_service, "test")
mock_sleep.assert_called()
assert err.value.status == HTTPStatus.INTERNAL_SERVER_ERROR
- calls: list[RequestCall] | None = mock_responses.requests.get(("POST",
URL(unreliable_service)))
- assert calls
assert len(calls) == 10
+ assert all(call[0] == "POST" and call[1] == unreliable_service for
call in calls)
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_cloud_sql.py
b/providers/google/tests/unit/google/cloud/hooks/test_cloud_sql.py
index 710f4793fa8..54480d17118 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_cloud_sql.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_cloud_sql.py
@@ -28,15 +28,13 @@ from unittest import mock
from unittest.mock import PropertyMock, call, mock_open
from urllib.parse import parse_qsl, unquote, urlsplit
-import aiohttp
import httplib2
import pytest
-from aiohttp.helpers import TimerNoop
from googleapiclient.errors import HttpError
-from yarl import URL
from airflow.providers.common.compat.sdk import AirflowException
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
from tests_common.test_utils.version_compat import AIRFLOW_V_3_1_PLUS
if AIRFLOW_V_3_1_PLUS:
@@ -1980,21 +1978,12 @@ class TestCloudSQLAsyncHook:
@pytest.mark.asyncio
@mock.patch(HOOK_STR.format("CloudSQLAsyncHook.get_operation_name"))
async def
test_async_get_operation_completed_should_execute_successfully(self,
mocked_get, hook_async):
- response = aiohttp.ClientResponse(
- "get",
- URL(OPERATION_URL),
- request_info=mock.Mock(),
- writer=mock.Mock(),
- continue100=None,
- timer=TimerNoop(),
- traces=[],
- loop=mock.Mock(),
- session=None,
- )
- response.status = 200
- mocked_get.return_value = response
- mocked_get.return_value._headers = {"Authorization": "test-token"}
- mocked_get.return_value._body = b'{"status": "DONE"}'
+ mocked_get.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload={"status": "DONE"},
+ method="GET",
+ url=OPERATION_URL,
+ )
operation = await
hook_async.get_operation(operation_name=OPERATION_NAME, project_id=PROJECT_ID)
mocked_get.assert_awaited_once()
@@ -2003,21 +1992,12 @@ class TestCloudSQLAsyncHook:
@pytest.mark.asyncio
@mock.patch(HOOK_STR.format("CloudSQLAsyncHook.get_operation_name"))
async def
test_async_get_operation_running_should_execute_successfully(self, mocked_get,
hook_async):
- response = aiohttp.ClientResponse(
- "get",
- URL(OPERATION_URL),
- request_info=mock.Mock(),
- writer=mock.Mock(),
- continue100=None,
- timer=TimerNoop(),
- traces=[],
- loop=mock.Mock(),
- session=None,
- )
- response.status = 200
- mocked_get.return_value = response
- mocked_get.return_value._headers = {"Authorization": "test-token"}
- mocked_get.return_value._body = b'{"status": "RUNNING"}'
+ mocked_get.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload={"status": "RUNNING"},
+ method="GET",
+ url=OPERATION_URL,
+ )
operation = await
hook_async.get_operation(operation_name=OPERATION_NAME, project_id=PROJECT_ID)
mocked_get.assert_awaited_once()
diff --git a/providers/google/tests/unit/google/cloud/hooks/test_datafusion.py
b/providers/google/tests/unit/google/cloud/hooks/test_datafusion.py
index 4e9295595e9..ab39d1bf712 100644
--- a/providers/google/tests/unit/google/cloud/hooks/test_datafusion.py
+++ b/providers/google/tests/unit/google/cloud/hooks/test_datafusion.py
@@ -20,15 +20,13 @@ import json
import logging
from unittest import mock
-import aiohttp
import pytest
-from aiohttp.helpers import TimerNoop
from requests.exceptions import HTTPError
-from yarl import URL
from airflow.providers.google.cloud.hooks.datafusion import
DataFusionAsyncHook, DataFusionHook
from airflow.providers.google.cloud.utils.datafusion import
DataFusionPipelineType
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
from unit.google.cloud.utils.base_gcp_mock import
mock_base_gcp_hook_default_project_id
API_VERSION = "v1beta1"
@@ -638,21 +636,12 @@ class TestDataFusionHookAsynch:
async def
test_async_get_pipeline_status_completed_should_execute_successfully(
self, mocked_get, hook_async, pipeline_type, constructed_url
):
- response = aiohttp.ClientResponse(
- "get",
- URL(constructed_url),
- request_info=mock.Mock(),
- writer=mock.Mock(),
- continue100=None,
- timer=TimerNoop(),
- traces=[],
- loop=mock.Mock(),
- session=None,
- )
- response.status = 200
- mocked_get.return_value = response
- mocked_get.return_value._headers = {"Authorization": "some-token"}
- mocked_get.return_value._body = b'{"status": "COMPLETED"}'
+ mocked_get.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload={"status": "COMPLETED"},
+ method="GET",
+ url=constructed_url,
+ )
pipeline_status = await hook_async.get_pipeline_status(
pipeline_name=PIPELINE_NAME,
@@ -676,21 +665,12 @@ class TestDataFusionHookAsynch:
self, mocked_get, hook_async, pipeline_type, constructed_url
):
"""Assets that the DataFusionAsyncHook returns pending response when
job is still in running state"""
- response = aiohttp.ClientResponse(
- "get",
- URL(constructed_url),
- request_info=mock.Mock(),
- writer=mock.Mock(),
- continue100=None,
- timer=TimerNoop(),
- traces=[],
- loop=mock.Mock(),
- session=None,
- )
- response.status = 200
- mocked_get.return_value = response
- mocked_get.return_value._headers = {"Authorization": "some-token"}
- mocked_get.return_value._body = b'{"status": "RUNNING"}'
+ mocked_get.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload={"status": "RUNNING"},
+ method="GET",
+ url=constructed_url,
+ )
pipeline_status = await hook_async.get_pipeline_status(
pipeline_name=PIPELINE_NAME,
diff --git a/providers/http/README.rst b/providers/http/README.rst
index d8ceb76305f..443221d5fd9 100644
--- a/providers/http/README.rst
+++ b/providers/http/README.rst
@@ -57,7 +57,7 @@ PIP package Version required
``apache-airflow-providers-common-compat`` ``>=1.12.0``
``requests`` ``>=2.32.0,<3``
``requests-toolbelt`` ``>=1.0.0``
-``aiohttp`` ``>=3.12.14``
+``aiohttp`` ``>=3.14.0``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
==========================================
======================================
diff --git a/providers/http/docs/index.rst b/providers/http/docs/index.rst
index d79a083a5b6..5dd889edcd9 100644
--- a/providers/http/docs/index.rst
+++ b/providers/http/docs/index.rst
@@ -105,7 +105,7 @@ PIP package Version required
``apache-airflow-providers-common-compat`` ``>=1.12.0``
``requests`` ``>=2.32.0,<3``
``requests-toolbelt`` ``>=1.0.0``
-``aiohttp`` ``>=3.12.14``
+``aiohttp`` ``>=3.14.0``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
==========================================
======================================
diff --git a/providers/http/pyproject.toml b/providers/http/pyproject.toml
index efc4cc6e79d..3142dbd8910 100644
--- a/providers/http/pyproject.toml
+++ b/providers/http/pyproject.toml
@@ -65,7 +65,7 @@ dependencies = [
# release it as a requirement for airflow
"requests>=2.32.0,<3",
"requests-toolbelt>=1.0.0",
- "aiohttp>=3.12.14",
+ "aiohttp>=3.14.0",
"asgiref>=2.3.0; python_version < '3.14'",
"asgiref>=3.11.1; python_version >= '3.14'",
]
diff --git a/providers/http/tests/unit/http/hooks/test_http.py
b/providers/http/tests/unit/http/hooks/test_http.py
index 360c2383930..f89532d7e27 100644
--- a/providers/http/tests/unit/http/hooks/test_http.py
+++ b/providers/http/tests/unit/http/hooks/test_http.py
@@ -29,7 +29,6 @@ import aiohttp
import pytest
import requests
import tenacity
-from aioresponses import aioresponses
from requests.adapters import HTTPAdapter, Response
from requests.auth import AuthBase, HTTPBasicAuth
from requests.models import DEFAULT_REDIRECT_LIMIT
@@ -38,14 +37,7 @@ from airflow.models import Connection
from airflow.providers.common.compat.sdk import AirflowException
from airflow.providers.http.hooks.http import HttpAsyncHook, HttpHook,
_process_extra_options_from_connection
-
[email protected]
-def aioresponse():
- """
- Creates mock async API response.
- """
- with aioresponses() as async_response:
- yield async_response
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
def get_airflow_dummy_connection(conn_id: str = "http_default"):
@@ -694,37 +686,59 @@ class TestHttpAsyncHook:
create_connection_without_db(Connection(conn_id="http_empty_conn",
conn_type="http"))
@pytest.mark.asyncio
- async def test_do_api_call_async_non_retryable_error(self, aioresponse):
+ async def test_do_api_call_async_non_retryable_error(self):
"""Test api call asynchronously with non retryable error."""
hook = HttpAsyncHook(method="GET")
- aioresponse.get("http://httpbin.org/non_existent_endpoint", status=400)
- with (
- pytest.raises(AirflowException, match="400:Bad Request"),
- mock.patch.dict(
+ with mock.patch("aiohttp.ClientSession.get",
new_callable=mock.AsyncMock) as mocked_get:
+ mocked_get.return_value = MockAiohttpClientResponse(
+ status=400,
+ reason="Bad Request",
+ method="GET",
+ url="http://httpbin.org/non_existent_endpoint",
+ )
+ with mock.patch.dict(
"os.environ",
AIRFLOW_CONN_HTTP_DEFAULT="http://httpbin.org/",
- ),
- ):
- async with aiohttp.ClientSession() as session:
- await hook.run(session=session,
endpoint="non_existent_endpoint")
+ ):
+ async with aiohttp.ClientSession() as session:
+ with pytest.raises(AirflowException, match="400:Bad
Request"):
+ await hook.run(session=session,
endpoint="non_existent_endpoint")
@pytest.mark.asyncio
- async def test_do_api_call_async_retryable_error(self, caplog,
aioresponse):
+ async def test_do_api_call_async_retryable_error(self, caplog):
"""Test api call asynchronously with retryable error."""
caplog.set_level(logging.WARNING,
logger="airflow.providers.http.hooks.http")
hook = HttpAsyncHook(method="GET")
- aioresponse.get("http://httpbin.org/non_existent_endpoint",
status=500, repeat=True)
- with (
- pytest.raises(AirflowException, match="500:Internal Server Error"),
- mock.patch.dict(
+ with mock.patch("aiohttp.ClientSession.get",
new_callable=mock.AsyncMock) as mocked_get:
+ mocked_get.side_effect = [
+ MockAiohttpClientResponse(
+ status=500,
+ reason="Internal Server Error",
+ method="GET",
+ url="http://httpbin.org/non_existent_endpoint",
+ ),
+ MockAiohttpClientResponse(
+ status=500,
+ reason="Internal Server Error",
+ method="GET",
+ url="http://httpbin.org/non_existent_endpoint",
+ ),
+ MockAiohttpClientResponse(
+ status=500,
+ reason="Internal Server Error",
+ method="GET",
+ url="http://httpbin.org/non_existent_endpoint",
+ ),
+ ]
+ with mock.patch.dict(
"os.environ",
AIRFLOW_CONN_HTTP_DEFAULT="http://httpbin.org/",
- ),
- ):
- async with aiohttp.ClientSession() as session:
- await hook.run(session=session,
endpoint="non_existent_endpoint")
+ ):
+ async with aiohttp.ClientSession() as session:
+ with pytest.raises(AirflowException, match="500:Internal
Server Error"):
+ await hook.run(session=session,
endpoint="non_existent_endpoint")
assert "[Try 3 of 3] Request to
http://httpbin.org/non_existent_endpoint failed" in caplog.text
@@ -743,12 +757,12 @@ class TestHttpAsyncHook:
"""Test api call asynchronously for POST request."""
hook = HttpAsyncHook()
- with aioresponses() as m:
- m.get(
- "http://test:8080/v1/test",
+ with mock.patch("aiohttp.ClientSession.get",
new_callable=mock.AsyncMock) as mocked_get:
+ mocked_get.return_value = MockAiohttpClientResponse(
status=200,
- payload='{"status":{"status": 200}}',
- reason="OK",
+ payload={"status": {"status": 200}},
+ method="GET",
+ url="http://test:8080/v1/test",
)
async with hook.session(method="GET") as session:
resp = await session.run(endpoint="v1/test")
@@ -759,12 +773,12 @@ class TestHttpAsyncHook:
"""Test api call asynchronously for POST request."""
hook = HttpAsyncHook()
- with aioresponses() as m:
- m.post(
- "http://test:8080/v1/test",
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_post:
+ mocked_post.return_value = MockAiohttpClientResponse(
status=200,
- payload='{"status":{"status": 200}}',
- reason="OK",
+ payload={"status": {"status": 200}},
+ method="POST",
+ url="http://test:8080/v1/test",
)
async with aiohttp.ClientSession() as session:
resp = await hook.run(session=session, endpoint="v1/test")
@@ -775,12 +789,13 @@ class TestHttpAsyncHook:
"""Test api call asynchronously for POST request with error."""
hook = HttpAsyncHook()
- with aioresponses() as m:
- m.post(
- "http://test:8080/v1/test",
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_post:
+ mocked_post.return_value = MockAiohttpClientResponse(
status=418,
- payload='{"status":{"status": 418}}',
reason="I am teapot",
+ payload={"status": {"status": 418}},
+ method="POST",
+ url="http://test:8080/v1/test",
)
async with aiohttp.ClientSession() as session:
with pytest.raises(AirflowException):
@@ -792,22 +807,20 @@ class TestHttpAsyncHook:
connection_extra = {"bearer": "test"}
- with aioresponses() as m:
- m.post(
- "http://test:8080/v1/test",
+ hook = HttpAsyncHook()
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
+ mocked_function.return_value = MockAiohttpClientResponse(
status=200,
- payload='{"status":{"status": 200}}',
- reason="OK",
+ payload={"status": {"status": 200}},
+ method="POST",
+ url="http://test:8080/v1/test",
)
-
- hook = HttpAsyncHook()
- with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
- async with aiohttp.ClientSession() as session:
- await hook.run(session=session, endpoint="v1/test")
- headers = mocked_function.call_args.kwargs.get("headers")
- assert all(
- key in headers and headers[key] == value for key,
value in connection_extra.items()
- )
+ async with aiohttp.ClientSession() as session:
+ await hook.run(session=session, endpoint="v1/test")
+ headers = mocked_function.call_args.kwargs.get("headers")
+ assert all(
+ key in headers and headers[key] == value for key, value in
connection_extra.items()
+ )
@pytest.mark.asyncio
@pytest.mark.parametrize(
@@ -834,27 +847,25 @@ class TestHttpAsyncHook:
hook = HttpAsyncHook(http_conn_id="http_conn_with_extras")
- with aioresponses() as m:
- m.post(
- "http://test:8080/v1/test",
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
+ mocked_function.return_value = MockAiohttpClientResponse(
status=200,
- payload='{"status":{"status": 200}}',
- reason="OK",
+ payload={"status": {"status": 200}},
+ method="POST",
+ url="http://test:8080/v1/test",
)
-
- with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
- async with aiohttp.ClientSession() as session:
- await hook.run(session=session, endpoint="v1/test")
- headers = mocked_function.call_args.kwargs.get("headers")
- assert all(
- key in headers and headers[key] == value for key,
value in connection_extra.items()
- )
- assert mocked_function.call_args.kwargs.get("proxy") ==
proxy
- assert mocked_function.call_args.kwargs.get("timeout") ==
60
- assert mocked_function.call_args.kwargs.get("verify_ssl")
is False
- assert
mocked_function.call_args.kwargs.get("allow_redirects") is False
- assert
mocked_function.call_args.kwargs.get("max_redirects") == 3
- assert mocked_function.call_args.kwargs.get("trust_env")
is False
+ async with aiohttp.ClientSession() as session:
+ await hook.run(session=session, endpoint="v1/test")
+ headers = mocked_function.call_args.kwargs.get("headers")
+ assert all(
+ key in headers and headers[key] == value for key, value in
connection_extra.items()
+ )
+ assert mocked_function.call_args.kwargs.get("proxy") == proxy
+ assert mocked_function.call_args.kwargs.get("timeout") == 60
+ assert mocked_function.call_args.kwargs.get("verify_ssl") is
False
+ assert mocked_function.call_args.kwargs.get("allow_redirects")
is False
+ assert mocked_function.call_args.kwargs.get("max_redirects")
== 3
+ assert mocked_function.call_args.kwargs.get("trust_env") is
False
@pytest.mark.asyncio
async def test_build_request_url_from_connection(self):
@@ -862,15 +873,13 @@ class TestHttpAsyncHook:
schema = conn.schema or "http" # default to http
hook = HttpAsyncHook()
- with aioresponses() as m:
- m.post(
- f"{schema}://test:8080/v1/test",
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
+ mocked_function.return_value = MockAiohttpClientResponse(
status=200,
- payload='{"status":{"status": 200}}',
- reason="OK",
+ payload={"status": {"status": 200}},
+ method="POST",
+ url=f"{schema}://test:8080/v1/test",
)
-
- with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
async with aiohttp.ClientSession() as session:
await hook.run(session=session, endpoint="v1/test")
assert mocked_function.call_args.args[0] ==
f"{schema}://{conn.host}v1/test"
@@ -879,14 +888,13 @@ class TestHttpAsyncHook:
async def test_build_request_url_from_endpoint_param(self):
hook = HttpAsyncHook(http_conn_id="http_empty_conn")
- with aioresponses() as m:
- m.post(
- "http://test.com:8080/v1/test", status=200,
payload='{"status":{"status": 200}}', reason="OK"
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
+ mocked_function.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload={"status": {"status": 200}},
+ method="POST",
+ url="http://test.com:8080/v1/test",
)
-
- with (
- mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function,
- ):
- async with aiohttp.ClientSession() as session:
- await hook.run(session=session,
endpoint="test.com:8080/v1/test")
- assert mocked_function.call_args.args[0] ==
"http://test.com:8080/v1/test"
+ async with aiohttp.ClientSession() as session:
+ await hook.run(session=session,
endpoint="test.com:8080/v1/test")
+ assert mocked_function.call_args.args[0] ==
"http://test.com:8080/v1/test"
diff --git
a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
index 6dd218327b9..6e86fb489d4 100644
--- a/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
+++ b/providers/pagerduty/tests/unit/pagerduty/hooks/test_pagerduty_events.py
@@ -23,7 +23,6 @@ from unittest.mock import patch
import httpx
import pagerduty
import pytest
-from aioresponses import aioresponses
from pagerduty import EventsApiV2Client
from airflow.models import Connection
@@ -33,6 +32,8 @@ from airflow.providers.pagerduty.hooks.pagerduty_events
import (
prepare_event_data,
)
+from tests_common.test_utils.aiohttp import MockAiohttpClientResponse
+
DEFAULT_CONN_ID = "pagerduty_events_default"
@@ -43,15 +44,6 @@ def events_connections(create_connection_without_db):
)
[email protected]
-def aioresponse():
- """
- Creates mock async API response.
- """
- with aioresponses() as async_response:
- yield async_response
-
-
class TestPrepareEventData:
def test_prepare_event_data(self):
exp_event_data = {
@@ -157,7 +149,7 @@ class TestPagerdutyEventsAsyncHook:
assert integration_key == "override_key", "token initialised."
@pytest.mark.asyncio
- async def test_send_event_with_payload(self, events_connections,
aioresponse):
+ async def test_send_event_with_payload(self, events_connections):
hook =
PagerdutyEventsAsyncHook(pagerduty_events_conn_id=DEFAULT_CONN_ID)
with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_function:
@@ -173,11 +165,17 @@ class TestPagerdutyEventsAsyncHook:
assert mocked_function.call_args.kwargs.get("auth") is None
@pytest.mark.asyncio
- async def test_send_event_with_success(self, events_connections,
aioresponse):
+ async def test_send_event_with_success(self, events_connections):
hook =
PagerdutyEventsAsyncHook(pagerduty_events_conn_id=DEFAULT_CONN_ID)
exp_response = {"dedup_key": "random"}
- aioresponse.post("https://events.pagerduty.com/v2/enqueue",
status=200, payload=exp_response)
- res = await hook.send_event(
- summary="test", source="airflow_test", severity="error",
dedup_key="random"
- )
+ with mock.patch("aiohttp.ClientSession.post",
new_callable=mock.AsyncMock) as mocked_post:
+ mocked_post.return_value = MockAiohttpClientResponse(
+ status=200,
+ payload=exp_response,
+ method="POST",
+ url="https://events.pagerduty.com/v2/enqueue",
+ )
+ res = await hook.send_event(
+ summary="test", source="airflow_test", severity="error",
dedup_key="random"
+ )
assert res == exp_response["dedup_key"]
diff --git a/providers/slack/README.rst b/providers/slack/README.rst
index 27d974d1867..d27d18137e3 100644
--- a/providers/slack/README.rst
+++ b/providers/slack/README.rst
@@ -60,6 +60,7 @@ PIP package Version required
``apache-airflow-providers-common-compat`` ``>=1.10.1``
``apache-airflow-providers-common-sql`` ``>=1.27.0``
``slack-sdk`` ``>=3.36.0``
+``aiohttp`` ``>=3.14.0``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
==========================================
======================================
diff --git a/providers/slack/docs/index.rst b/providers/slack/docs/index.rst
index c963bb72454..82f0a627913 100644
--- a/providers/slack/docs/index.rst
+++ b/providers/slack/docs/index.rst
@@ -108,6 +108,7 @@ PIP package Version required
``apache-airflow-providers-common-compat`` ``>=1.10.1``
``apache-airflow-providers-common-sql`` ``>=1.27.0``
``slack-sdk`` ``>=3.36.0``
+``aiohttp`` ``>=3.14.0``
``asgiref`` ``>=2.3.0; python_version <
"3.14"``
``asgiref`` ``>=3.11.1; python_version >=
"3.14"``
==========================================
======================================
diff --git a/providers/slack/pyproject.toml b/providers/slack/pyproject.toml
index 7050ae686d7..6c8863c1917 100644
--- a/providers/slack/pyproject.toml
+++ b/providers/slack/pyproject.toml
@@ -63,6 +63,7 @@ dependencies = [
"apache-airflow-providers-common-compat>=1.10.1",
"apache-airflow-providers-common-sql>=1.27.0",
"slack-sdk>=3.36.0",
+ "aiohttp>=3.14.0",
"asgiref>=2.3.0; python_version < '3.14'",
"asgiref>=3.11.1; python_version >= '3.14'",
]
diff --git a/pyproject.toml b/pyproject.toml
index 43ea6239523..5c760fa7968 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1551,6 +1551,10 @@ apache-airflow-task-sdk-integration-tests = false
# this override is redundant and should be deleted along with the line below.
google-cloud-aiplatform = "4 hours"
+# REMOVE BY 2026-06-06 — once 3.14.0 is older than the global 4-day cooldown
+# this override is redundant and should be deleted along with the line below.
+aiohttp = "2 days"
+
[tool.uv.pip]
# Synchroonize with scripts/ci/prek/upgrade_important_versions.py
exclude-newer = "4 days"
@@ -1698,6 +1702,9 @@ apache-airflow-task-sdk-integration-tests = false
# REMOVE BY 2026-06-07 along with the matching entry above.
google-cloud-aiplatform = "4 hours"
+# REMOVE BY 2026-06-06 along with the matching entry above.
+aiohttp = "2 days"
+
[tool.uv.sources]
# These names must match the names as defined in the pyproject.toml of the
workspace items,
# *not* the workspace folder paths
diff --git a/shared/dagnode/tests/dagnode/test_node.py
b/shared/dagnode/tests/dagnode/test_node.py
index fa6600b8804..2166074d5db 100644
--- a/shared/dagnode/tests/dagnode/test_node.py
+++ b/shared/dagnode/tests/dagnode/test_node.py
@@ -17,9 +17,9 @@
from __future__ import annotations
+from dataclasses import dataclass, field
from unittest import mock
-import attrs
import pytest
from airflow_shared.dagnode.node import GenericDAGNode
@@ -29,12 +29,12 @@ class Task:
"""Task type for tests."""
[email protected]
+@dataclass
class TaskGroup:
"""Task group type for tests."""
- node_id: str = attrs.field(init=False, default="test_group_id")
prefix_group_id: bool
+ node_id: str = field(init=False, default="test_group_id")
class Dag:
diff --git a/uv.lock b/uv.lock
index b3d0a8ad845..dbb3e313e98 100644
--- a/uv.lock
+++ b/uv.lock
@@ -89,6 +89,7 @@ apache-airflow-shared-template-rendering = false
apache-airflow-mypy = false
apache-airflow-providers-http = false
apache-airflow-providers-slack = false
+aiohttp = { timestamp = "0001-01-01T00:00:00Z", span = "P2D" }
apache-airflow-providers-vespa = false
apache-airflow-providers-databricks = false
apache-airflow-shared-state = false
@@ -463,7 +464,7 @@ wheels = [
[[package]]
name = "aiohttp"
-version = "3.13.5"
+version = "3.14.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohappyeyeballs" },
@@ -473,112 +474,129 @@ dependencies = [
{ name = "frozenlist" },
{ name = "multidict" },
{ name = "propcache" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
{ name = "yarl" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz",
hash =
"sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size
= 7858271, upload-time = "2026-03-31T22:01:03.343Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/bd/85/cebc47ee74d8b408749073a1a46c6fcba13d170dc8af7e61996c6c9394ac/aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl",
hash =
"sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b", size
= 750547, upload-time = "2026-03-31T21:56:30.024Z" },
- { url =
"https://files.pythonhosted.org/packages/05/98/afd308e35b9d3d8c9ec54c0918f1d722c86dc17ddfec272fcdbcce5a3124/aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl",
hash =
"sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5", size
= 503535, upload-time = "2026-03-31T21:56:31.935Z" },
- { url =
"https://files.pythonhosted.org/packages/6f/4d/926c183e06b09d5270a309eb50fbde7b09782bfd305dec1e800f329834fb/aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl",
hash =
"sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670", size
= 497830, upload-time = "2026-03-31T21:56:33.654Z" },
- { url =
"https://files.pythonhosted.org/packages/e4/d6/f47d1c690f115a5c2a5e8938cce4a232a5be9aac5c5fb2647efcbbbda333/aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274", size
= 1682474, upload-time = "2026-03-31T21:56:35.513Z" },
- { url =
"https://files.pythonhosted.org/packages/01/44/056fd37b1bb52eac760303e5196acc74d9d546631b035704ae5927f7b4ac/aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a", size
= 1655259, upload-time = "2026-03-31T21:56:37.843Z" },
- { url =
"https://files.pythonhosted.org/packages/91/9f/78eb1a20c1c28ae02f6a3c0f4d7b0dcc66abce5290cadd53d78ce3084175/aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d", size
= 1736204, upload-time = "2026-03-31T21:56:39.822Z" },
- { url =
"https://files.pythonhosted.org/packages/de/6c/d20d7de23f0b52b8c1d9e2033b2db1ac4dacbb470bb74c56de0f5f86bb4f/aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796", size
= 1826198, upload-time = "2026-03-31T21:56:41.378Z" },
- { url =
"https://files.pythonhosted.org/packages/2f/86/a6f3ff1fd795f49545a7c74b2c92f62729135d73e7e4055bf74da5a26c82/aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95", size
= 1681329, upload-time = "2026-03-31T21:56:43.374Z" },
- { url =
"https://files.pythonhosted.org/packages/fb/68/84cd3dab6b7b4f3e6fe9459a961acb142aaab846417f6e8905110d7027e5/aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5", size
= 1560023, upload-time = "2026-03-31T21:56:45.031Z" },
- { url =
"https://files.pythonhosted.org/packages/41/2c/db61b64b0249e30f954a65ab4cb4970ced57544b1de2e3c98ee5dc24165f/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl",
hash =
"sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a", size
= 1652372, upload-time = "2026-03-31T21:56:47.075Z" },
- { url =
"https://files.pythonhosted.org/packages/25/6f/e96988a6c982d047810c772e28c43c64c300c943b0ed5c1c0c4ce1e1027c/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl",
hash =
"sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73", size
= 1662031, upload-time = "2026-03-31T21:56:48.835Z" },
- { url =
"https://files.pythonhosted.org/packages/b7/26/a56feace81f3d347b4052403a9d03754a0ab23f7940780dada0849a38c92/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl",
hash =
"sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297", size
= 1708118, upload-time = "2026-03-31T21:56:50.833Z" },
- { url =
"https://files.pythonhosted.org/packages/78/6e/b6173a8ff03d01d5e1a694bc06764b5dad1df2d4ed8f0ceec12bb3277936/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl",
hash =
"sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074", size
= 1548667, upload-time = "2026-03-31T21:56:52.81Z" },
- { url =
"https://files.pythonhosted.org/packages/16/13/13296ffe2c132d888b3fe2c195c8b9c0c24c89c3fa5cc2c44464dc23b22e/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl",
hash =
"sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e", size
= 1724490, upload-time = "2026-03-31T21:56:54.541Z" },
- { url =
"https://files.pythonhosted.org/packages/7a/b4/1f1c287f4a79782ef36e5a6e62954c85343bc30470d862d30bd5f26c9fa2/aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl",
hash =
"sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7", size
= 1667109, upload-time = "2026-03-31T21:56:56.21Z" },
- { url =
"https://files.pythonhosted.org/packages/ef/42/8461a2aaf60a8f4ea4549a4056be36b904b0eb03d97ca9a8a2604681a500/aiohttp-3.13.5-cp310-cp310-win32.whl",
hash =
"sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9", size
= 439478, upload-time = "2026-03-31T21:56:58.292Z" },
- { url =
"https://files.pythonhosted.org/packages/e5/71/06956304cb5ee439dfe8d86e1b2e70088bd88ed1ced1f42fb29e5d855f0e/aiohttp-3.13.5-cp310-cp310-win_amd64.whl",
hash =
"sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76", size
= 462047, upload-time = "2026-03-31T21:57:00.257Z" },
- { url =
"https://files.pythonhosted.org/packages/d6/f5/a20c4ac64aeaef1679e25c9983573618ff765d7aa829fa2b84ae7573169e/aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl",
hash =
"sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6", size
= 757513, upload-time = "2026-03-31T21:57:02.146Z" },
- { url =
"https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl",
hash =
"sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d", size
= 506748, upload-time = "2026-03-31T21:57:04.275Z" },
- { url =
"https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl",
hash =
"sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c", size
= 501673, upload-time = "2026-03-31T21:57:06.208Z" },
- { url =
"https://files.pythonhosted.org/packages/ba/ba/3bc7525d7e2beaa11b309a70d48b0d3cfc3c2089ec6a7d0820d59c657053/aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb", size
= 1763757, upload-time = "2026-03-31T21:57:07.882Z" },
- { url =
"https://files.pythonhosted.org/packages/5e/ab/e87744cf18f1bd78263aba24924d4953b41086bd3a31d22452378e9028a0/aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6", size
= 1720152, upload-time = "2026-03-31T21:57:09.946Z" },
- { url =
"https://files.pythonhosted.org/packages/6b/f3/ed17a6f2d742af17b50bae2d152315ed1b164b07a5fd5cc1754d99e4dfa5/aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13", size
= 1818010, upload-time = "2026-03-31T21:57:12.157Z" },
- { url =
"https://files.pythonhosted.org/packages/53/06/ecbc63dc937192e2a5cb46df4d3edb21deb8225535818802f210a6ea5816/aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174", size
= 1907251, upload-time = "2026-03-31T21:57:14.023Z" },
- { url =
"https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc", size
= 1759969, upload-time = "2026-03-31T21:57:16.146Z" },
- { url =
"https://files.pythonhosted.org/packages/f6/78/a38f8c9105199dd3b9706745865a8a59d0041b6be0ca0cc4b2ccf1bab374/aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6", size
= 1616871, upload-time = "2026-03-31T21:57:17.856Z" },
- { url =
"https://files.pythonhosted.org/packages/6f/41/27392a61ead8ab38072105c71aa44ff891e71653fe53d576a7067da2b4e8/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl",
hash =
"sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49", size
= 1739844, upload-time = "2026-03-31T21:57:19.679Z" },
- { url =
"https://files.pythonhosted.org/packages/6e/55/5564e7ae26d94f3214250009a0b1c65a0c6af4bf88924ccb6fdab901de28/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl",
hash =
"sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8", size
= 1731969, upload-time = "2026-03-31T21:57:22.006Z" },
- { url =
"https://files.pythonhosted.org/packages/6d/c5/705a3929149865fc941bcbdd1047b238e4a72bcb215a9b16b9d7a2e8d992/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl",
hash =
"sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d", size
= 1795193, upload-time = "2026-03-31T21:57:24.256Z" },
- { url =
"https://files.pythonhosted.org/packages/a6/19/edabed62f718d02cff7231ca0db4ef1c72504235bc467f7b67adb1679f48/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl",
hash =
"sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c", size
= 1606477, upload-time = "2026-03-31T21:57:26.364Z" },
- { url =
"https://files.pythonhosted.org/packages/de/fc/76f80ef008675637d88d0b21584596dc27410a990b0918cb1e5776545b5b/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl",
hash =
"sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac", size
= 1813198, upload-time = "2026-03-31T21:57:28.316Z" },
- { url =
"https://files.pythonhosted.org/packages/e5/67/5b3ac26b80adb20ea541c487f73730dc8fa107d632c998f25bbbab98fcda/aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl",
hash =
"sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3", size
= 1752321, upload-time = "2026-03-31T21:57:30.549Z" },
- { url =
"https://files.pythonhosted.org/packages/88/06/e4a2e49255ea23fa4feeb5ab092d90240d927c15e47b5b5c48dff5a9ce29/aiohttp-3.13.5-cp311-cp311-win32.whl",
hash =
"sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06", size
= 439069, upload-time = "2026-03-31T21:57:32.388Z" },
- { url =
"https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl",
hash =
"sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8", size
= 462859, upload-time = "2026-03-31T21:57:34.455Z" },
- { url =
"https://files.pythonhosted.org/packages/be/6f/353954c29e7dcce7cf00280a02c75f30e133c00793c7a2ed3776d7b2f426/aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl",
hash =
"sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9", size
= 748876, upload-time = "2026-03-31T21:57:36.319Z" },
- { url =
"https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl",
hash =
"sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416", size
= 499557, upload-time = "2026-03-31T21:57:38.236Z" },
- { url =
"https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl",
hash =
"sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2", size
= 500258, upload-time = "2026-03-31T21:57:39.923Z" },
- { url =
"https://files.pythonhosted.org/packages/67/84/c9ecc5828cb0b3695856c07c0a6817a99d51e2473400f705275a2b3d9239/aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4", size
= 1749199, upload-time = "2026-03-31T21:57:41.938Z" },
- { url =
"https://files.pythonhosted.org/packages/f0/d3/3c6d610e66b495657622edb6ae7c7fd31b2e9086b4ec50b47897ad6042a9/aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9", size
= 1721013, upload-time = "2026-03-31T21:57:43.904Z" },
- { url =
"https://files.pythonhosted.org/packages/49/a0/24409c12217456df0bae7babe3b014e460b0b38a8e60753d6cb339f6556d/aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5", size
= 1781501, upload-time = "2026-03-31T21:57:46.285Z" },
- { url =
"https://files.pythonhosted.org/packages/98/9d/b65ec649adc5bccc008b0957a9a9c691070aeac4e41cea18559fef49958b/aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e", size
= 1878981, upload-time = "2026-03-31T21:57:48.734Z" },
- { url =
"https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1", size
= 1767934, upload-time = "2026-03-31T21:57:51.171Z" },
- { url =
"https://files.pythonhosted.org/packages/31/04/d3f8211f273356f158e3464e9e45484d3fb8c4ce5eb2f6fe9405c3273983/aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286", size
= 1566671, upload-time = "2026-03-31T21:57:53.326Z" },
- { url =
"https://files.pythonhosted.org/packages/41/db/073e4ebe00b78e2dfcacff734291651729a62953b48933d765dc513bf798/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl",
hash =
"sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9", size
= 1705219, upload-time = "2026-03-31T21:57:55.385Z" },
- { url =
"https://files.pythonhosted.org/packages/48/45/7dfba71a2f9fd97b15c95c06819de7eb38113d2cdb6319669195a7d64270/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl",
hash =
"sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88", size
= 1743049, upload-time = "2026-03-31T21:57:57.341Z" },
- { url =
"https://files.pythonhosted.org/packages/18/71/901db0061e0f717d226386a7f471bb59b19566f2cae5f0d93874b017271f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl",
hash =
"sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3", size
= 1749557, upload-time = "2026-03-31T21:57:59.626Z" },
- { url =
"https://files.pythonhosted.org/packages/08/d5/41eebd16066e59cd43728fe74bce953d7402f2b4ddfdfef2c0e9f17ca274/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl",
hash =
"sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b", size
= 1558931, upload-time = "2026-03-31T21:58:01.972Z" },
- { url =
"https://files.pythonhosted.org/packages/30/e6/4a799798bf05740e66c3a1161079bda7a3dd8e22ca392481d7a7f9af82a6/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl",
hash =
"sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe", size
= 1774125, upload-time = "2026-03-31T21:58:04.007Z" },
- { url =
"https://files.pythonhosted.org/packages/84/63/7749337c90f92bc2cb18f9560d67aa6258c7060d1397d21529b8004fcf6f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl",
hash =
"sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14", size
= 1732427, upload-time = "2026-03-31T21:58:06.337Z" },
- { url =
"https://files.pythonhosted.org/packages/98/de/cf2f44ff98d307e72fb97d5f5bbae3bfcb442f0ea9790c0bf5c5c2331404/aiohttp-3.13.5-cp312-cp312-win32.whl",
hash =
"sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3", size
= 433534, upload-time = "2026-03-31T21:58:08.712Z" },
- { url =
"https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl",
hash =
"sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1", size
= 460446, upload-time = "2026-03-31T21:58:10.945Z" },
- { url =
"https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl",
hash =
"sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size
= 742930, upload-time = "2026-03-31T21:58:13.155Z" },
- { url =
"https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl",
hash =
"sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size
= 496927, upload-time = "2026-03-31T21:58:15.073Z" },
- { url =
"https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size
= 497141, upload-time = "2026-03-31T21:58:17.009Z" },
- { url =
"https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size
= 1732476, upload-time = "2026-03-31T21:58:18.925Z" },
- { url =
"https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size
= 1706507, upload-time = "2026-03-31T21:58:21.094Z" },
- { url =
"https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size
= 1773465, upload-time = "2026-03-31T21:58:23.159Z" },
- { url =
"https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size
= 1873523, upload-time = "2026-03-31T21:58:25.59Z" },
- { url =
"https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size
= 1754113, upload-time = "2026-03-31T21:58:27.624Z" },
- { url =
"https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size
= 1562351, upload-time = "2026-03-31T21:58:29.918Z" },
- { url =
"https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl",
hash =
"sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size
= 1693205, upload-time = "2026-03-31T21:58:32.214Z" },
- { url =
"https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl",
hash =
"sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size
= 1730618, upload-time = "2026-03-31T21:58:34.728Z" },
- { url =
"https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl",
hash =
"sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size
= 1745185, upload-time = "2026-03-31T21:58:36.909Z" },
- { url =
"https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl",
hash =
"sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size
= 1557311, upload-time = "2026-03-31T21:58:39.38Z" },
- { url =
"https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl",
hash =
"sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size
= 1773147, upload-time = "2026-03-31T21:58:41.476Z" },
- { url =
"https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl",
hash =
"sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size
= 1730356, upload-time = "2026-03-31T21:58:44.049Z" },
- { url =
"https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl",
hash =
"sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size
= 432637, upload-time = "2026-03-31T21:58:46.167Z" },
- { url =
"https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl",
hash =
"sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size
= 458896, upload-time = "2026-03-31T21:58:48.119Z" },
- { url =
"https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl",
hash =
"sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size
= 745721, upload-time = "2026-03-31T21:58:50.229Z" },
- { url =
"https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl",
hash =
"sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size
= 497663, upload-time = "2026-03-31T21:58:52.232Z" },
- { url =
"https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size
= 499094, upload-time = "2026-03-31T21:58:54.566Z" },
- { url =
"https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size
= 1726701, upload-time = "2026-03-31T21:58:56.864Z" },
- { url =
"https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size
= 1683360, upload-time = "2026-03-31T21:58:59.072Z" },
- { url =
"https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size
= 1773023, upload-time = "2026-03-31T21:59:01.776Z" },
- { url =
"https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size
= 1853795, upload-time = "2026-03-31T21:59:04.568Z" },
- { url =
"https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size
= 1730405, upload-time = "2026-03-31T21:59:07.221Z" },
- { url =
"https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size
= 1558082, upload-time = "2026-03-31T21:59:09.484Z" },
- { url =
"https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl",
hash =
"sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size
= 1692346, upload-time = "2026-03-31T21:59:12.068Z" },
- { url =
"https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl",
hash =
"sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size
= 1698891, upload-time = "2026-03-31T21:59:14.552Z" },
- { url =
"https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl",
hash =
"sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size
= 1742113, upload-time = "2026-03-31T21:59:17.068Z" },
- { url =
"https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl",
hash =
"sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size
= 1553088, upload-time = "2026-03-31T21:59:19.541Z" },
- { url =
"https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl",
hash =
"sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size
= 1757976, upload-time = "2026-03-31T21:59:22.311Z" },
- { url =
"https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl",
hash =
"sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size
= 1712444, upload-time = "2026-03-31T21:59:24.635Z" },
- { url =
"https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl",
hash =
"sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size
= 438128, upload-time = "2026-03-31T21:59:27.291Z" },
- { url =
"https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl",
hash =
"sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size
= 464029, upload-time = "2026-03-31T21:59:29.429Z" },
- { url =
"https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl",
hash =
"sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size
= 778758, upload-time = "2026-03-31T21:59:31.547Z" },
- { url =
"https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl",
hash =
"sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size
= 512883, upload-time = "2026-03-31T21:59:34.098Z" },
- { url =
"https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl",
hash =
"sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size
= 516668, upload-time = "2026-03-31T21:59:36.497Z" },
- { url =
"https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size
= 1883461, upload-time = "2026-03-31T21:59:38.723Z" },
- { url =
"https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size
= 1747661, upload-time = "2026-03-31T21:59:41.187Z" },
- { url =
"https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size
= 1863800, upload-time = "2026-03-31T21:59:43.84Z" },
- { url =
"https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size
= 1958382, upload-time = "2026-03-31T21:59:46.187Z" },
- { url =
"https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size
= 1803724, upload-time = "2026-03-31T21:59:48.656Z" },
- { url =
"https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size
= 1640027, upload-time = "2026-03-31T21:59:51.284Z" },
- { url =
"https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl",
hash =
"sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size
= 1806644, upload-time = "2026-03-31T21:59:53.753Z" },
- { url =
"https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl",
hash =
"sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size
= 1791630, upload-time = "2026-03-31T21:59:56.239Z" },
- { url =
"https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl",
hash =
"sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size
= 1809403, upload-time = "2026-03-31T21:59:59.103Z" },
- { url =
"https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl",
hash =
"sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size
= 1634924, upload-time = "2026-03-31T22:00:02.116Z" },
- { url =
"https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl",
hash =
"sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size
= 1836119, upload-time = "2026-03-31T22:00:04.756Z" },
- { url =
"https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl",
hash =
"sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size
= 1772072, upload-time = "2026-03-31T22:00:07.494Z" },
- { url =
"https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl",
hash =
"sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size
= 471819, upload-time = "2026-03-31T22:00:10.277Z" },
- { url =
"https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl",
hash =
"sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size
= 505441, upload-time = "2026-03-31T22:00:12.791Z" },
+sdist = { url =
"https://files.pythonhosted.org/packages/ee/ab/93ce242f899b68c51b0578c027aafa791ab3614cb9345fa5d37b5f5c8e3e/aiohttp-3.14.0.tar.gz",
hash =
"sha256:2882de819734c715fd1b9c11c97e09fa020d14438203d1d354d8ed1702791c9b", size
= 7940674, upload-time = "2026-06-01T19:41:02.763Z" }
+wheels = [
+ { url =
"https://files.pythonhosted.org/packages/ef/f0/f81190ba488cd106c2fc6d92680e56bb223bbbbf1e6908c2617011290112/aiohttp-3.14.0-cp310-cp310-macosx_10_9_universal2.whl",
hash =
"sha256:692e409052e7436029bbb32977cd7c5bf806ac5fa4085b973996785ffadad33c", size
= 760606, upload-time = "2026-06-01T19:36:39.054Z" },
+ { url =
"https://files.pythonhosted.org/packages/f6/54/444d37eebf0f15db661ca44ec7caf93962f3c5ca92eb4c9a5d888b70aaa2/aiohttp-3.14.0-cp310-cp310-macosx_10_9_x86_64.whl",
hash =
"sha256:40af7ebe53c7990e110dc4ad03566b12c3ac996254298a3d39046dd69cfcb2c2", size
= 514677, upload-time = "2026-06-01T19:36:42.408Z" },
+ { url =
"https://files.pythonhosted.org/packages/d0/d1/da280e23321c132c0a3fa7c8cc2830621d79174edc64c829443346489a36/aiohttp-3.14.0-cp310-cp310-macosx_11_0_arm64.whl",
hash =
"sha256:02cb2ffbb7da32f82e21ad9952669c45bd88a80e0878264c2f59fe1c6fb2badd", size
= 510155, upload-time = "2026-06-01T19:36:44.072Z" },
+ { url =
"https://files.pythonhosted.org/packages/09/b8/2e36d54d0991ec5bba451444004591ee0af58cb1662a3a81c562878b9c1f/aiohttp-3.14.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:2e2514cb7195f6d7c219339635bea71ae47d1569b051300d32df9dcfabcdb869", size
= 1699947, upload-time = "2026-06-01T19:36:45.762Z" },
+ { url =
"https://files.pythonhosted.org/packages/57/95/a31d8ea1a0b9ecc084f5a7dd0b431ce64ef585918bb7bdc82afe11843877/aiohttp-3.14.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:30e8b7eeb42d02c120ca90d6c6e076a221a16b70a6dac9ae44c7ab5104cc7fe4", size
= 1664364, upload-time = "2026-06-01T19:36:47.653Z" },
+ { url =
"https://files.pythonhosted.org/packages/01/f6/5de3ddffc87a9e8d09b3be38fbd6dd1a736b2ad477a7e787dcb85f57f338/aiohttp-3.14.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:63e38be0d75a654deaa06be32fb4cab883a4222940be1d05861b6717679cbadb", size
= 1761186, upload-time = "2026-06-01T19:36:49.355Z" },
+ { url =
"https://files.pythonhosted.org/packages/33/8c/03c5438ec35d7e3a4f33fe895d6c3ec7540a7cec46065f21851211e1ee4d/aiohttp-3.14.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:1210d4c87cc00128160c7384ab41877a701295b97cffa6362f908a49b6e8a7ca", size
= 1849727, upload-time = "2026-06-01T19:36:51.478Z" },
+ { url =
"https://files.pythonhosted.org/packages/22/32/5a05303b0874458920b73f48b8779cc3a93d503f121b38dcc0456dbd698c/aiohttp-3.14.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:1a78a77366ed158a0a54b076990e575d7b7cdb728cbfd02711eadab150f2269f", size
= 1708197, upload-time = "2026-06-01T19:36:53.241Z" },
+ { url =
"https://files.pythonhosted.org/packages/7d/62/478f169488d61414c0a05e7fe423b59ae3d9dcc933d1f0e4acc2c5d5bc3e/aiohttp-3.14.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:f4d2038c64f36df96cfd3fa0937910e231eafbf897e70a06c155a817bb632fa6", size
= 1578147, upload-time = "2026-06-01T19:36:55.154Z" },
+ { url =
"https://files.pythonhosted.org/packages/1d/af/b20af85765658972d3337834bd5eebba91b962794f2b4fc3e0ee8c85c0e1/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_aarch64.whl",
hash =
"sha256:4714c70067a08b604d0bf3bc4dfdf82e52944afab41d0428d460862763d2f79b", size
= 1665836, upload-time = "2026-06-01T19:36:56.94Z" },
+ { url =
"https://files.pythonhosted.org/packages/8d/a3/771879cfd59948f4544b172189048905feff802f20f1c6c5411e998a3e06/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_armv7l.whl",
hash =
"sha256:f79bfd2847513a7ac801bbafd1de02348a37926ac439eeb4bfe96fcff4eada15", size
= 1680335, upload-time = "2026-06-01T19:36:58.642Z" },
+ { url =
"https://files.pythonhosted.org/packages/f4/16/582e36ad1d32133cd40659f3bc98e71c22179665a1cfbbb4713bce339c06/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_ppc64le.whl",
hash =
"sha256:25e9f1d2465a210d60edb64d7b204a147e85d4c194eecef3d1604fb5ace678ce", size
= 1731180, upload-time = "2026-06-01T19:37:00.583Z" },
+ { url =
"https://files.pythonhosted.org/packages/11/bc/80708fe3f64a07a2c306a42fc7b009118a952709761d215f6d1b4c57195b/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_riscv64.whl",
hash =
"sha256:b5314743ebe926c2fda35d0a298c565c885505f6635c2a30936363404cf274a7", size
= 1565805, upload-time = "2026-06-01T19:37:02.446Z" },
+ { url =
"https://files.pythonhosted.org/packages/57/8f/8d25897f8273a32fe4ad40a8885eec4f397377ed46e8e383078169f60316/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_s390x.whl",
hash =
"sha256:28eee8de1d69711c53116df8202f1c2aa0e3f80ef912a88fc18d159d53e7110b", size
= 1742496, upload-time = "2026-06-01T19:37:04.222Z" },
+ { url =
"https://files.pythonhosted.org/packages/9f/7d/c341d32ab2dec56c8478740695743dc6c21b383cace9376a3eab16311a07/aiohttp-3.14.0-cp310-cp310-musllinux_1_2_x86_64.whl",
hash =
"sha256:89ed35666c95d3efe1955056afcde09e62a57a34e2a4398b17f9f6c1564f0b25", size
= 1691240, upload-time = "2026-06-01T19:37:06.277Z" },
+ { url =
"https://files.pythonhosted.org/packages/37/0f/a81207dd7a2d4a4f645b3a3f8b5a1da1159dc63117ffb137b698fd6df50f/aiohttp-3.14.0-cp310-cp310-win32.whl",
hash =
"sha256:5e4646e9a6af29af354204011bf5769cb0276ec5b64653e42f90b3e13845169f", size
= 454686, upload-time = "2026-06-01T19:37:07.96Z" },
+ { url =
"https://files.pythonhosted.org/packages/7f/ae/842357f2afb9c915715c6f5775239d987f5d0f845abf7675fa794e0a9d40/aiohttp-3.14.0-cp310-cp310-win_amd64.whl",
hash =
"sha256:22a8d06f204e0518a586d770032db3c7043c9ba3693081b3e3ad425e1458d594", size
= 478677, upload-time = "2026-06-01T19:37:09.652Z" },
+ { url =
"https://files.pythonhosted.org/packages/6b/d1/330fb22c9535ec177b52396905131c6e39447244b6ca876262939af668ef/aiohttp-3.14.0-cp310-cp310-win_arm64.whl",
hash =
"sha256:4acfc34bd4d3c58754fc9f22ff1b5e92aabce68f3d4bf7b71a0b732d9bceb78a", size
= 450364, upload-time = "2026-06-01T19:37:11.279Z" },
+ { url =
"https://files.pythonhosted.org/packages/67/47/7727bfe8db93f8835a001bd4359d8480cc68d1259b8bce334668f8be97bd/aiohttp-3.14.0-cp311-cp311-macosx_10_9_universal2.whl",
hash =
"sha256:54bf3522d6f7351e55f89a62d5c2bf138ad557b031670266c5df604ae88e0b5a", size
= 759147, upload-time = "2026-06-01T19:37:12.918Z" },
+ { url =
"https://files.pythonhosted.org/packages/eb/f2/cd3fedff6fade73d71df9ec908c210cec518ef90fd00289250684b90aecf/aiohttp-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl",
hash =
"sha256:0746d9fb0ac4fdef643a84494efe3f06d50335dd8c7a530228b86448aae0a803", size
= 513705, upload-time = "2026-06-01T19:37:14.633Z" },
+ { url =
"https://files.pythonhosted.org/packages/5a/fe/49746b6b610144a06323bebd8e1211a390310d8c69b98dd6d52df341bc3e/aiohttp-3.14.0-cp311-cp311-macosx_11_0_arm64.whl",
hash =
"sha256:9f3a96b6d39a4872222beee72e1df41d2ff886ae96152cf3e757ef8c5673ef0e", size
= 509627, upload-time = "2026-06-01T19:37:16.385Z" },
+ { url =
"https://files.pythonhosted.org/packages/4c/3f/28f2f6cf3d5c0e7b01b27140d0e7873fd11fb341169ad3ce78ad04aba628/aiohttp-3.14.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:d336820adbb914debbc90a1d8c1bfc4bea55996aecf64866a989d35d1f9fd903", size
= 1769293, upload-time = "2026-06-01T19:37:18.067Z" },
+ { url =
"https://files.pythonhosted.org/packages/97/6f/2e5f1b525d5474b12b3c60abf733a755845f3bceff21542081ada515f837/aiohttp-3.14.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:71b2604c9bfc1b115547d63a094d5244b3f02799833513a99a68aaa7b167c4cb", size
= 1732363, upload-time = "2026-06-01T19:37:20.138Z" },
+ { url =
"https://files.pythonhosted.org/packages/a8/ce/596120faa85ca7b19cd061e3f2f3be23aa8f11a0aedf9191db9e0da1bd76/aiohttp-3.14.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:610d68800435903e303ca0542b9d3e4eb72a12ff33a6d471a070c1d81eebd3c2", size
= 1840375, upload-time = "2026-06-01T19:37:22.104Z" },
+ { url =
"https://files.pythonhosted.org/packages/72/3c/a7ffe05a757a4a7867643da69357ec41f506879fbd1b231d2ed90af246b2/aiohttp-3.14.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:514db9a79337068981ee2137310283a07b4b885c584991097a91a4da419bcb81", size
= 1921484, upload-time = "2026-06-01T19:37:24.068Z" },
+ { url =
"https://files.pythonhosted.org/packages/93/fa/2c861170bbd4a491de93a69e081db1d971092569e0d593a98ef62c384dc1/aiohttp-3.14.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:c452d17eeb95d563fc8b936f3050301dbd1d268126c4632d8b70ede9696202ee", size
= 1774153, upload-time = "2026-06-01T19:37:26.256Z" },
+ { url =
"https://files.pythonhosted.org/packages/9d/da/1d2f5a165f47ec9b1f69d37b8b977fdc4d501aa72ffb7930db27bb9e49ea/aiohttp-3.14.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:ed94a81506e3d1bdbad5108f497a58f2a2354aedb4ca314d5326f07d1fd1ac2d", size
= 1632569, upload-time = "2026-06-01T19:37:28.192Z" },
+ { url =
"https://files.pythonhosted.org/packages/46/1d/7a6e295c4257252f70f69e90864fdad74b6a1293054fb3f9e65a15de6d63/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_aarch64.whl",
hash =
"sha256:1394dce36e0f0d260ac0b555a654de19cb989f3c1b8bdd24f505314dfea18a00", size
= 1740325, upload-time = "2026-06-01T19:37:30.08Z" },
+ { url =
"https://files.pythonhosted.org/packages/f1/7e/e1899b1ca3ec62f1eab2a5cbde14039b97493f7f53eb88d9b668562ffa8d/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_armv7l.whl",
hash =
"sha256:d1467d1e7b48a73ca7237e0ee4335f3d02b923dbc27b82fd254bc301c97d4026", size
= 1748691, upload-time = "2026-06-01T19:37:32.211Z" },
+ { url =
"https://files.pythonhosted.org/packages/ec/54/4e6b61c1fe7d3433f82bcc6bd7e4d7c683a742a10c9b12a025fd3695c047/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_ppc64le.whl",
hash =
"sha256:6a5f3532125233c261cf61f32df4059cfcf482eb793c7d3db8452e3142028b86", size
= 1814477, upload-time = "2026-06-01T19:37:34.173Z" },
+ { url =
"https://files.pythonhosted.org/packages/9c/38/86fd51be2e08d8e45c83d879d255f10391903cd9fe2a16512f7591a15873/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_riscv64.whl",
hash =
"sha256:3ea81eb518a2ecb319d8ec6d1424a37c773f6634bd87d6985eb606b2faac419f", size
= 1623393, upload-time = "2026-06-01T19:37:36.281Z" },
+ { url =
"https://files.pythonhosted.org/packages/78/49/466e947a42a88ee23c486d036e7e5d1b097f1bafd8084ad9c9a0a92f0f43/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_s390x.whl",
hash =
"sha256:32e735c3182de7b64f6941a4ede48b38c7f47d9437bd615dd30b5bda8fa1bc93", size
= 1824097, upload-time = "2026-06-01T19:37:38.421Z" },
+ { url =
"https://files.pythonhosted.org/packages/f3/89/35f3410bc284682338a1be6b6ea0c5abfa05f063942cfaa9256608440434/aiohttp-3.14.0-cp311-cp311-musllinux_1_2_x86_64.whl",
hash =
"sha256:c21ca9a1c63d4509158f478aeb9d02914dcc52adc68d1bc9dee2452284ee5996", size
= 1764790, upload-time = "2026-06-01T19:37:40.755Z" },
+ { url =
"https://files.pythonhosted.org/packages/42/80/2d4291bd5724d3d17e5951aff5a3e02281483fb47295f0788276ee66cd73/aiohttp-3.14.0-cp311-cp311-win32.whl",
hash =
"sha256:19ca5fc84130675ba11c6ca5c7da5cb65f7bf8a32cdd2b616bf49cd334688aae", size
= 454176, upload-time = "2026-06-01T19:37:42.837Z" },
+ { url =
"https://files.pythonhosted.org/packages/59/ed/41d0ad4f6ececffc32bdf1f7b494e5498f7ca5c849ea2e3cc9bbd1668251/aiohttp-3.14.0-cp311-cp311-win_amd64.whl",
hash =
"sha256:d488e6e9d3bb8ba5ae7066d5be885ae9670eba021b8c6ccb9a3a568e6b19d6e5", size
= 479334, upload-time = "2026-06-01T19:37:44.776Z" },
+ { url =
"https://files.pythonhosted.org/packages/d1/86/c0b5e305c770053f8c3d069bb52b8196917ba91949d1962d52eb307fb0d2/aiohttp-3.14.0-cp311-cp311-win_arm64.whl",
hash =
"sha256:8b93618102caf12801638a01a2b478a55410ddd71bd41cfaf6f707953a49ac43", size
= 450262, upload-time = "2026-06-01T19:37:46.461Z" },
+ { url =
"https://files.pythonhosted.org/packages/89/97/2b6889bfb6b6847520d50d95eb8c4307a45e28aaca39faf4a9454b3d1b2f/aiohttp-3.14.0-cp312-cp312-macosx_10_13_universal2.whl",
hash =
"sha256:b29518c9c2ec7e373e68259206a137c7f4f5439c58baaec4b5ab3ab799850a4e", size
= 750194, upload-time = "2026-06-01T19:37:48.164Z" },
+ { url =
"https://files.pythonhosted.org/packages/21/e2/62634b7fff918ed98c3c6b2f0e70d520f7f28846cb412d451b04354c6459/aiohttp-3.14.0-cp312-cp312-macosx_10_13_x86_64.whl",
hash =
"sha256:dbec68ce61b64cb73cab4d33df9433427b1713c8bcccb181dce695c1b6f8e87c", size
= 506966, upload-time = "2026-06-01T19:37:50.014Z" },
+ { url =
"https://files.pythonhosted.org/packages/dd/fb/5ce075150828c797a5106f1c2fb26034e709d4289b9d2bf8b07f1e59fac6/aiohttp-3.14.0-cp312-cp312-macosx_11_0_arm64.whl",
hash =
"sha256:3cdf534aa455593e589302990c5097aa5c92c06c4262a20da22934f9186a5fff", size
= 507527, upload-time = "2026-06-01T19:37:51.96Z" },
+ { url =
"https://files.pythonhosted.org/packages/01/d5/405a0ae4e6b081754a3609c1c97c63a950e000a2def16046f1e736933a0e/aiohttp-3.14.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:cb6c657104393b5fbff01a5f59b2023db74058a8077d94475d6c25d03882a108", size
= 1762420, upload-time = "2026-06-01T19:37:53.839Z" },
+ { url =
"https://files.pythonhosted.org/packages/ae/1d/e05a7c896b15a6bc6fb8fc5319eb437861c2c49c34559ef928add6590315/aiohttp-3.14.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:46fbbec4e4fab7428d4396a3823f9320e4560aa3113b89eeebce712c27c9ed5a", size
= 1733672, upload-time = "2026-06-01T19:37:55.791Z" },
+ { url =
"https://files.pythonhosted.org/packages/cc/22/a72f7c459e195fa41bf4f7abd1f925b91fe91f8097e51c654229ba144a33/aiohttp-3.14.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:2c2c7e05dd5335b298085abf45ddf98673934c3ee1c083d0b9ea13d4186ad500", size
= 1805064, upload-time = "2026-06-01T19:37:57.931Z" },
+ { url =
"https://files.pythonhosted.org/packages/80/50/e85bdaba0be59ca4838005ebfef4048fcdd5f35a02b07057a9a123394440/aiohttp-3.14.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:3c7139100fbaae76515b73051d8f0aa3a3ff02e415eec8a8eee8e2223d9ba955", size
= 1902125, upload-time = "2026-06-01T19:38:00.225Z" },
+ { url =
"https://files.pythonhosted.org/packages/19/d8/51de5c6b971c27bb1ef620293b8d1ca611ec78736b34b3f6ccf68e4c8785/aiohttp-3.14.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:78d6f9286a629ce52728430afe18f8ed2b6c39a1fddb3802d7244b9983910ad2", size
= 1783112, upload-time = "2026-06-01T19:38:02.641Z" },
+ { url =
"https://files.pythonhosted.org/packages/73/ae/b4402bfde77e43dfb1b6ccff83c7b7ab63ed06b50c4754f0c5423fb374fe/aiohttp-3.14.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:cc3c3e12cdaeb92d7dcf13db00e9f6b1956b910e47256e696df1cfa946d02159", size
= 1586356, upload-time = "2026-06-01T19:38:04.637Z" },
+ { url =
"https://files.pythonhosted.org/packages/bc/05/750a3265ca4dc54a460bd0cb1121a8f2ce9171fce4a135fb47ea7fd594d2/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_aarch64.whl",
hash =
"sha256:4d6a998191f5ebe3b8c28463ff72bc030250008b3193c402464efadd08b5ca02", size
= 1723119, upload-time = "2026-06-01T19:38:06.713Z" },
+ { url =
"https://files.pythonhosted.org/packages/37/01/8c0812c50b3b1b1c37b323bf170d6be8847a8f234060485b7d1e71953f60/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_armv7l.whl",
hash =
"sha256:0fc2b75ae8d169d853be2862d960be8550da6c5c65711d5476407eb3fdb006bd", size
= 1757216, upload-time = "2026-06-01T19:38:08.736Z" },
+ { url =
"https://files.pythonhosted.org/packages/47/2a/50fb98028a26887cbe48dcc1df92a90825615bc73b5584301304090cded8/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_ppc64le.whl",
hash =
"sha256:16eee56bcc72d04600bc56c1759982c2385ec0b41d3fd3521f836bf64a0957ef", size
= 1770500, upload-time = "2026-06-01T19:38:11.111Z" },
+ { url =
"https://files.pythonhosted.org/packages/bd/32/0ffd598a2fa2b9a423daf242e700cfdabda35d6e602394ad9ae58972c1c7/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_riscv64.whl",
hash =
"sha256:5a2e7ca615c3ddc15b82687e05a624e5f5cba3f1d6c20cb81172d70ea498451e", size
= 1576224, upload-time = "2026-06-01T19:38:13.391Z" },
+ { url =
"https://files.pythonhosted.org/packages/0b/f9/b9fc381dd9b66afb33f2634c40e229d106467be0afcabe79648631ab6712/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_s390x.whl",
hash =
"sha256:f0b7b8bbbec3ce9467ee0ebe334622fd90624f593edd3136c567811453fc4fae", size
= 1794252, upload-time = "2026-06-01T19:38:15.498Z" },
+ { url =
"https://files.pythonhosted.org/packages/a8/fb/05d9214c975f23225a8cd5c439325e338c7c377b315480ef3871db51f54e/aiohttp-3.14.0-cp312-cp312-musllinux_1_2_x86_64.whl",
hash =
"sha256:5ba10966d4f03dd96a14365be4b8e37c327c76f11c3ca867116966cdd9f98066", size
= 1760193, upload-time = "2026-06-01T19:38:17.624Z" },
+ { url =
"https://files.pythonhosted.org/packages/d9/4b/02992fc4fb9e1b6673ee3f888a8e587a6447afda1f6f4aca776c148c2876/aiohttp-3.14.0-cp312-cp312-win32.whl",
hash =
"sha256:101df7779c80c0636014a6b2c6642acd3efb5b355d48347c9d7dfb720aee9430", size
= 448650, upload-time = "2026-06-01T19:38:19.545Z" },
+ { url =
"https://files.pythonhosted.org/packages/39/e9/246532214c3abda518477cbaaf16d420295ad8effa5233844cbb38f299ab/aiohttp-3.14.0-cp312-cp312-win_amd64.whl",
hash =
"sha256:b0a5747586d4467efd1f932710b269131c9717a872dce082cd92a00c1c13123a", size
= 476145, upload-time = "2026-06-01T19:38:21.505Z" },
+ { url =
"https://files.pythonhosted.org/packages/2b/c3/63f8c20090048915711598b0adf475b149216d736157961de06480a45b15/aiohttp-3.14.0-cp312-cp312-win_arm64.whl",
hash =
"sha256:5f1c5be60add78fabb4aacd13c5a348ae79d2fcbfc7fa78da8f1eb192273b370", size
= 444250, upload-time = "2026-06-01T19:38:24.027Z" },
+ { url =
"https://files.pythonhosted.org/packages/21/61/d11f7d9a3144bffe825247d6367cd93053666da50b94707c9129c78868d5/aiohttp-3.14.0-cp313-cp313-android_21_arm64_v8a.whl",
hash =
"sha256:25400d710641a8040bf022a8a99f579e581ffa1c5bd42c33255d7d6f3957c127", size
= 502399, upload-time = "2026-06-01T19:38:25.955Z" },
+ { url =
"https://files.pythonhosted.org/packages/4f/9b/a7e317625d36356844f8bb022cabd305b541f968856cc3c2e0b58e53ee6e/aiohttp-3.14.0-cp313-cp313-android_21_x86_64.whl",
hash =
"sha256:c5492b9929826e07cc3fcb9739ae87aab05dff6b5e67a9b73fd1700c6d008981", size
= 510068, upload-time = "2026-06-01T19:38:27.828Z" },
+ { url =
"https://files.pythonhosted.org/packages/11/41/cc2d2cfbfbdc3126ba258f3cd27d1ac8a33492ae3c35a4583ee21f0ba7f1/aiohttp-3.14.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl",
hash =
"sha256:3366751d68d237c621264233a32f3078bbc21b7904ab90a77e03d21390c742c6", size
= 481670, upload-time = "2026-06-01T19:38:29.836Z" },
+ { url =
"https://files.pythonhosted.org/packages/3c/07/381f4023c3b08cb616e520f566d8c58957abad54e56441d41fe67cfb0195/aiohttp-3.14.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl",
hash =
"sha256:57ea07d28695a7a40304d42251892a8df765e5588c10ee32afeddcd5df33c0a2", size
= 487591, upload-time = "2026-06-01T19:38:31.704Z" },
+ { url =
"https://files.pythonhosted.org/packages/fb/4d/4506fdb7a022bdf70011a3bbb4ca00c5c570026ef6a3c5bd7bc70c39089c/aiohttp-3.14.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl",
hash =
"sha256:076cb014191ae2e65d949e1ad01f1dcfe33e32789b5172510f3e79c79fc04d50", size
= 496503, upload-time = "2026-06-01T19:38:33.6Z" },
+ { url =
"https://files.pythonhosted.org/packages/ef/7d/c814111e04894a45d9e2defc94443879a6f118d9633d5fedfe6e2e8af5f0/aiohttp-3.14.0-cp313-cp313-macosx_10_13_universal2.whl",
hash =
"sha256:2f3fc37054564dee64a855b5b092d87ec35dcddfaabf7dacb1c8a2b1f83dc0a9", size
= 745870, upload-time = "2026-06-01T19:38:36.013Z" },
+ { url =
"https://files.pythonhosted.org/packages/c6/ee/80eee0efddfe187e7cd05027086b7ce1c0e492e82a4eda58f5c5543a44a0/aiohttp-3.14.0-cp313-cp313-macosx_10_13_x86_64.whl",
hash =
"sha256:8fcaef74d2ab0f607d7ff85a0d15e21bb5a258c4a58df1908396eb50d7f4ed3c", size
= 505588, upload-time = "2026-06-01T19:38:38.282Z" },
+ { url =
"https://files.pythonhosted.org/packages/d6/f8/0f28f04eef75d52fc9c715dde7ce9c0abb810fd20cfeb0fea7afd2ab1e98/aiohttp-3.14.0-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:e4c01b0bfc6209590960e68eac083cd22d5d87c21f974dd6208cafa5d3542bc8", size
= 504492, upload-time = "2026-06-01T19:38:40.611Z" },
+ { url =
"https://files.pythonhosted.org/packages/ff/db/44c755232085545065c94378dfce38641b1aee647f4939fcd32f5b32e719/aiohttp-3.14.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:f12eb7896e81caf403a2b18c9406426f1207361e7239c057ab29c076d4257e83", size
= 1752111, upload-time = "2026-06-01T19:38:42.682Z" },
+ { url =
"https://files.pythonhosted.org/packages/5e/6a/42e030a46743841414402a3b00cd3d78419055e86c66fb5822c14b5abfc6/aiohttp-3.14.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:6c79a044cacf360ec46738d863d2f41c9300d2a06ef4a7402ea0df306a350e61", size
= 1729674, upload-time = "2026-06-01T19:38:44.79Z" },
+ { url =
"https://files.pythonhosted.org/packages/34/26/3199beb415202e3108e7b83ecebe10914d806d33fb9860c3e4aa60a19be3/aiohttp-3.14.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:85e0675f47be4eff0636bf88c02140ea89168ae0df3ff1f3f464e9de9610d277", size
= 1798808, upload-time = "2026-06-01T19:38:47.01Z" },
+ { url =
"https://files.pythonhosted.org/packages/bd/94/b9b6fcf0ee17c21d0d19fb8c22bf83ad18f82e702a9c3bd901a868f5e446/aiohttp-3.14.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:7b33e751cab03fdc960095b1e326cb5a03f5ee577d6ded59f3d1c100f8668882", size
= 1891921, upload-time = "2026-06-01T19:38:49.233Z" },
+ { url =
"https://files.pythonhosted.org/packages/c5/a3/3800dbd095cb2bb165a7ea5d94d790914677e27f45638c7d80e3f34c8945/aiohttp-3.14.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:26d9224c6dd7f5c749aba4f61315a894601448b28d94d12f4dea0903e26d2096", size
= 1777241, upload-time = "2026-06-01T19:38:52.04Z" },
+ { url =
"https://files.pythonhosted.org/packages/21/2a/45be91ad1b860508557448d4cc2e165a2ee68dd865657b73bf66cc5a00fb/aiohttp-3.14.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:6281aecdf2732940f4fe06bd6adec5ae4d59b78b080b8e3a6b81467301010988", size
= 1579554, upload-time = "2026-06-01T19:38:54.508Z" },
+ { url =
"https://files.pythonhosted.org/packages/b4/3d/dc94df99ed1511fdf28314f722643ed334112643cab00223577085e788c4/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_aarch64.whl",
hash =
"sha256:23e8314e7aed8576fbe33314d218bd81447a3adbc91dc36f1163bf583cd3084c", size
= 1714864, upload-time = "2026-06-01T19:38:56.788Z" },
+ { url =
"https://files.pythonhosted.org/packages/ae/e4/1f1c8acbb3acd5c8f795473b92c9c3d44eb60a5692c6104256c8a1c83a0c/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_armv7l.whl",
hash =
"sha256:3b54fbff46127aeafdd764cecd0d99fa2f24a0e37ea5c18a7c3a4ac450df1db3", size
= 1749803, upload-time = "2026-06-01T19:38:59.367Z" },
+ { url =
"https://files.pythonhosted.org/packages/0b/c8/c45ea6e7ed84cebba939b9c334498a045ba19d79c61b0110df5f21580de3/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_ppc64le.whl",
hash =
"sha256:b27d89af91a555f58e08e4902dbcbc48862fd40095720ca705990476bd93b7ac", size
= 1765023, upload-time = "2026-06-01T19:39:01.651Z" },
+ { url =
"https://files.pythonhosted.org/packages/a8/a1/a932941784432962fe390e1066823aaef64b4e5ac9fa595df57b5fe472a9/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_riscv64.whl",
hash =
"sha256:25d2326a4967bf705a9f9913a13005e93b6020ad8a9f6bd6bd78850d5171332e", size
= 1571671, upload-time = "2026-06-01T19:39:04.044Z" },
+ { url =
"https://files.pythonhosted.org/packages/b0/01/e1280feac522597a4d46eb67a0cdfa053cfae263033030b761ab146f29fb/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_s390x.whl",
hash =
"sha256:a1d209375c503472b3c0a340cdf3c55fcd82e84b46dda7caeaced59faba373ec", size
= 1789904, upload-time = "2026-06-01T19:39:06.294Z" },
+ { url =
"https://files.pythonhosted.org/packages/fa/10/ab28818262f4d26bdb47ed5f1fc7999b69e2fc6e0370b02d0f49011f45ea/aiohttp-3.14.0-cp313-cp313-musllinux_1_2_x86_64.whl",
hash =
"sha256:666c7c5036df57b693026398b69b41874a1931ac5b3485fd910e57bfac253869", size
= 1754516, upload-time = "2026-06-01T19:39:08.788Z" },
+ { url =
"https://files.pythonhosted.org/packages/af/cc/c122eabd7a1b7e0c9bbdd6be60e4715905b858399145d9df872bb94f1427/aiohttp-3.14.0-cp313-cp313-win32.whl",
hash =
"sha256:23f094a1ef64823fd35854ddf5c7a80a078162f37f9d2f7c6142b51a6affa456", size
= 448656, upload-time = "2026-06-01T19:39:11.171Z" },
+ { url =
"https://files.pythonhosted.org/packages/41/a5/bab07d79848a00eedd8ed979ccb302aaea3ac6eb9fa16bd0ed87135869b4/aiohttp-3.14.0-cp313-cp313-win_amd64.whl",
hash =
"sha256:e03abdaa17d553f17e1d1d06bb266b3970106c78051d06795723e748d8e49d11", size
= 475803, upload-time = "2026-06-01T19:39:13.439Z" },
+ { url =
"https://files.pythonhosted.org/packages/d1/a0/f03ade8566c153666a3871afccbedf6d99911da006325e1fc6cf72a2de99/aiohttp-3.14.0-cp313-cp313-win_arm64.whl",
hash =
"sha256:acdb400538cf4769543548bb5d1eb23d39bed4f96554a6078cb728c7cb2c268b", size
= 443889, upload-time = "2026-06-01T19:39:15.945Z" },
+ { url =
"https://files.pythonhosted.org/packages/28/03/5f36ab196a88ba5e9648ae5643e6531e67a3a8c0e96f9c6510ff41540fec/aiohttp-3.14.0-cp314-cp314-android_24_arm64_v8a.whl",
hash =
"sha256:363ef9e91014e7891679bfb2ac0a7c6ea93435dbbfd10ecf41b9f06fcf506c5f", size
= 503330, upload-time = "2026-06-01T19:39:18.195Z" },
+ { url =
"https://files.pythonhosted.org/packages/2c/ce/8b49ec2f30f68e02f314f4832186cd45e583360a5a386058be36855d23b6/aiohttp-3.14.0-cp314-cp314-android_24_x86_64.whl",
hash =
"sha256:884a4edbdad77be9d0ef36142c8b504351b170df0bf62b51e784fadabf311c42", size
= 509822, upload-time = "2026-06-01T19:39:20.396Z" },
+ { url =
"https://files.pythonhosted.org/packages/1a/fe/6edbf5d39bf29322b6816365b17ed8ede4dace164a3aea1abcd30110eb78/aiohttp-3.14.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl",
hash =
"sha256:70ea956f6cc4a37620966b56c2e205d88ca3e6d85ec063277e414b1035cddad3", size
= 483329, upload-time = "2026-06-01T19:39:22.607Z" },
+ { url =
"https://files.pythonhosted.org/packages/1b/5a/fae531bdbc6456fb6241f46b7b81e4d8a0dd3fc09118a0055dc7141ac1ec/aiohttp-3.14.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl",
hash =
"sha256:ea3b9806c89f61da22fddf1f12dd524fb368e5e28f1261fbdafe5c3cd8ce893b", size
= 489502, upload-time = "2026-06-01T19:39:24.881Z" },
+ { url =
"https://files.pythonhosted.org/packages/36/f4/48a7b0414db7fed77a03d5dde34508c026afd83510ab6bca08c313855776/aiohttp-3.14.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl",
hash =
"sha256:a071be341c2bd9b0188e62d173509f024e0a35b1c342c53c50f8daaeda8c3bd8", size
= 497357, upload-time = "2026-06-01T19:39:27.197Z" },
+ { url =
"https://files.pythonhosted.org/packages/75/75/e85a13a370acc007fca5feb1fd1b88ac2d8426e6dadd625479b7cadd55a3/aiohttp-3.14.0-cp314-cp314-macosx_10_15_universal2.whl",
hash =
"sha256:198cfe61bf253b19da1fb3e0fa122249dc4f14c12709493fed8054aa0411cc76", size
= 750898, upload-time = "2026-06-01T19:39:29.563Z" },
+ { url =
"https://files.pythonhosted.org/packages/9e/e4/3d637f800c724eff0e2bed64df72557444482366fd0a35b0cec0e6968f6c/aiohttp-3.14.0-cp314-cp314-macosx_10_15_x86_64.whl",
hash =
"sha256:9dc203d6ce6b9106d54e2a93f41dfdfebfbca2d99962ba503bfd3e5921a6549e", size
= 506986, upload-time = "2026-06-01T19:39:31.872Z" },
+ { url =
"https://files.pythonhosted.org/packages/1d/df/35161f3598bf7501d2b2a805b41ab4f45a2e34150c421bcb4ef8c0d281a7/aiohttp-3.14.0-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:9e19d17ab02bf16832a2c8c0d55a486792c5b1645665652ee9531aebcc30cb72", size
= 508033, upload-time = "2026-06-01T19:39:34.137Z" },
+ { url =
"https://files.pythonhosted.org/packages/e5/39/b36e5d3d31e850fb4691dd3e941684ac490a2559249f6fa634b6b0fdf020/aiohttp-3.14.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:d925fba0c14d5b498a8028b0107beebdfd16c5d48d702ff54f879cb017aaaca3", size
= 1746213, upload-time = "2026-06-01T19:39:36.654Z" },
+ { url =
"https://files.pythonhosted.org/packages/b1/28/24e1409e605a9aa5d84abe0e2acb365354b70ae56d40948101cabe3341ab/aiohttp-3.14.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:d33e61021222ce7f9792bcac870d6f58d8adfceda33ab857b01264f4560f2c5f", size
= 1705862, upload-time = "2026-06-01T19:39:38.968Z" },
+ { url =
"https://files.pythonhosted.org/packages/8c/d0/e5eb3ff1daeaf644c7e36a957517672494122628e067c38b263fa04eda77/aiohttp-3.14.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:44eca38755d0105bb32f47d085f5dd449846a449e1245fc105889e3279dcf8e3", size
= 1798909, upload-time = "2026-06-01T19:39:41.334Z" },
+ { url =
"https://files.pythonhosted.org/packages/d3/ba/8943f906f0570342886ababb9a722a44e360f786a028c5e0b0e29e3f735b/aiohttp-3.14.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:f13087e06f68fea4941c21a0c541c00553aa16e4f8fd7bbe2b198df761e964d6", size
= 1868892, upload-time = "2026-06-01T19:39:43.807Z" },
+ { url =
"https://files.pythonhosted.org/packages/3a/05/27df32c844b2156e1675a8d8ec22d963e3c8ba469ed7ceb1863320c7b521/aiohttp-3.14.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:ff82be7f1ef73634cb77890a770743239bc3d487b848669be1c599889336dc0a", size
= 1751659, upload-time = "2026-06-01T19:39:46.398Z" },
+ { url =
"https://files.pythonhosted.org/packages/7f/62/da182e5910ab912b2e88aa919b61a16046a37a95714a5795b02eb57b2d18/aiohttp-3.14.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:a150c0875ac8fd87f1c398650841308a30d65facf7416b12dbdb9cfdcbe5a48c", size
= 1578775, upload-time = "2026-06-01T19:39:48.902Z" },
+ { url =
"https://files.pythonhosted.org/packages/66/e3/53c67097e8a5ce98625e91e3fa7f43c9c6940de680345d03b3509a72a078/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_aarch64.whl",
hash =
"sha256:edc01ea4e1ec5a1649a28866262bf24195889ff7b27bdd947029a6086741de9b", size
= 1710090, upload-time = "2026-06-01T19:39:51.392Z" },
+ { url =
"https://files.pythonhosted.org/packages/dd/55/0e2732ca598c7a4dfe8a775662376d0ca2977cb1030e48386d4da5d9a456/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_armv7l.whl",
hash =
"sha256:540632bf882ff8fc88f2e1697be0761578e89e0d79fb4a8a6d65dc5da7e729d4", size
= 1715016, upload-time = "2026-06-01T19:39:53.807Z" },
+ { url =
"https://files.pythonhosted.org/packages/5a/96/f0b73730798c9ca525afc30b39f1f81bbe24e245d9654c54d3b39d63212d/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_ppc64le.whl",
hash =
"sha256:860a86bc2c80237f5dff52edcf427e10a8d8352271fd84845429a3e60199e02c", size
= 1763810, upload-time = "2026-06-01T19:39:56.31Z" },
+ { url =
"https://files.pythonhosted.org/packages/71/cc/11acb6c4518f448323405a7312b6f255d0f974a34373ad1db7633c4aadc8/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_riscv64.whl",
hash =
"sha256:5cbd50e6a50d6b99283a826b18cbdebf65b0797689a7535cb0e9dd37be0f63c3", size
= 1573064, upload-time = "2026-06-01T19:39:58.718Z" },
+ { url =
"https://files.pythonhosted.org/packages/de/2d/28c31dde0a7dc98c0ee7d0da2ddcec3f7688c4fc131e5989e278d0c03c0a/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_s390x.whl",
hash =
"sha256:20144819e99db593e22bbd2f3f2691a5e149f879142d6b8670254708853ff4fb", size
= 1775765, upload-time = "2026-06-01T19:40:01.195Z" },
+ { url =
"https://files.pythonhosted.org/packages/b8/69/155c4ef3aec96417d47024800472b33b16c5d8a665371dcd044c2afdf25d/aiohttp-3.14.0-cp314-cp314-musllinux_1_2_x86_64.whl",
hash =
"sha256:26b6d79aa54cb4ed50cc7d41ed14e99e0f1fc8e7c2d42f2e05b37aea897b2b52", size
= 1733716, upload-time = "2026-06-01T19:40:03.631Z" },
+ { url =
"https://files.pythonhosted.org/packages/5f/44/6126116fd8a316b712bb615660b855c78466bb67ba1bb1742427eafcf7ac/aiohttp-3.14.0-cp314-cp314-win32.whl",
hash =
"sha256:106ed074a856f3e21d186b8579e2c8afb6da598e267cdaab01059e13db2fc44d", size
= 453684, upload-time = "2026-06-01T19:40:06.277Z" },
+ { url =
"https://files.pythonhosted.org/packages/a2/d7/eff4c58a88c5cac5e38b55f44fb8a6d3929c3cbd77356e383e094d3220bd/aiohttp-3.14.0-cp314-cp314-win_amd64.whl",
hash =
"sha256:4f770846edae8f00ecc57af825bce811f787f87a7dcf0e90d191790efe5b31f7", size
= 481758, upload-time = "2026-06-01T19:40:08.653Z" },
+ { url =
"https://files.pythonhosted.org/packages/d7/ed/17b5bd9fbcb46e688f02e572f517754a9a75831e7b54702f027761dc4fa5/aiohttp-3.14.0-cp314-cp314-win_arm64.whl",
hash =
"sha256:acf1581c4f21ed4b80a2dded504d87b055a071a84d5737ea966435f768275ac6", size
= 450557, upload-time = "2026-06-01T19:40:11.03Z" },
+ { url =
"https://files.pythonhosted.org/packages/12/34/6180103ce9aabc8ebff3f7bb55a1228ffe60f61042823031d9692cb7b101/aiohttp-3.14.0-cp314-cp314t-macosx_10_15_universal2.whl",
hash =
"sha256:6aa1a40f9cbb3da9f80714c5966b8946c21e6a2530d809b9498b33161e3c8733", size
= 787878, upload-time = "2026-06-01T19:40:13.401Z" },
+ { url =
"https://files.pythonhosted.org/packages/92/e9/08954a40e8b7baa3d8beadd2b074b186e9b1e9c8ddabc288678a6265de50/aiohttp-3.14.0-cp314-cp314t-macosx_10_15_x86_64.whl",
hash =
"sha256:b62af5a8cc96a194eaa01a9ed7b34a3ffa58d3d8daaa1a0d7a749353ad12d228", size
= 524400, upload-time = "2026-06-01T19:40:15.972Z" },
+ { url =
"https://files.pythonhosted.org/packages/08/6a/b5965a634ac4d5ba99a463314cf4ab214ca073fcdc38a15e0294273701fc/aiohttp-3.14.0-cp314-cp314t-macosx_11_0_arm64.whl",
hash =
"sha256:6eb63b1417efaf7d1002a6ad034a40d44376afcc16508a57f8e74b49ad26a095", size
= 527904, upload-time = "2026-06-01T19:40:18.28Z" },
+ { url =
"https://files.pythonhosted.org/packages/06/b4/932bcdd850c354d9bcca30f360e475d7852e30413fbbd44b182782ed5432/aiohttp-3.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:c20b9ad156a79eb97be5cf9e069eec01d2f0dc8472ffbd75299a8b2d4c2cbbde", size
= 1912162, upload-time = "2026-06-01T19:40:20.825Z" },
+ { url =
"https://files.pythonhosted.org/packages/c6/85/ce79bab0310d2e3fd2d7bc7e44412abeff7c8338f8a21dd0f2f1714989e5/aiohttp-3.14.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl",
hash =
"sha256:40ae7b0642c25632c7eabc4a04754012691864d2a1b93becf7cddb76027b838a", size
= 1778813, upload-time = "2026-06-01T19:40:23.726Z" },
+ { url =
"https://files.pythonhosted.org/packages/05/54/ba62ac2d1bc87e010aad23751e383b8794e45d931df67677313a2da78823/aiohttp-3.14.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",
hash =
"sha256:95f5217e76a046b9f228a101717ef8d42b1eb3d9d196d15202db5bf41df88936", size
= 1899969, upload-time = "2026-06-01T19:40:26.406Z" },
+ { url =
"https://files.pythonhosted.org/packages/dc/82/7cc7907725d83a19f31551334061e1ab8e108b1d7ac52632a2a844a4acb5/aiohttp-3.14.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl",
hash =
"sha256:1a4a9f17e85b80878c176695c1998c790e83731d8271881e5d356488652a1f9e", size
= 1991771, upload-time = "2026-06-01T19:40:29.061Z" },
+ { url =
"https://files.pythonhosted.org/packages/d0/1c/a57de71a4508c93a830b77c28af3d08cd97f606dedfc6b94275347744508/aiohttp-3.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:145262119b07d7f95abc1839add35ba2bfc84551d4b4660ca11542c0b215455b", size
= 1868606, upload-time = "2026-06-01T19:40:31.843Z" },
+ { url =
"https://files.pythonhosted.org/packages/9c/ae/3839726cd49150a53ed340cc24ce5ba09d4c2117020ef9d45542bec5eb2f/aiohttp-3.14.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",
hash =
"sha256:49a33ded29b0b2fa7a367a02cf0fb89af602bb87542a16177ec8ce1c9c51d12a", size
= 1665437, upload-time = "2026-06-01T19:40:35.01Z" },
+ { url =
"https://files.pythonhosted.org/packages/35/1e/c237923232c7da7f0392ea25d89fc5e60c0e93f685f4ebca8e7bcdd5271c/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl",
hash =
"sha256:2cc736a9c9fc2bc4dd71fd404815741b6573df27c3f985948ec4076989ac57de", size
= 1834090, upload-time = "2026-06-01T19:40:37.733Z" },
+ { url =
"https://files.pythonhosted.org/packages/98/02/a5a7a2524f92d3911761b405a7c067c751891942144adc13e2ad79611e39/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_armv7l.whl",
hash =
"sha256:b4141a3e5342ee3053a9cab54d25b64ed28289c1041e4c54b3d99839314d90ce", size
= 1816907, upload-time = "2026-06-01T19:40:40.46Z" },
+ { url =
"https://files.pythonhosted.org/packages/fa/76/a8b9f0d09234d516af9f2d7dd715557f33b5da3b0b56ead41d1170e86e3c/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_ppc64le.whl",
hash =
"sha256:e30871b2d58996cb81aac52d2b1d15ac05257131ef0f90f18c2115a380fbfe7c", size
= 1840382, upload-time = "2026-06-01T19:40:43.48Z" },
+ { url =
"https://files.pythonhosted.org/packages/c9/8e/140e715a0a4bbc211979ea30ec8396ad2ed5bf90ab87d8058fc4668b1923/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_riscv64.whl",
hash =
"sha256:667b881d083ccae3900ea5a241e17e5007ca78844c53ed389bb63d48f729d9c7", size
= 1659497, upload-time = "2026-06-01T19:40:46.265Z" },
+ { url =
"https://files.pythonhosted.org/packages/10/c7/7ba5de8af9650b9767b063c675427b8685f43fa7ce563673a7bc3af60f08/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_s390x.whl",
hash =
"sha256:b584dfe615d151e9b8f0a8ecb3aee6147f2927ec5b95ba25fe621f5377510928", size
= 1870829, upload-time = "2026-06-01T19:40:49.583Z" },
+ { url =
"https://files.pythonhosted.org/packages/cc/bc/2aaab2f85cadb26ea59c091fa2b8e370d625154b5c14b478f1b489d07551/aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl",
hash =
"sha256:6199707cc40e0e9cd39c36fbc97bec416c704e1d0ddce03412bb3b3e6a90ccd0", size
= 1832281, upload-time = "2026-06-01T19:40:52.303Z" },
+ { url =
"https://files.pythonhosted.org/packages/39/98/31b9ad9fbc01f0075ee7221002df5fd2d10b647f451ca5f30edc802d9dd6/aiohttp-3.14.0-cp314-cp314t-win32.whl",
hash =
"sha256:a8d93334d4961c9d566b1f046c81dee475b7c21eb730728d38237bfa70d1c8e6", size
= 490597, upload-time = "2026-06-01T19:40:54.937Z" },
+ { url =
"https://files.pythonhosted.org/packages/59/1f/299b21441c8de42ff70fddc7cfe65e92f810abcf740739a09b56f7835364/aiohttp-3.14.0-cp314-cp314t-win_amd64.whl",
hash =
"sha256:2d2ffe9b614f50f069068b3b52e73414e4107fc10b7efc939a76acff9251fdd2", size
= 525789, upload-time = "2026-06-01T19:40:57.306Z" },
+ { url =
"https://files.pythonhosted.org/packages/70/11/7f83fcba9ee05d4c54d61b3f8104da0d43a59adac44dd28effc0c9a10422/aiohttp-3.14.0-cp314-cp314t-win_arm64.whl",
hash =
"sha256:7a3fc4358e65826c515350f199c210de747cf669998211b1ee6c2e46de364b24", size
= 467399, upload-time = "2026-06-01T19:40:59.993Z" },
]
[[package]]
@@ -614,19 +632,6 @@ wheels = [
{ url =
"https://files.pythonhosted.org/packages/4c/af/aae0153c3e28712adaf462328f6c7a3c196a1c1c27b491de4377dd3e6b52/aiomysql-0.3.2-py3-none-any.whl",
hash =
"sha256:c82c5ba04137d7afd5c693a258bea8ead2aad77101668044143a991e04632eb2", size
= 71834, upload-time = "2025-10-22T00:15:15.905Z" },
]
-[[package]]
-name = "aioresponses"
-version = "0.7.8"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "aiohttp" },
- { name = "packaging" },
-]
-sdist = { url =
"https://files.pythonhosted.org/packages/de/03/532bbc645bdebcf3b6af3b25d46655259d66ce69abba7720b71ebfabbade/aioresponses-0.7.8.tar.gz",
hash =
"sha256:b861cdfe5dc58f3b8afac7b0a6973d5d7b2cb608dd0f6253d16b8ee8eaf6df11", size
= 40253, upload-time = "2025-01-19T18:14:03.222Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/12/b7/584157e43c98aa89810bc2f7099e7e01c728ecf905a66cf705106009228f/aioresponses-0.7.8-py2.py3-none-any.whl",
hash =
"sha256:b73bd4400d978855e55004b23a3a84cb0f018183bcf066a85ad392800b5b9a94", size
= 12518, upload-time = "2025-01-19T18:13:59.633Z" },
-]
-
[[package]]
name = "aiosignal"
version = "1.4.0"
@@ -2252,7 +2257,6 @@ name = "apache-airflow-devel-common"
version = "0.1.0"
source = { editable = "devel-common" }
dependencies = [
- { name = "aioresponses" },
{ name = "apache-airflow-mypy" },
{ name = "black" },
{ name = "coverage" },
@@ -2569,7 +2573,6 @@ mypy = [
[package.metadata]
requires-dist = [
- { name = "aioresponses", specifier = ">=0.7.6" },
{ name = "apache-airflow-devel-common", extras = ["basic"], editable =
"devel-common" },
{ name = "apache-airflow-devel-common", extras = ["coverage", "debuggers",
"mypy", "pytest", "sqlalchemy"], marker = "extra == 'basic'", editable =
"devel-common" },
{ name = "apache-airflow-devel-common", extras = ["coverage", "duckdb",
"debuggers", "devscripts", "doc", "docs-gen", "mypy", "pytest", "sentry",
"sqlalchemy"], marker = "extra == 'all'", editable = "devel-common" },
@@ -3709,7 +3712,7 @@ docs = [
[package.metadata]
requires-dist = [
- { name = "aiohttp", specifier = ">=3.9.2" },
+ { name = "aiohttp", specifier = ">=3.14.0" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "apache-airflow-providers-http", editable = "providers/http" },
@@ -4700,7 +4703,7 @@ docs = [
[package.metadata]
requires-dist = [
- { name = "aiohttp", specifier = ">=3.9.2,<4" },
+ { name = "aiohttp", specifier = ">=3.14.0,<4" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "apache-airflow-providers-common-sql", editable =
"providers/common/sql" },
@@ -4813,7 +4816,7 @@ docs = [
[package.metadata]
requires-dist = [
- { name = "aiohttp", specifier = ">=3.9.2" },
+ { name = "aiohttp", specifier = ">=3.14.0" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "apache-airflow-providers-http", editable = "providers/http" },
@@ -4979,7 +4982,7 @@ docs = [
[package.metadata]
requires-dist = [
{ name = "aiofiles", specifier = ">=23.2.0" },
- { name = "aiohttp", specifier = ">=3.9.2" },
+ { name = "aiohttp", specifier = ">=3.14.0" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "pydantic", specifier = ">=2.11.0" },
@@ -5754,7 +5757,7 @@ docs = [
[package.metadata]
requires-dist = [
- { name = "aiohttp", specifier = ">=3.12.14" },
+ { name = "aiohttp", specifier = ">=3.14.0" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "asgiref", marker = "python_full_version < '3.14'", specifier =
">=2.3.0" },
@@ -7480,6 +7483,7 @@ name = "apache-airflow-providers-slack"
version = "9.10.1"
source = { editable = "providers/slack" }
dependencies = [
+ { name = "aiohttp" },
{ name = "apache-airflow" },
{ name = "apache-airflow-providers-common-compat" },
{ name = "apache-airflow-providers-common-sql" },
@@ -7503,6 +7507,7 @@ docs = [
[package.metadata]
requires-dist = [
+ { name = "aiohttp", specifier = ">=3.14.0" },
{ name = "apache-airflow", editable = "." },
{ name = "apache-airflow-providers-common-compat", editable =
"providers/common/compat" },
{ name = "apache-airflow-providers-common-sql", editable =
"providers/common/sql" },