From 1e14d35136fb17f1c92dd9ff2c555a5deff4e030 Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Sun, 31 May 2026 20:11:46 +0100 Subject: [PATCH 1/5] Improve timing issues on shutdown tests (#12747) --- tests/test_run_app.py | 169 ++++++++++++++++++++++++++++++------------ 1 file changed, 123 insertions(+), 46 deletions(-) diff --git a/tests/test_run_app.py b/tests/test_run_app.py index 8bb1ec9dac3..a1cf5dd0f92 100644 --- a/tests/test_run_app.py +++ b/tests/test_run_app.py @@ -18,7 +18,14 @@ import pytest from pytest_mock import MockerFixture -from aiohttp import ClientConnectorError, ClientSession, ClientTimeout, WSCloseCode, web +from aiohttp import ( + ClientConnectorError, + ClientSession, + ClientTimeout, + ServerDisconnectedError, + WSCloseCode, + web, +) from aiohttp.log import access_logger from aiohttp.web_protocol import RequestHandler from aiohttp.web_runner import BaseRunner @@ -1054,13 +1061,18 @@ async def stop(self, request: web.Request) -> web.Response: def run_app( self, sock: socket.socket, - timeout: int, + timeout: float, task: Callable[[], Coroutine[None, None, None]], extra_test: Callable[[ClientSession], Awaitable[None]] | None = None, ) -> tuple["asyncio.Task[None]", int]: num_connections = -1 t = test_task = None port = sock.getsockname()[1] + server_ready = asyncio.Event() + handler_started = asyncio.Event() + # Set from on_shutdown so per-test ``task()`` callbacks can complete + # deterministically during the shutdown_timeout window. + self._release_handler = asyncio.Event() class DictRecordClear(dict[RequestHandler[web.Request], asyncio.Transport]): def clear(self) -> None: @@ -1078,25 +1090,29 @@ def __init__(self, *args: Any, **kwargs: Any): self._connections = DictRecordClear() async def test() -> None: - await asyncio.sleep(0.5) + await server_ready.wait() async with ClientSession() as sess: - for _ in range(5): # Retry for flaky tests # pragma: no cover - try: - with pytest.raises(asyncio.TimeoutError): - async with sess.get( - f"http://127.0.0.1:{port}/", - timeout=ClientTimeout(total=0.1), - ): - pass - except ClientConnectorError: - await asyncio.sleep(0.5) - else: - break - async with sess.get(f"http://127.0.0.1:{port}/stop"): - pass + # Disable retries (same as TestClient). + sess._retry_connection = False + + async def long_poll() -> None: + async with sess.get(f"http://127.0.0.1:{port}/") as resp: + await resp.read() + + in_flight = asyncio.create_task(long_poll()) + try: + await asyncio.wait_for(handler_started.wait(), timeout=5) + # Handler is guaranteed in-flight here. Trigger shutdown. + async with sess.get(f"http://127.0.0.1:{port}/stop"): + pass - if extra_test: - await extra_test(sess) + if extra_test: + await extra_test(sess) + finally: + # If shutdown_timeout cancels the handler, the server + # tears down the transport mid-response. + with contextlib.suppress(ServerDisconnectedError): + await in_flight async def run_test(app: web.Application) -> AsyncIterator[None]: nonlocal test_task @@ -1106,17 +1122,26 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: async def handler(request: web.Request) -> web.Response: nonlocal t + handler_started.set() t = asyncio.create_task(task()) await t return web.Response(text="FOO") + async def on_shutdown(app: web.Application) -> None: + self._release_handler.set() + + def on_ready(*args: object, **kwargs: object) -> None: + server_ready.set() + app = web.Application() app.cleanup_ctx.append(run_test) + app.on_shutdown.append(on_shutdown) app.router.add_get("/", handler) app.router.add_get("/stop", self.stop) with mock.patch("aiohttp.web_runner.Server", ServerWithRecordClear): - web.run_app(app, sock=sock, shutdown_timeout=timeout) + # TODO: print is a bit of a hack, we should have a proper callback/condition + web.run_app(app, sock=sock, shutdown_timeout=timeout, print=on_ready) assert test_task is not None assert test_task.exception() is None assert t is not None @@ -1128,7 +1153,10 @@ def test_shutdown_wait_for_handler(self, unused_port_socket: socket.socket) -> N async def task() -> None: nonlocal finished - await asyncio.sleep(2) + await self._release_handler.wait() + # Still doing work after the shutdown signal: the server must + # wait for this to complete rather than cancelling prematurely. + await asyncio.sleep(0.5) finished = True t, connection_count = self.run_app(sock, 3, task) @@ -1141,13 +1169,14 @@ async def task() -> None: def test_shutdown_timeout_handler(self, unused_port_socket: socket.socket) -> None: sock = unused_port_socket finished = False + never = asyncio.Event() async def task() -> None: nonlocal finished - await asyncio.sleep(2) + await never.wait() finished = True # pragma: no cover - t, connection_count = self.run_app(sock, 1, task) + t, connection_count = self.run_app(sock, 0.5, task) assert finished is False assert t.done() @@ -1159,21 +1188,21 @@ def test_shutdown_timeout_not_reached( ) -> None: sock = unused_port_socket finished = False + t_shutdown_began = 0.0 async def task() -> None: - nonlocal finished - await asyncio.sleep(1) + nonlocal finished, t_shutdown_began + await self._release_handler.wait() + t_shutdown_began = time.monotonic() finished = True - start_time = time.time() - t, connection_count = self.run_app(sock, 15, task) assert finished is True assert t.done() assert connection_count == 0 # Verify run_app has not waited for timeout. - assert time.time() - start_time < 10 + assert time.monotonic() - t_shutdown_began < 10 def test_shutdown_new_conn_rejected( self, unused_port_socket: socket.socket @@ -1181,21 +1210,25 @@ def test_shutdown_new_conn_rejected( sock = unused_port_socket port = sock.getsockname()[1] finished = False + test_complete = asyncio.Event() async def task() -> None: nonlocal finished - await asyncio.sleep(9) + # Stay in-flight until the test confirms new-conn rejection. + await test_complete.wait() finished = True async def test(sess: ClientSession) -> None: - # Ensure we are in the middle of shutdown (waiting for task()). - await asyncio.sleep(1) + # release_handler is set from on_shutdown, so its set state + # means shutdown is now in progress (sites stopped). + await self._release_handler.wait() with pytest.raises(ClientConnectorError): # Use a new session to try and open a new connection. async with ClientSession() as sess: async with sess.get(f"http://127.0.0.1:{port}/"): assert False # Should fail before here assert finished is False + test_complete.set() t, connection_count = self.run_app(sock, 10, task, test) @@ -1210,22 +1243,27 @@ def test_shutdown_pending_handler_responds( port = sock.getsockname()[1] finished = False t = None + server_ready = asyncio.Event() + handler_started = asyncio.Event() + release_handler = asyncio.Event() async def test() -> None: + await server_ready.wait() + async def test_resp(sess: ClientSession) -> None: async with sess.get(f"http://127.0.0.1:{port}/") as resp: assert await resp.text() == "FOO" - await asyncio.sleep(1) async with ClientSession() as sess: t = asyncio.create_task(test_resp(sess)) - await asyncio.sleep(1) + await asyncio.wait_for(handler_started.wait(), timeout=5) # Handler is in-progress while we trigger server shutdown. async with sess.get(f"http://127.0.0.1:{port}/stop"): pass assert finished is False - # Handler should still complete and produce a response. + # Handler should still complete and produce a response; + # release_handler is set from on_shutdown. await t async def run_test(app: web.Application) -> AsyncIterator[None]: @@ -1236,16 +1274,27 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: async def handler(request: web.Request) -> web.Response: nonlocal finished - await asyncio.sleep(3) + handler_started.set() + await release_handler.wait() + # Still doing work after the shutdown signal: the server must + # wait for this to complete and deliver the response. + await asyncio.sleep(0.5) finished = True return web.Response(text="FOO") + async def on_shutdown(app: web.Application) -> None: + release_handler.set() + + def on_ready(*args: Any, **kwargs: Any) -> None: + server_ready.set() + app = web.Application() app.cleanup_ctx.append(run_test) + app.on_shutdown.append(on_shutdown) app.router.add_get("/", handler) app.router.add_get("/stop", self.stop) - web.run_app(app, sock=sock, shutdown_timeout=5) + web.run_app(app, sock=sock, shutdown_timeout=5, print=on_ready) assert t is not None assert t.exception() is None assert finished is True @@ -1256,15 +1305,16 @@ def test_shutdown_close_idle_keepalive( sock = unused_port_socket port = sock.getsockname()[1] t = None + server_ready = asyncio.Event() async def test() -> None: - await asyncio.sleep(1) + await server_ready.wait() async with ClientSession() as sess: async with sess.get(f"http://127.0.0.1:{port}/stop"): pass # Hold on to keep-alive connection. - await asyncio.sleep(5) + await asyncio.Event().wait() async def run_test(app: web.Application) -> AsyncIterator[None]: nonlocal t @@ -1274,13 +1324,18 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: with contextlib.suppress(asyncio.CancelledError): await t + def on_ready(*args: Any, **kwargs: Any) -> None: + server_ready.set() + app = web.Application() app.cleanup_ctx.append(run_test) app.router.add_get("/stop", self.stop) - web.run_app(app, sock=sock, shutdown_timeout=10) - # If connection closed, then test() will be cancelled in cleanup_ctx. - # If not, then shutdown_timeout will allow it to sleep until complete. + start = time.monotonic() + web.run_app(app, sock=sock, shutdown_timeout=10, print=on_ready) + # Server should close idle keep-alive connections immediately on + # shutdown rather than waiting for shutdown_timeout to expire. + assert time.monotonic() - start < 5 assert t is not None assert t.cancelled() @@ -1290,6 +1345,7 @@ def test_shutdown_close_websockets(self, unused_port_socket: socket.socket) -> N WS = web.AppKey("ws", set[web.WebSocketResponse]) client_finished = server_finished = False t = None + server_ready = asyncio.Event() async def ws_handler(request: web.Request) -> web.WebSocketResponse: ws = web.WebSocketResponse() @@ -1306,7 +1362,7 @@ async def close_websockets(app: web.Application) -> None: await ws.close(code=WSCloseCode.GOING_AWAY) async def test() -> None: - await asyncio.sleep(1) + await server_ready.wait() async with ClientSession() as sess: async with sess.ws_connect(f"http://127.0.0.1:{port}/ws") as ws: async with sess.get(f"http://127.0.0.1:{port}/stop"): @@ -1326,6 +1382,9 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: with contextlib.suppress(asyncio.CancelledError): await t + def on_ready(*args: Any, **kwargs: Any) -> None: + server_ready.set() + app = web.Application() app[WS] = set() app.on_shutdown.append(close_websockets) @@ -1334,7 +1393,7 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: app.router.add_get("/stop", self.stop) start = time.time() - web.run_app(app, sock=sock, shutdown_timeout=10) + web.run_app(app, sock=sock, shutdown_timeout=10, print=on_ready) assert time.time() - start < 5 assert client_finished assert server_finished @@ -1346,9 +1405,13 @@ def test_shutdown_handler_cancellation_suppressed( port = sock.getsockname()[1] actions = [] t = None + server_ready = asyncio.Event() suppressed = asyncio.Event() + release_handler = asyncio.Event() async def test() -> None: + await server_ready.wait() + async def test_resp(sess: ClientSession) -> None: t = ClientTimeout(total=0.4) with pytest.raises(asyncio.TimeoutError): @@ -1377,20 +1440,34 @@ async def run_test(app: web.Application) -> AsyncIterator[None]: async def handler(request: web.Request) -> web.Response: try: - await asyncio.sleep(5) + await asyncio.Event().wait() except asyncio.CancelledError: actions.append("SUPPRESSED") suppressed.set() - await asyncio.sleep(2) + await release_handler.wait() + await asyncio.sleep(0.5) actions.append("DONE") return web.Response(text="FOO") + async def on_shutdown(app: web.Application) -> None: + release_handler.set() + + def on_ready(*args: Any, **kwargs: Any) -> None: + server_ready.set() + app = web.Application() app.cleanup_ctx.append(run_test) + app.on_shutdown.append(on_shutdown) app.router.add_get("/", handler) app.router.add_get("/stop", self.stop) - web.run_app(app, sock=sock, shutdown_timeout=2, handler_cancellation=True) + web.run_app( + app, + sock=sock, + shutdown_timeout=2, + handler_cancellation=True, + print=on_ready, + ) assert t is not None assert t.exception() is None assert actions == ["CANCELLED", "SUPPRESSED", "PRESTOP", "STOPPING", "DONE"] From 269f03b572b9997d3e3a061cab36f259491d28e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Nicol=C3=A1s=20Estevez?= Date: Sun, 31 May 2026 22:12:18 +0100 Subject: [PATCH 2/5] Add aiointercept to third party library list (#12727) --- CHANGES/12727.doc.rst | 1 + docs/third_party.rst | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 CHANGES/12727.doc.rst diff --git a/CHANGES/12727.doc.rst b/CHANGES/12727.doc.rst new file mode 100644 index 00000000000..61ffeb82274 --- /dev/null +++ b/CHANGES/12727.doc.rst @@ -0,0 +1 @@ +Added ``aiointercept`` to list of third-party libraries -- by :user:`Polandia94`. diff --git a/docs/third_party.rst b/docs/third_party.rst index 865af7300a0..99ff8be3172 100644 --- a/docs/third_party.rst +++ b/docs/third_party.rst @@ -315,3 +315,6 @@ ask to raise the status. - `wireup `_ Performant, concise, and easy-to-use dependency injection container. + +- `aiointercept `_ + Mock aiohttp HTTP requests by routing them through a real aiohttp.web test server. From e3a67148e14f3fe6e098738ae9f7231de88e29ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Nicol=C3=A1s=20Estevez?= Date: Sun, 31 May 2026 22:20:49 +0100 Subject: [PATCH 3/5] remove third party archived repos from docs (#12726) --- CHANGES/12726.doc.rst | 1 + docs/third_party.rst | 22 +++------------------- 2 files changed, 4 insertions(+), 19 deletions(-) create mode 100644 CHANGES/12726.doc.rst diff --git a/CHANGES/12726.doc.rst b/CHANGES/12726.doc.rst new file mode 100644 index 00000000000..45e1212acd1 --- /dev/null +++ b/CHANGES/12726.doc.rst @@ -0,0 +1 @@ +Removed archived and deprecated repositories from third party list -- by :user:`Polandia94`. diff --git a/docs/third_party.rst b/docs/third_party.rst index 99ff8be3172..9cc7d017298 100644 --- a/docs/third_party.rst +++ b/docs/third_party.rst @@ -64,6 +64,9 @@ aiohttp extensions - `aiozipkin `_ distributed tracing instrumentation for `aiohttp` client and server. +- `aiocache `_ Caching for asyncio + with multiple backends (framework agnostic) + Database drivers ^^^^^^^^^^^^^^^^ @@ -146,8 +149,6 @@ We cannot vouch for the quality of these libraries, use them at your own risk. Please add your library reference here first and after some time ask to raise the status. -- `pytest-aiohttp-client `_ - Pytest fixture with simpler api, payload decoding and status code assertions. - `python-proxy-headers `_ provides ``aiohttp_proxy`` extension for receiving custom response headers from a proxy server @@ -161,18 +162,9 @@ ask to raise the status. - `aiohttp-cache `_ A cache system for aiohttp server. -- `aiocache `_ Caching for asyncio - with multiple backends (framework agnostic) - -- `gain `_ Web crawling framework - based on asyncio for everyone. - - `aiohttp-validate `_ Simple library that helps you validate your API endpoints requests/responses with json schema. -- `raven-aiohttp `_ An - aiohttp transport for raven-python (Sentry client). - - `webargs `_ A friendly library for parsing HTTP request arguments, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, @@ -185,14 +177,6 @@ ask to raise the status. - `aioresponses `_ a helper for mock/fake web requests in python aiohttp package. -- `aiohttp-transmute - `_ A transmute - implementation for aiohttp. - -- `aiohttp-login `_ - Registration and authorization (including social) for aiohttp - applications. - - `aiohttp_utils `_ Handy utilities for building aiohttp.web applications. From af3e9507a5afa5630a4a77197d39fbb7a9f0e1ad Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Sun, 31 May 2026 23:28:41 +0100 Subject: [PATCH 4/5] Fix Dependabot Security (#12751) --- requirements/pyproject.toml | 1 + 1 file changed, 1 insertion(+) create mode 120000 requirements/pyproject.toml diff --git a/requirements/pyproject.toml b/requirements/pyproject.toml new file mode 120000 index 00000000000..1e11d782571 --- /dev/null +++ b/requirements/pyproject.toml @@ -0,0 +1 @@ +../pyproject.toml \ No newline at end of file From 0c106fe7e68fe3c99f620440caa9c58ffa8bc16e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 31 May 2026 22:54:00 +0000 Subject: [PATCH 5/5] Bump pytest from 9.0.2 to 9.0.3 in /requirements in the pip group across 1 directory (#12725) Bumps the pip group with 1 update in the /requirements directory: [pytest](https://github.com/pytest-dev/pytest). Updates `pytest` from 9.0.2 to 9.0.3
Release notes

Sourced from pytest's releases.

9.0.3

pytest 9.0.3 (2026-04-07)

Bug fixes

  • #12444: Fixed pytest.approx which now correctly takes into account ~collections.abc.Mapping keys order to compare them.

  • #13634: Blocking a conftest.py file using the -p no: option is now explicitly disallowed.

    Previously this resulted in an internal assertion failure during plugin loading.

    Pytest now raises a clear UsageError explaining that conftest files are not plugins and cannot be disabled via -p.

  • #13734: Fixed crash when a test raises an exceptiongroup with __tracebackhide__ = True.

  • #14195: Fixed an issue where non-string messages passed to unittest.TestCase.subTest() were not printed.

  • #14343: Fixed use of insecure temporary directory (CVE-2025-71176).

Improved documentation

  • #13388: Clarified documentation for -p vs PYTEST_PLUGINS plugin loading and fixed an incorrect -p example.
  • #13731: Clarified that capture fixtures (e.g. capsys and capfd) take precedence over the -s / --capture=no command-line options in Accessing captured output from a test function <accessing-captured-output>.
  • #14088: Clarified that the default pytest_collection hook sets session.items before it calls pytest_collection_finish, not after.
  • #14255: TOML integer log levels must be quoted: Updating reference documentation.

Contributor-facing changes

  • #12689: The test reports are now published to Codecov from GitHub Actions. The test statistics is visible on the web interface.

    -- by aleguy02

Commits

Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/constraints.txt | 120 +++++++++++++++--------------- requirements/dev.txt | 114 ++++++++++++++-------------- requirements/lint.txt | 36 ++++----- requirements/test-common-base.txt | 22 +++--- requirements/test-common.txt | 38 +++++----- requirements/test-ft.txt | 62 +++++++-------- requirements/test-mobile.txt | 50 ++++++------- requirements/test.txt | 64 ++++++++-------- 8 files changed, 253 insertions(+), 253 deletions(-) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 366ec29f17a..923473fbe75 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -6,17 +6,17 @@ # aiodns==4.0.4 ; sys_platform != "android" and sys_platform != "ios" # via - # -r requirements/lint.in - # -r requirements/runtime-deps.in + # -r lint.in + # -r runtime-deps.in aiohappyeyeballs==2.6.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp aiohttp-theme==0.1.7 - # via -r requirements/doc.in + # via -r doc.in aiosignal==1.4.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp alabaster==1.0.0 # via sphinx @@ -26,7 +26,7 @@ ast-serialize==0.5.0 # via mypy async-timeout==5.0.1 ; python_version < "3.11" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # valkey attrs==26.1.0 @@ -37,14 +37,14 @@ backports-asyncio-runner==1.2.0 # via pytest-asyncio backports-zstd==1.3.0 ; implementation_name == "cpython" and python_version < "3.14" # via - # -r requirements/lint.in - # -r requirements/runtime-deps.in + # -r lint.in + # -r runtime-deps.in blockbuster==1.5.26 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in brotli==1.2.0 ; platform_python_implementation == "CPython" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in build==1.5.0 # via pip-tools certifi==2026.5.20 @@ -65,12 +65,12 @@ click==8.4.1 # wait-for-it coverage==7.14.1 # via - # -r requirements/test-common.in + # -r test-common.in # pytest-cov cryptography==48.0.0 # via trustme cython==3.2.5 - # via -r requirements/cython.in + # via -r cython.in distlib==0.4.0 # via virtualenv docutils==0.21.2 @@ -89,15 +89,15 @@ forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in frozenlist==1.8.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # aiosignal gunicorn==26.0.0 - # via -r requirements/base.in + # via -r base.in identify==2.6.19 # via pre-commit idna==3.17 @@ -111,8 +111,8 @@ iniconfig==2.3.0 # via pytest isal==1.7.2 ; python_version < "3.14" and implementation_name == "cpython" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in jinja2==3.1.6 # via # myst-parser @@ -134,18 +134,18 @@ mdurl==0.1.2 # via markdown-it-py multidict==6.7.1 # via - # -r requirements/multidict.in - # -r requirements/runtime-deps.in + # -r multidict.in + # -r runtime-deps.in # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in mypy-extensions==1.1.0 # via mypy myst-parser==4.0.1 - # via -r requirements/doc.in + # via -r doc.in nodeenv==1.10.0 # via pre-commit packaging==26.2 @@ -160,9 +160,9 @@ pathspec==1.1.1 pip==26.1.1 # via pip-tools pip-tools==7.5.3 - # via -r requirements/dev.in + # via -r dev.in pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in platformdirs==4.10.0 # via # python-discovery @@ -172,16 +172,16 @@ pluggy==1.6.0 # pytest # pytest-cov pre-commit==4.6.0 - # via -r requirements/lint.in + # via -r lint.in propcache==0.5.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl proxy-py==2.4.10 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pycares==5.0.1 # via aiodns pycparser==3.0 @@ -203,8 +203,8 @@ pyproject-hooks==1.2.0 # pip-tools pytest==9.0.3 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed @@ -214,32 +214,32 @@ pytest==9.0.3 # pytest-xdist pytest-aiohttp==1.1.0 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-xdist==3.8.0 - # via -r requirements/test-common.in + # via -r test-common.in python-dateutil==2.9.0.post0 # via freezegun python-discovery==1.4.0 # via virtualenv python-on-whales==0.81.0 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in pyyaml==6.0.3 # via # myst-parser @@ -254,16 +254,16 @@ rich==15.0.0 setuptools==82.0.1 # via pip-tools setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil slotscheck==0.20.0 - # via -r requirements/lint.in + # via -r lint.in snowballstemmer==3.1.0 # via sphinx sphinx==8.1.3 # via - # -r requirements/doc.in + # -r doc.in # myst-parser # sphinxcontrib-mermaid # sphinxcontrib-spelling @@ -277,15 +277,15 @@ sphinxcontrib-htmlhelp==2.1.0 sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-mermaid==2.0.2 - # via -r requirements/doc.in + # via -r doc.in sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx sphinxcontrib-spelling==8.0.2 ; platform_system != "Windows" - # via -r requirements/doc-spelling.in + # via -r doc-spelling.in sphinxcontrib-towncrier==0.5.0a0 - # via -r requirements/doc.in + # via -r doc.in tomli==2.4.1 # via # build @@ -298,15 +298,15 @@ tomli==2.4.1 # towncrier towncrier==25.8.0 # via - # -r requirements/doc.in + # -r doc.in # sphinxcontrib-towncrier trustme==1.2.1 ; platform_machine != "i686" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in typing-extensions==4.15.0 ; python_version < "3.13" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiosignal # cryptography # exceptiongroup @@ -324,24 +324,24 @@ urllib3==2.7.0 # via requests uvloop==0.22.1 ; platform_system != "Windows" # via - # -r requirements/base.in - # -r requirements/lint.in + # -r base.in + # -r lint.in valkey==6.1.1 - # via -r requirements/lint.in + # via -r lint.in virtualenv==21.4.1 # via pre-commit wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in wheel==0.47.0 # via pip-tools yarl==1.24.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp zlib-ng==1.0.0 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in # The following packages are considered to be unsafe in a requirements file: aiohttp==3.13.5 diff --git a/requirements/dev.txt b/requirements/dev.txt index 115647a9095..ffeaf4ac025 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -6,17 +6,17 @@ # aiodns==4.0.4 ; sys_platform != "android" and sys_platform != "ios" # via - # -r requirements/lint.in - # -r requirements/runtime-deps.in + # -r lint.in + # -r runtime-deps.in aiohappyeyeballs==2.6.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp aiohttp-theme==0.1.7 - # via -r requirements/doc.in + # via -r doc.in aiosignal==1.4.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp alabaster==1.0.0 # via sphinx @@ -26,7 +26,7 @@ ast-serialize==0.5.0 # via mypy async-timeout==5.0.1 ; python_version < "3.11" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # valkey attrs==26.1.0 @@ -37,14 +37,14 @@ backports-asyncio-runner==1.2.0 # via pytest-asyncio backports-zstd==1.3.0 ; platform_python_implementation == "CPython" and python_version < "3.14" and sys_platform != "android" and sys_platform != "ios" # via - # -r requirements/lint.in - # -r requirements/runtime-deps.in + # -r lint.in + # -r runtime-deps.in blockbuster==1.5.26 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in brotli==1.2.0 ; platform_python_implementation == "CPython" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in build==1.5.0 # via pip-tools certifi==2026.5.20 @@ -65,7 +65,7 @@ click==8.4.1 # wait-for-it coverage==7.14.1 # via - # -r requirements/test-common.in + # -r test-common.in # pytest-cov cryptography==48.0.0 # via trustme @@ -87,15 +87,15 @@ forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in frozenlist==1.8.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # aiosignal gunicorn==26.0.0 - # via -r requirements/base.in + # via -r base.in identify==2.6.19 # via pre-commit idna==3.17 @@ -109,8 +109,8 @@ iniconfig==2.3.0 # via pytest isal==1.7.2 ; python_version < "3.14" and implementation_name == "cpython" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in jinja2==3.1.6 # via # myst-parser @@ -132,17 +132,17 @@ mdurl==0.1.2 # via markdown-it-py multidict==6.7.1 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in mypy-extensions==1.1.0 # via mypy myst-parser==4.0.1 - # via -r requirements/doc.in + # via -r doc.in nodeenv==1.10.0 # via pre-commit packaging==26.2 @@ -157,9 +157,9 @@ pathspec==1.1.1 pip==26.1.1 # via pip-tools pip-tools==7.5.3 - # via -r requirements/dev.in + # via -r dev.in pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in platformdirs==4.10.0 # via # python-discovery @@ -169,16 +169,16 @@ pluggy==1.6.0 # pytest # pytest-cov pre-commit==4.6.0 - # via -r requirements/lint.in + # via -r lint.in propcache==0.5.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl proxy-py==2.4.10 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pycares==5.0.1 # via aiodns pycparser==3.0 @@ -198,8 +198,8 @@ pyproject-hooks==1.2.0 # pip-tools pytest==9.0.3 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed @@ -209,32 +209,32 @@ pytest==9.0.3 # pytest-xdist pytest-aiohttp==1.1.0 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 # via - # -r requirements/lint.in - # -r requirements/test-common-base.in + # -r lint.in + # -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-xdist==3.8.0 - # via -r requirements/test-common.in + # via -r test-common.in python-dateutil==2.9.0.post0 # via freezegun python-discovery==1.4.0 # via virtualenv python-on-whales==0.81.0 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in pyyaml==6.0.3 # via # myst-parser @@ -247,16 +247,16 @@ rich==15.0.0 setuptools==82.0.1 # via pip-tools setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil slotscheck==0.20.0 - # via -r requirements/lint.in + # via -r lint.in snowballstemmer==3.1.0 # via sphinx sphinx==8.1.3 # via - # -r requirements/doc.in + # -r doc.in # myst-parser # sphinxcontrib-mermaid # sphinxcontrib-towncrier @@ -269,13 +269,13 @@ sphinxcontrib-htmlhelp==2.1.0 sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-mermaid==2.0.2 - # via -r requirements/doc.in + # via -r doc.in sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx sphinxcontrib-towncrier==0.5.0a0 - # via -r requirements/doc.in + # via -r doc.in tomli==2.4.1 # via # build @@ -288,15 +288,15 @@ tomli==2.4.1 # towncrier towncrier==25.8.0 # via - # -r requirements/doc.in + # -r doc.in # sphinxcontrib-towncrier trustme==1.2.1 ; platform_machine != "i686" # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in typing-extensions==4.15.0 ; python_version < "3.13" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiosignal # cryptography # exceptiongroup @@ -314,24 +314,24 @@ urllib3==2.7.0 # via requests uvloop==0.22.1 ; platform_system != "Windows" and implementation_name == "cpython" # via - # -r requirements/base.in - # -r requirements/lint.in + # -r base.in + # -r lint.in valkey==6.1.1 - # via -r requirements/lint.in + # via -r lint.in virtualenv==21.4.1 # via pre-commit wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in wheel==0.47.0 # via pip-tools yarl==1.24.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp zlib-ng==1.0.0 # via - # -r requirements/lint.in - # -r requirements/test-common.in + # -r lint.in + # -r test-common.in # The following packages are considered to be unsafe in a requirements file: aiohttp==3.13.5 diff --git a/requirements/lint.txt b/requirements/lint.txt index fa4d1fba9b3..9164cfe5175 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -5,7 +5,7 @@ # pip-compile --unsafe-package=aiohttp --output-file=requirements/lint.txt --strip-extras requirements/lint.in # aiodns==4.0.4 - # via -r requirements/lint.in + # via -r lint.in aiohappyeyeballs==2.6.2 # via aiohttp aiosignal==1.4.0 @@ -23,9 +23,9 @@ attrs==26.1.0 backports-asyncio-runner==1.2.0 # via pytest-asyncio backports-zstd==1.3.0 ; implementation_name == "cpython" and python_version < "3.14" - # via -r requirements/lint.in + # via -r lint.in blockbuster==1.5.26 - # via -r requirements/lint.in + # via -r lint.in cffi==2.0.0 # via # cryptography @@ -47,7 +47,7 @@ filelock==3.29.0 forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 - # via -r requirements/lint.in + # via -r lint.in frozenlist==1.8.0 # via # aiohttp @@ -61,7 +61,7 @@ idna==3.17 iniconfig==2.3.0 # via pytest isal==1.7.2 - # via -r requirements/lint.in + # via -r lint.in librt==0.11.0 # via mypy markdown-it-py==4.2.0 @@ -73,7 +73,7 @@ multidict==6.7.1 # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" - # via -r requirements/lint.in + # via -r lint.in mypy-extensions==1.1.0 # via mypy nodeenv==1.10.0 @@ -89,13 +89,13 @@ platformdirs==4.10.0 pluggy==1.6.0 # via pytest pre-commit==4.6.0 - # via -r requirements/lint.in + # via -r lint.in propcache==0.5.2 # via # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/lint.in + # via -r lint.in pycares==5.0.1 # via aiodns pycparser==3.0 @@ -110,25 +110,25 @@ pygments==2.20.0 # rich pytest==9.0.3 # via - # -r requirements/lint.in + # -r lint.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed # pytest-mock pytest-aiohttp==1.1.0 - # via -r requirements/lint.in + # via -r lint.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 - # via -r requirements/lint.in + # via -r lint.in pytest-mock==3.15.1 - # via -r requirements/lint.in + # via -r lint.in python-dateutil==2.9.0.post0 # via freezegun python-discovery==1.4.0 # via virtualenv python-on-whales==0.81.0 - # via -r requirements/lint.in + # via -r lint.in pyyaml==6.0.3 # via pre-commit rich==15.0.0 @@ -136,14 +136,14 @@ rich==15.0.0 six==1.17.0 # via python-dateutil slotscheck==0.20.0 - # via -r requirements/lint.in + # via -r lint.in tomli==2.4.1 # via # mypy # pytest # slotscheck trustme==1.2.1 - # via -r requirements/lint.in + # via -r lint.in typing-extensions==4.15.0 # via # aiosignal @@ -160,12 +160,12 @@ typing-extensions==4.15.0 typing-inspection==0.4.2 # via pydantic uvloop==0.22.1 ; platform_system != "Windows" - # via -r requirements/lint.in + # via -r lint.in valkey==6.1.1 - # via -r requirements/lint.in + # via -r lint.in virtualenv==21.4.1 # via pre-commit yarl==1.24.2 # via aiohttp zlib-ng==1.0.0 - # via -r requirements/lint.in + # via -r lint.in diff --git a/requirements/test-common-base.txt b/requirements/test-common-base.txt index ac93663fef7..52d78569cfa 100644 --- a/requirements/test-common-base.txt +++ b/requirements/test-common-base.txt @@ -21,7 +21,7 @@ coverage==7.14.1 exceptiongroup==1.3.1 # via pytest freezegun==1.5.5 - # via -r requirements/test-common-base.in + # via -r test-common-base.in frozenlist==1.8.0 # via # aiohttp @@ -37,7 +37,7 @@ multidict==6.7.1 packaging==26.0 # via pytest pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pluggy==1.6.0 # via # pytest @@ -47,31 +47,31 @@ propcache==0.5.2 # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pygments==2.19.2 # via pytest -pytest==9.0.2 +pytest==9.0.3 # via - # -r requirements/test-common-base.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-cov # pytest-mock # pytest-timeout pytest-aiohttp==1.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-asyncio==1.3.0 # via pytest-aiohttp pytest-cov==7.0.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in python-dateutil==2.9.0.post0 # via freezegun setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil tomli==2.4.1 @@ -85,7 +85,7 @@ typing-extensions==4.15.0 # multidict # pytest-asyncio wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in yarl==1.24.2 # via aiohttp diff --git a/requirements/test-common.txt b/requirements/test-common.txt index cd82228ae08..3c4ae8756e9 100644 --- a/requirements/test-common.txt +++ b/requirements/test-common.txt @@ -19,14 +19,14 @@ attrs==26.1.0 backports-asyncio-runner==1.2.0 # via pytest-asyncio blockbuster==1.5.26 - # via -r requirements/test-common.in + # via -r test-common.in cffi==2.0.0 # via cryptography click==8.4.1 # via wait-for-it coverage==7.14.1 # via - # -r requirements/test-common.in + # -r test-common.in # pytest-cov cryptography==48.0.0 # via trustme @@ -37,7 +37,7 @@ execnet==2.1.2 forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 - # via -r requirements/test-common-base.in + # via -r test-common-base.in frozenlist==1.8.0 # via # aiohttp @@ -49,7 +49,7 @@ idna==3.17 iniconfig==2.3.0 # via pytest isal==1.8.0 ; python_version < "3.14" and implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in librt==0.11.0 # via mypy markdown-it-py==4.2.0 @@ -61,7 +61,7 @@ multidict==6.7.1 # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in mypy-extensions==1.1.0 # via mypy packaging==26.2 @@ -69,7 +69,7 @@ packaging==26.2 pathspec==1.1.1 # via mypy pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pluggy==1.6.0 # via # pytest @@ -79,7 +79,7 @@ propcache==0.5.2 # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pycparser==3.0 # via cffi pydantic==2.13.4 @@ -92,7 +92,7 @@ pygments==2.20.0 # rich pytest==9.0.3 # via - # -r requirements/test-common-base.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed @@ -101,27 +101,27 @@ pytest==9.0.3 # pytest-timeout # pytest-xdist pytest-aiohttp==1.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 - # via -r requirements/test-common.in + # via -r test-common.in pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-xdist==3.8.0 - # via -r requirements/test-common.in + # via -r test-common.in python-dateutil==2.9.0.post0 # via freezegun python-on-whales==0.81.0 - # via -r requirements/test-common.in + # via -r test-common.in rich==15.0.0 # via pytest-codspeed setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil tomli==2.4.1 @@ -130,7 +130,7 @@ tomli==2.4.1 # mypy # pytest trustme==1.2.1 ; platform_machine != "i686" - # via -r requirements/test-common.in + # via -r test-common.in typing-extensions==4.15.0 # via # aiosignal @@ -146,11 +146,11 @@ typing-extensions==4.15.0 typing-inspection==0.4.2 # via pydantic wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in yarl==1.24.2 # via aiohttp zlib-ng==1.0.0 - # via -r requirements/test-common.in + # via -r test-common.in # The following packages are considered to be unsafe in a requirements file: # aiohttp diff --git a/requirements/test-ft.txt b/requirements/test-ft.txt index c89f4423c89..b135e15f191 100644 --- a/requirements/test-ft.txt +++ b/requirements/test-ft.txt @@ -5,14 +5,14 @@ # pip-compile --output-file=requirements/test-ft.txt --strip-extras --unsafe-package=aiohttp requirements/test-ft.in # aiodns==4.0.4 ; sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in aiohappyeyeballs==2.6.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp aiosignal==1.4.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp annotated-types==0.7.0 # via pydantic @@ -20,18 +20,18 @@ ast-serialize==0.5.0 # via mypy async-timeout==5.0.1 ; python_version < "3.11" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp attrs==26.1.0 # via aiohttp backports-asyncio-runner==1.2.0 # via pytest-asyncio backports-zstd==1.3.0 ; platform_python_implementation == "CPython" and python_version < "3.14" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in blockbuster==1.5.26 - # via -r requirements/test-common.in + # via -r test-common.in brotli==1.2.0 ; platform_python_implementation == "CPython" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in cffi==2.0.0 # via # cryptography @@ -40,7 +40,7 @@ click==8.4.1 # via wait-for-it coverage==7.14.1 # via - # -r requirements/test-common.in + # -r test-common.in # pytest-cov cryptography==48.0.0 # via trustme @@ -51,14 +51,14 @@ execnet==2.1.2 forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 - # via -r requirements/test-common-base.in + # via -r test-common-base.in frozenlist==1.8.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # aiosignal gunicorn==26.0.0 - # via -r requirements/base-ft.in + # via -r base-ft.in idna==3.17 # via # trustme @@ -66,7 +66,7 @@ idna==3.17 iniconfig==2.3.0 # via pytest isal==1.8.0 ; python_version < "3.14" and implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in librt==0.11.0 # via mypy markdown-it-py==4.2.0 @@ -75,11 +75,11 @@ mdurl==0.1.2 # via markdown-it-py multidict==6.7.1 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in mypy-extensions==1.1.0 # via mypy packaging==26.2 @@ -89,18 +89,18 @@ packaging==26.2 pathspec==1.1.1 # via mypy pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pluggy==1.6.0 # via # pytest # pytest-cov propcache==0.5.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pycares==5.0.1 # via aiodns pycparser==3.0 @@ -115,7 +115,7 @@ pygments==2.20.0 # rich pytest==9.0.3 # via - # -r requirements/test-common-base.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed @@ -124,27 +124,27 @@ pytest==9.0.3 # pytest-timeout # pytest-xdist pytest-aiohttp==1.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 - # via -r requirements/test-common.in + # via -r test-common.in pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-xdist==3.8.0 - # via -r requirements/test-common.in + # via -r test-common.in python-dateutil==2.9.0.post0 # via freezegun python-on-whales==0.81.0 - # via -r requirements/test-common.in + # via -r test-common.in rich==15.0.0 # via pytest-codspeed setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil tomli==2.4.1 @@ -153,10 +153,10 @@ tomli==2.4.1 # mypy # pytest trustme==1.2.1 ; platform_machine != "i686" - # via -r requirements/test-common.in + # via -r test-common.in typing-extensions==4.15.0 ; python_version < "3.13" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiosignal # cryptography # exceptiongroup @@ -170,13 +170,13 @@ typing-extensions==4.15.0 ; python_version < "3.13" typing-inspection==0.4.2 # via pydantic wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in yarl==1.24.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp zlib-ng==1.0.0 - # via -r requirements/test-common.in + # via -r test-common.in # The following packages are considered to be unsafe in a requirements file: # aiohttp diff --git a/requirements/test-mobile.txt b/requirements/test-mobile.txt index edce1810ac0..77b08935af5 100644 --- a/requirements/test-mobile.txt +++ b/requirements/test-mobile.txt @@ -5,32 +5,32 @@ # pip-compile --output-file=requirements/test-mobile.txt --strip-extras --unsafe-package=aiohttp requirements/test-mobile.in # aiodns==4.0.4 ; sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in aiohappyeyeballs==2.6.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp aiosignal==1.4.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp async-timeout==5.0.1 ; python_version < "3.11" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp attrs==26.1.0 # via aiohttp backports-asyncio-runner==1.2.0 ; python_version < "3.11" # via - # -r requirements/test-mobile.in + # -r test-mobile.in # pytest-asyncio backports-zstd==1.3.0 ; platform_python_implementation == "CPython" and python_version < "3.14" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in brotli==1.2.0 ; platform_python_implementation == "CPython" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in cffi==2.0.0 ; sys_platform != "android" and sys_platform != "ios" # via - # -r requirements/test-mobile.in + # -r test-mobile.in # pycares click==8.4.0 # via wait-for-it @@ -39,21 +39,21 @@ coverage==7.14.1 exceptiongroup==1.3.1 # via pytest freezegun==1.5.5 - # via -r requirements/test-common-base.in + # via -r test-common-base.in frozenlist==1.8.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # aiosignal gunicorn==26.0.0 - # via -r requirements/base-ft.in + # via -r base-ft.in idna==3.17 # via yarl iniconfig==2.3.0 # via pytest multidict==6.7.1 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl packaging==26.2 @@ -61,21 +61,21 @@ packaging==26.2 # gunicorn # pytest pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pluggy==1.6.0 # via # pytest # pytest-cov propcache==0.5.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pycares==5.0.1 ; sys_platform != "android" and sys_platform != "ios" # via - # -r requirements/test-mobile.in + # -r test-mobile.in # aiodns pycparser==3.0 # via cffi @@ -83,26 +83,26 @@ pygments==2.20.0 # via pytest pytest==9.0.3 # via - # -r requirements/test-common-base.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-cov # pytest-mock # pytest-timeout pytest-aiohttp==1.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-asyncio==1.4.0a2 # via pytest-aiohttp pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in python-dateutil==2.9.0.post0 # via freezegun setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil tomli==2.4.1 @@ -111,16 +111,16 @@ tomli==2.4.1 # pytest typing-extensions==4.15.0 ; python_version < "3.13" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiosignal # exceptiongroup # multidict # pytest-asyncio wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in yarl==1.24.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/test.txt b/requirements/test.txt index 27414c43592..fe6073a9b27 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -5,14 +5,14 @@ # pip-compile --output-file=requirements/test.txt --strip-extras --unsafe-package=aiohttp requirements/test.in # aiodns==4.0.4 ; sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in aiohappyeyeballs==2.6.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp aiosignal==1.4.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp annotated-types==0.7.0 # via pydantic @@ -20,18 +20,18 @@ ast-serialize==0.5.0 # via mypy async-timeout==5.0.1 ; python_version < "3.11" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp attrs==26.1.0 # via aiohttp backports-asyncio-runner==1.2.0 # via pytest-asyncio backports-zstd==1.3.0 ; platform_python_implementation == "CPython" and python_version < "3.14" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in blockbuster==1.5.26 - # via -r requirements/test-common.in + # via -r test-common.in brotli==1.2.0 ; platform_python_implementation == "CPython" and sys_platform != "android" and sys_platform != "ios" - # via -r requirements/runtime-deps.in + # via -r runtime-deps.in cffi==2.0.0 # via # cryptography @@ -40,7 +40,7 @@ click==8.4.1 # via wait-for-it coverage==7.14.1 # via - # -r requirements/test-common.in + # -r test-common.in # pytest-cov cryptography==48.0.0 # via trustme @@ -51,14 +51,14 @@ execnet==2.1.2 forbiddenfruit==0.1.4 # via blockbuster freezegun==1.5.5 - # via -r requirements/test-common-base.in + # via -r test-common-base.in frozenlist==1.8.0 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # aiosignal gunicorn==26.0.0 - # via -r requirements/base.in + # via -r base.in idna==3.17 # via # trustme @@ -66,7 +66,7 @@ idna==3.17 iniconfig==2.3.0 # via pytest isal==1.7.2 ; python_version < "3.14" and implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in librt==0.11.0 # via mypy markdown-it-py==4.2.0 @@ -75,11 +75,11 @@ mdurl==0.1.2 # via markdown-it-py multidict==6.7.1 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl mypy==2.1.0 ; implementation_name == "cpython" - # via -r requirements/test-common.in + # via -r test-common.in mypy-extensions==1.1.0 # via mypy packaging==26.2 @@ -89,18 +89,18 @@ packaging==26.2 pathspec==1.1.1 # via mypy pkgconfig==1.6.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pluggy==1.6.0 # via # pytest # pytest-cov propcache==0.5.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp # yarl proxy-py==2.4.10 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pycares==5.0.1 # via aiodns pycparser==3.0 @@ -115,7 +115,7 @@ pygments==2.20.0 # rich pytest==9.0.3 # via - # -r requirements/test-common-base.in + # -r test-common-base.in # pytest-aiohttp # pytest-asyncio # pytest-codspeed @@ -124,27 +124,27 @@ pytest==9.0.3 # pytest-timeout # pytest-xdist pytest-aiohttp==1.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-asyncio==1.4.0 # via pytest-aiohttp pytest-codspeed==5.0.3 - # via -r requirements/test-common.in + # via -r test-common.in pytest-cov==7.1.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-mock==3.15.1 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-timeout==2.4.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in pytest-xdist==3.8.0 - # via -r requirements/test-common.in + # via -r test-common.in python-dateutil==2.9.0.post0 # via freezegun python-on-whales==0.81.0 - # via -r requirements/test-common.in + # via -r test-common.in rich==15.0.0 # via pytest-codspeed setuptools-git==1.2 - # via -r requirements/test-common-base.in + # via -r test-common-base.in six==1.17.0 # via python-dateutil tomli==2.4.1 @@ -153,10 +153,10 @@ tomli==2.4.1 # mypy # pytest trustme==1.2.1 ; platform_machine != "i686" - # via -r requirements/test-common.in + # via -r test-common.in typing-extensions==4.15.0 ; python_version < "3.13" # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiosignal # cryptography # exceptiongroup @@ -170,15 +170,15 @@ typing-extensions==4.15.0 ; python_version < "3.13" typing-inspection==0.4.2 # via pydantic uvloop==0.22.1 ; platform_system != "Windows" and implementation_name == "cpython" - # via -r requirements/base.in + # via -r base.in wait-for-it==2.3.0 - # via -r requirements/test-common-base.in + # via -r test-common-base.in yarl==1.24.2 # via - # -r requirements/runtime-deps.in + # -r runtime-deps.in # aiohttp zlib-ng==1.0.0 - # via -r requirements/test-common.in + # via -r test-common.in # The following packages are considered to be unsafe in a requirements file: # aiohttp