Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-sse-starlette for
openSUSE:Factory checked in at 2026-05-20 15:24:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sse-starlette (Old)
and /work/SRC/openSUSE:Factory/.python-sse-starlette.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sse-starlette"
Wed May 20 15:24:54 2026 rev:6 rq:1354120 version:3.4.4
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-sse-starlette/python-sse-starlette.changes
2026-03-30 18:34:08.938206442 +0200
+++
/work/SRC/openSUSE:Factory/.python-sse-starlette.new.1966/python-sse-starlette.changes
2026-05-20 15:26:03.657946021 +0200
@@ -1,0 +2,8 @@
+Tue May 19 21:50:54 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.4.4:
+ * **Full Changelog**: https://github.com/sysid/sse-
+ starlette/compare/v3.3.4...v3.4.4
+ * Chore/starlette sync
+
+-------------------------------------------------------------------
Old:
----
sse_starlette-3.3.4.tar.gz
New:
----
sse_starlette-3.4.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sse-starlette.spec ++++++
--- /var/tmp/diff_new_pack.4svNUI/_old 2026-05-20 15:26:04.825994151 +0200
+++ /var/tmp/diff_new_pack.4svNUI/_new 2026-05-20 15:26:04.825994151 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-sse-starlette
-Version: 3.3.4
+Version: 3.4.4
Release: 0
Summary: SSE plugin for Starlette
License: BSD-3-Clause
++++++ sse_starlette-3.3.4.tar.gz -> sse_starlette-3.4.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/.github/workflows/release.yml
new/sse-starlette-3.4.4/.github/workflows/release.yml
--- old/sse-starlette-3.3.4/.github/workflows/release.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/sse-starlette-3.4.4/.github/workflows/release.yml 2026-05-12
19:36:32.000000000 +0200
@@ -0,0 +1,55 @@
+name: release
+
+on:
+ push:
+ tags:
+ - 'v*'
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Version to publish (informational; uses pyproject.toml)'
+ required: false
+
+jobs:
+ build:
+ name: Build distribution
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@v6
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+
+ - name: Set up Python
+ uses: actions/setup-python@v6
+ with:
+ python-version: '3.12'
+
+ - name: Build sdist and wheel
+ run: uv build
+
+ - name: Upload dist artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: python-package-distributions
+ path: dist/
+
+ publish-pypi:
+ name: Publish to PyPI (Trusted Publishing)
+ needs: build
+ runs-on: ubuntu-latest
+ environment:
+ name: pypi
+ url: https://pypi.org/project/sse-starlette/
+ permissions:
+ id-token: write # REQUIRED for trusted publishing (OIDC)
+ steps:
+ - name: Download dist artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: python-package-distributions
+ path: dist/
+
+ - name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/.gitignore
new/sse-starlette-3.4.4/.gitignore
--- old/sse-starlette-3.3.4/.gitignore 2026-03-29 10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/.gitignore 2026-05-12 19:36:32.000000000 +0200
@@ -1,3 +1,5 @@
+.specify
+specs
.workmux.yaml
thoughts
report.xml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/Makefile
new/sse-starlette-3.4.4/Makefile
--- old/sse-starlette-3.3.4/Makefile 2026-03-29 10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/Makefile 2026-05-12 19:36:32.000000000 +0200
@@ -27,7 +27,7 @@
.PHONY: build
build: clean format ## format and build
@echo "building"
- uv run python -m build
+ uv build
.PHONY: publish
publish: ## publish
@@ -81,7 +81,11 @@
.PHONY: test-unit
test-unit: ## run all tests except "integration" marked
- RUN_ENV=local uv run python -m pytest -m "not (integration or
experimentation)" --cov-config=pyproject.toml --cov-report=html
--cov-report=term --cov=$(pkg_src) tests
+ RUN_ENV=local uv run python -m pytest --ignore=tests/experimentation -m
"not (integration or experimentation)" --cov-config=pyproject.toml
--cov-report=html --cov-report=term --cov=$(pkg_src) tests
+
+.PHONY: test-experimentation
+test-experimentation: ## run experimentation tests (requires --group
experimentation)
+ RUN_ENV=local uv run --group experimentation python -m pytest -m
"experimentation" tests/experimentation
.PHONY: test-docker
test-docker: ## test-docker (docker desktop: advanced settings)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/README.md
new/sse-starlette-3.4.4/README.md
--- old/sse-starlette-3.3.4/README.md 2026-03-29 10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/README.md 2026-05-12 19:36:32.000000000 +0200
@@ -14,9 +14,12 @@
pip install sse-starlette
uv add sse-starlette
-# To run the examples and demonstrations
+# To run the examples (fastapi, uvicorn, pydantic)
uv add sse-starlette[examples]
+# Example 03 also needs the DB extras (sqlalchemy, aiosqlite)
+uv add sse-starlette[examples,examples-db]
+
# Recommended ASGI server
uv add sse-starlette[uvicorn,granian,daphne]
```
@@ -429,10 +432,16 @@
See examples and demonstrations for implementation patterns. Run tests with:
```bash
-make test-unit # Unit tests only
-make test # All tests including integration
+make test-unit # Unit tests only (default dev install)
+make test # Unit + docker integration tests
+make test-experimentation # Optional experimentation tests (multi-consumer
load tests)
+ # Requires the `experimentation` dependency group:
+ # uv sync --group experimentation
```
+The `experimentation` group is opt-in (kept out of the default `dev` install)
to keep the
+contributor footprint small. See `tests/experimentation/` for the tests it
enables.
+
<!-- Badges -->
[pypi-image]: https://badge.fury.io/py/sse-starlette.svg
[pypi-url]: https://pypi.org/project/sse-starlette/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/VERSION
new/sse-starlette-3.4.4/VERSION
--- old/sse-starlette-3.3.4/VERSION 2026-03-29 10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/VERSION 2026-05-12 19:36:32.000000000 +0200
@@ -1 +1 @@
-3.3.4
+3.4.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/examples/README.md
new/sse-starlette-3.4.4/examples/README.md
--- old/sse-starlette-3.3.4/examples/README.md 2026-03-29 10:59:32.000000000
+0200
+++ new/sse-starlette-3.4.4/examples/README.md 2026-05-12 19:36:32.000000000
+0200
@@ -5,8 +5,8 @@
## Prerequisites
- `pip install sse-starlette` (or install from source)
-- Most examples need: `pip install fastapi uvicorn`
-- Example 03 additionally needs: `pip install sqlalchemy[asyncio] aiosqlite`
+- Most examples: `pip install 'sse-starlette[examples]'` (pulls fastapi,
uvicorn, pydantic)
+- Example 03 additionally: `pip install 'sse-starlette[examples-db]'` (pulls
sqlalchemy, aiosqlite)
## Examples
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/pyproject.toml
new/sse-starlette-3.4.4/pyproject.toml
--- old/sse-starlette-3.3.4/pyproject.toml 2026-03-29 10:59:32.000000000
+0200
+++ new/sse-starlette-3.4.4/pyproject.toml 2026-05-12 19:36:32.000000000
+0200
@@ -1,6 +1,6 @@
[project]
name = "sse-starlette"
-version = "3.3.4"
+version = "3.4.4"
description = "SSE plugin for Starlette"
readme = "README.md"
license = "BSD-3-Clause"
@@ -29,6 +29,9 @@
examples = [
"uvicorn>=0.34.0",
"fastapi>=0.115.12",
+ "pydantic>=2",
+]
+examples-db = [
"sqlalchemy[asyncio]>=2.0.41",
"aiosqlite>=0.21.0",
]
@@ -45,24 +48,26 @@
[dependency-groups]
dev = [
"asgi-lifespan>=2.1.0",
- "async-timeout>=5.0.1",
- "build>=1.4.0",
"httpx>=0.28.1",
- "portend>=3.2.1",
"pre-commit>=4.5.0",
- "psutil>=7.0.0",
"pytest>=8.3.4",
"pytest-asyncio>=0.25.0",
"pytest-cov>=6.0.0",
"ruff>=0.14.0",
- "starlette>=0.49.1",
- "tenacity>=9.0.0",
"testcontainers>=4.9.0",
"ty>=0.0.19",
"uvicorn>=0.34.0",
]
+experimentation = [
+ "portend>=3.2.1",
+ "psutil>=7.0.0",
+ "tenacity>=9.0.0",
+]
[project.urls]
+Homepage = "https://github.com/sysid/sse-starlette"
+Repository = "https://github.com/sysid/sse-starlette"
+Issues = "https://github.com/sysid/sse-starlette/issues"
Source = "https://github.com/sysid/sse-starlette"
[build-system]
@@ -73,7 +78,7 @@
include = ["sse_starlette*"]
[tool.bumpversion]
-current_version = "3.3.4"
+current_version = "3.4.4"
commit = true
tag = false
message = "Bump version to {new_version}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/sse_starlette/__init__.py
new/sse-starlette-3.4.4/sse_starlette/__init__.py
--- old/sse-starlette-3.3.4/sse_starlette/__init__.py 2026-03-29
10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/sse_starlette/__init__.py 2026-05-12
19:36:32.000000000 +0200
@@ -2,4 +2,4 @@
from sse_starlette.sse import EventSourceResponse
__all__ = ["EventSourceResponse", "ServerSentEvent", "JSONServerSentEvent"]
-__version__ = "3.3.4"
+__version__ = "3.4.4"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/sse_starlette/_utils.py
new/sse-starlette-3.4.4/sse_starlette/_utils.py
--- old/sse-starlette-3.3.4/sse_starlette/_utils.py 1970-01-01
01:00:00.000000000 +0100
+++ new/sse-starlette-3.4.4/sse_starlette/_utils.py 2026-05-12
19:36:32.000000000 +0200
@@ -0,0 +1,37 @@
+import sys
+from contextlib import contextmanager
+from typing import Generator
+
+# Divergence #3 (see sse_starlette/sse.py module docstring): vendored copy of
+# starlette._utils.collapse_excgroups. We do not import the upstream version
+# because it lives in a private (underscore-prefixed) Starlette module, and
+# the pinned floor (starlette>=0.41.3) makes that import surface unstable.
+#
+# Behaviour: AnyIO v4 wraps task-group failures in an ExceptionGroup; this
+# helper unwraps single-exception groups so user middleware sees the bare
+# exception (matching pre-v4 anyio and Starlette's StreamingResponse).
+# Solution per https://anyio.readthedocs.io/en/stable/migration.html
+
+has_exceptiongroups = True
+if sys.version_info < (3, 11):
+ try:
+ from exceptiongroup import BaseExceptionGroup # noqa: F401
+ except ImportError:
+ has_exceptiongroups = False
+
+
+@contextmanager
+def collapse_excgroups() -> Generator[None, None, None]:
+ try:
+ yield
+ except BaseException as exc:
+ if has_exceptiongroups:
+ # `ty` does not narrow BaseExceptionGroup.exceptions; the runtime
+ # contract is identical to starlette._utils.collapse_excgroups.
+ while isinstance(exc, BaseExceptionGroup) and len(exc.exceptions)
== 1: # ty: ignore[unresolved-attribute]
+ exc = exc.exceptions[0] # ty: ignore[unresolved-attribute]
+
+ raise exc
+
+
+__all__ = ["collapse_excgroups"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/sse_starlette/event.py
new/sse-starlette-3.4.4/sse_starlette/event.py
--- old/sse-starlette-3.3.4/sse_starlette/event.py 2026-03-29
10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/sse_starlette/event.py 2026-05-12
19:36:32.000000000 +0200
@@ -86,8 +86,8 @@
def ensure_bytes(data: Union[bytes, dict, ServerSentEvent, Any], sep: str) ->
bytes:
- if isinstance(data, bytes):
- return data
+ if isinstance(data, (bytes, memoryview)):
+ return bytes(data)
if isinstance(data, ServerSentEvent):
return data.encode()
if isinstance(data, dict):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/sse_starlette/sse.py
new/sse-starlette-3.4.4/sse_starlette/sse.py
--- old/sse-starlette-3.3.4/sse_starlette/sse.py 2026-03-29
10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/sse_starlette/sse.py 2026-05-12
19:36:32.000000000 +0200
@@ -1,3 +1,31 @@
+"""Server-Sent Events response for Starlette / FastAPI.
+
+Intentional divergence from ``starlette.responses.StreamingResponse``
+--------------------------------------------------------------------
+
+``EventSourceResponse`` is modelled on Starlette's ``StreamingResponse`` and
+re-syncs most of its behaviour (WebSocket denial, ``collapse_excgroups()``
+around the task group, ``memoryview`` chunk handling). The following points
+are deliberate divergences — DO NOT "fix" them without reading the rationale:
+
+1. ASGI ``spec_version >= 2.4`` fast path is NOT adopted.
+ Upstream short-circuits to ``await stream_response(send)`` and converts
+ ``OSError`` into ``ClientDisconnect``, skipping ``listen_for_disconnect``.
+ We keep ``_listen_for_disconnect`` running because it
+ (a) invokes ``client_close_handler_callable`` on disconnect,
+ (b) flips ``self.active = False`` so ``_ping`` and the cooperative
+ shutdown grace loop exit promptly.
+ Adopting the upstream fast path would regress both features.
+
+2. ``_wrap_websocket_denial_send`` is inlined in this module rather than
+ inherited from ``starlette.responses.Response``. The helper landed on
+ Starlette ``main`` after our minimum pin (``starlette>=0.41.3``); inline
+ until the floor moves past the release that contains it.
+
+3. ``collapse_excgroups()`` is vendored in ``sse_starlette._utils`` rather
+ than imported from ``starlette._utils`` (private module).
+"""
+
import asyncio
import logging
import signal
@@ -24,6 +52,7 @@
from starlette.responses import Response
from starlette.types import Receive, Scope, Send, Message
+from sse_starlette._utils import collapse_excgroups
from sse_starlette.event import ServerSentEvent, ensure_bytes
@@ -127,6 +156,24 @@
state.watcher_started = False
+def _wrap_websocket_denial_send(send: Send) -> Send:
+ """Mirror of ``starlette.responses.Response._wrap_websocket_denial_send``.
+
+ Divergence #2 (see module docstring): inlined because the helper landed
+ on Starlette ``main`` (commit 9ee9519) after our minimum pin
+ ``starlette>=0.41.3``. Drop this once the floor moves past the release
+ that contains it.
+ """
+
+ async def wrapped(message: Message) -> None:
+ message_type = message["type"]
+ if message_type in {"http.response.start", "http.response.body"}:
+ message = {**message, "type": "websocket." + message_type}
+ await send(message)
+
+ return wrapped
+
+
class SendTimeoutError(TimeoutError):
pass
@@ -329,7 +376,13 @@
await send({"type": "http.response.body", "body": b"",
"more_body": False})
async def _listen_for_disconnect(self, receive: Receive) -> None:
- """Watch for a disconnect message from the client."""
+ """Watch for a disconnect message from the client.
+
+ Divergence #1 (see module docstring): kept unconditionally instead of
+ adopting Starlette's ASGI 2.4 ``OSError → ClientDisconnect`` fast path,
+ because this loop drives ``client_close_handler_callable`` and flips
+ ``self.active = False`` for ``_ping`` and the shutdown grace loop.
+ """
while self.active:
message = await receive()
if message["type"] == "http.disconnect":
@@ -413,25 +466,37 @@
- _listen_for_exit_signal to respond to server shutdown
- _listen_for_disconnect to respond to client disconnect
"""
- async with anyio.create_task_group() as task_group:
- #
https://trio.readthedocs.io/en/latest/reference-core.html#custom-supervisors
- async def cancel_on_finish(coro: Callable[[], Awaitable[None]]):
- await coro()
- task_group.cancel_scope.cancel()
-
- task_group.start_soon(cancel_on_finish, lambda:
self._stream_response(send))
- task_group.start_soon(cancel_on_finish, lambda: self._ping(send))
- task_group.start_soon(
- cancel_on_finish, self._listen_for_exit_signal_with_grace
- )
+ # WebSocket denial parity with Starlette's StreamingResponse: a
+ # streaming response on a websocket scope must wrap send so message
+ # types become ``websocket.http.response.*``.
+ if scope["type"] == "websocket":
+ send = _wrap_websocket_denial_send(send)
+
+ # collapse_excgroups parity with Starlette's StreamingResponse: anyio
+ # v4 wraps task-group failures in ExceptionGroup; user middleware
+ # expects the bare exception.
+ with collapse_excgroups():
+ async with anyio.create_task_group() as task_group:
+ #
https://trio.readthedocs.io/en/latest/reference-core.html#custom-supervisors
+ async def cancel_on_finish(coro: Callable[[],
Awaitable[None]]):
+ await coro()
+ task_group.cancel_scope.cancel()
+
+ task_group.start_soon(
+ cancel_on_finish, lambda: self._stream_response(send)
+ )
+ task_group.start_soon(cancel_on_finish, lambda:
self._ping(send))
+ task_group.start_soon(
+ cancel_on_finish, self._listen_for_exit_signal_with_grace
+ )
- if self.data_sender_callable:
- task_group.start_soon(self.data_sender_callable)
+ if self.data_sender_callable:
+ task_group.start_soon(self.data_sender_callable)
- # Wait for the client to disconnect last
- task_group.start_soon(
- cancel_on_finish, lambda: self._listen_for_disconnect(receive)
- )
+ # Wait for the client to disconnect last
+ task_group.start_soon(
+ cancel_on_finish, lambda:
self._listen_for_disconnect(receive)
+ )
if self.background is not None:
await self.background()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/tests/anyio_compat.py
new/sse-starlette-3.4.4/tests/anyio_compat.py
--- old/sse-starlette-3.3.4/tests/anyio_compat.py 2026-03-29
10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/tests/anyio_compat.py 2026-05-12
19:36:32.000000000 +0200
@@ -1,32 +1,3 @@
-import sys
-from contextlib import contextmanager
-from typing import Generator
-
-# AnyIO v4 introduces a breaking change that groups all exceptions in a task
-# group into an exception group.
-# This file allows to be compatible with AnyIO <4 and >=4 by unwrapping groups
-# if they only contain a single exception. It also supports python <3.11
(before
-# exception groups support) and >=3.11.
-# Solution as proposed in https://anyio.readthedocs.io/en/stable/migration.html
-
-has_exceptiongroups = True
-if sys.version_info < (3, 11):
- try:
- from exceptiongroup import BaseExceptionGroup
- except ImportError:
- has_exceptiongroups = False
-
-
-@contextmanager
-def collapse_excgroups() -> Generator[None, None, None]:
- try:
- yield
- except BaseException as exc:
- if has_exceptiongroups:
- while isinstance(exc, BaseExceptionGroup) and len(exc.exceptions)
== 1:
- exc = exc.exceptions[0]
-
- raise exc
-
+from sse_starlette._utils import collapse_excgroups
__all__ = ["collapse_excgroups"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/sse-starlette-3.3.4/tests/experimentation/test_multiple_consumers_asyncio.py
new/sse-starlette-3.4.4/tests/experimentation/test_multiple_consumers_asyncio.py
---
old/sse-starlette-3.3.4/tests/experimentation/test_multiple_consumers_asyncio.py
2026-03-29 10:59:32.000000000 +0200
+++
new/sse-starlette-3.4.4/tests/experimentation/test_multiple_consumers_asyncio.py
2026-05-12 19:36:32.000000000 +0200
@@ -5,7 +5,7 @@
import pytest
import httpx
import uvicorn
-from async_timeout import timeout
+from asyncio import timeout
import portend
from tenacity import retry, stop_after_attempt, wait_exponential
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/sse-starlette-3.3.4/tests/experimentation/test_multiple_consumers_threads.py
new/sse-starlette-3.4.4/tests/experimentation/test_multiple_consumers_threads.py
---
old/sse-starlette-3.3.4/tests/experimentation/test_multiple_consumers_threads.py
2026-03-29 10:59:32.000000000 +0200
+++
new/sse-starlette-3.4.4/tests/experimentation/test_multiple_consumers_threads.py
2026-05-12 19:36:32.000000000 +0200
@@ -7,11 +7,9 @@
from functools import partial
from pathlib import Path
-import httpcore
import httpx
import psutil
import pytest
-import requests
_log = logging.getLogger(__name__)
@@ -29,11 +27,11 @@
"""Check if the server is ready by making a GET request to the URL."""
for _ in range(SERVER_READY_TIMEOUT):
try:
- response = requests.get(f"{URL}:{port}/health")
+ response = httpx.get(f"{URL}:{port}/health")
if response.status_code == 200:
_log.info("Server is ready.")
return True
- except requests.ConnectionError:
+ except httpx.ConnectError:
_log.debug("Server not ready yet...")
time.sleep(1)
return False
@@ -112,8 +110,6 @@
i += 1
except httpx.RemoteProtocolError as e:
_log.error(e)
- except httpcore.RemoteProtocolError as e:
- _log.error(e)
finally:
assert i == expected_lines, (
f"Expected {expected_lines} lines"
@@ -126,7 +122,7 @@
# i=0, line='data: 1'
# i=1, line=''
# ...
- assert i == expected_lines, (
+ assert i == expected_lines, ( # TODO: racy between 8-12
f"Expected {expected_lines} lines"
) # not part of test runner, failure is not reported
@@ -138,7 +134,11 @@
[
(
"uvicorn tests.integration.main_endless:app --host localhost
--port {port} --log-level {log_level}",
- 14,
+ # 4 events at t=0/0.3/0.6/0.9 (× 2 aiter_lines per SSE event:
+ # 'data: N' + ''), all delivered before terminate_server() at
t=1.0.
+ # Events emitted after the SIGTERM are racy against the watcher's
+ # 0.5s poll, so this is the deterministic floor.
+ 8,
),
(
"uvicorn tests.integration.main_endless_conditional:app --host
localhost --port {port} --log-level {log_level}",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/tests/test_event.py
new/sse-starlette-3.4.4/tests/test_event.py
--- old/sse-starlette-3.3.4/tests/test_event.py 2026-03-29 10:59:32.000000000
+0200
+++ new/sse-starlette-3.4.4/tests/test_event.py 2026-05-12 19:36:32.000000000
+0200
@@ -3,6 +3,12 @@
from sse_starlette.event import ServerSentEvent, JSONServerSentEvent,
ensure_bytes
+def test_ensure_bytes_whenMemoryview_thenReturnsBytes():
+ """Parity with Starlette's StreamingResponse: memoryview chunks pass
through."""
+ mv = memoryview(b"hello")
+ assert ensure_bytes(mv, "\r\n") == b"hello"
+
+
@pytest.mark.parametrize(
"input, expected",
[
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/tests/test_issue167.py
new/sse-starlette-3.4.4/tests/test_issue167.py
--- old/sse-starlette-3.3.4/tests/test_issue167.py 2026-03-29
10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/tests/test_issue167.py 2026-05-12
19:36:32.000000000 +0200
@@ -51,7 +51,11 @@
async def run_response():
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
tg.start_soon(run_response)
await anyio.sleep(0.3)
@@ -111,7 +115,11 @@
async def run_response():
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
tg.start_soon(run_response)
await anyio.sleep(0.3)
@@ -169,7 +177,11 @@
async def run_response():
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
tg.start_soon(run_response)
await anyio.sleep(0.3)
@@ -216,7 +228,11 @@
async def run_response():
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
tg.start_soon(run_response)
await anyio.sleep(0.3)
@@ -267,7 +283,11 @@
async def run_response():
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
tg.start_soon(run_response)
await anyio.sleep(0.3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/tests/test_sse.py
new/sse-starlette-3.4.4/tests/test_sse.py
--- old/sse-starlette-3.3.4/tests/test_sse.py 2026-03-29 10:59:32.000000000
+0200
+++ new/sse-starlette-3.4.4/tests/test_sse.py 2026-05-12 19:36:32.000000000
+0200
@@ -192,7 +192,11 @@
# Act & Assert
with pytest.raises(SendTimeoutError):
with collapse_excgroups():
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []},
+ mock_receive,
+ mock_send,
+ )
assert cleanup_executed, "Cleanup should be executed on timeout"
@@ -263,7 +267,9 @@
# Act & Assert
with pytest.raises(anyio.WouldBlock):
with collapse_excgroups():
- await response({}, receive, send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []}, receive,
send
+ )
def test_pingInterval_whenCreated_thenUsesDefaultValue(self):
# Arrange & Act
@@ -328,7 +334,9 @@
response = EventSourceResponse([],
background=BackgroundTask(background_task))
# Act
- await response({}, mock_receive, mock_send)
+ await response(
+ {"type": "http", "method": "GET", "headers": []}, mock_receive,
mock_send
+ )
# Assert
assert task_executed, "Background task should be executed"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/tests/test_streaming_parity.py
new/sse-starlette-3.4.4/tests/test_streaming_parity.py
--- old/sse-starlette-3.3.4/tests/test_streaming_parity.py 1970-01-01
01:00:00.000000000 +0100
+++ new/sse-starlette-3.4.4/tests/test_streaming_parity.py 2026-05-12
19:36:32.000000000 +0200
@@ -0,0 +1,78 @@
+"""Parity tests vs Starlette's StreamingResponse.
+
+These cover behaviour we intentionally re-sync from
+``starlette.responses.StreamingResponse`` so that ``EventSourceResponse``
+remains a drop-in citizen in the Starlette response hierarchy.
+"""
+
+from __future__ import annotations
+
+import pytest
+
+from sse_starlette import EventSourceResponse
+
+
[email protected]
+async def test_call_when_generatorRaises_then_bareExceptionPropagates():
+ """A user-generator exception must not surface as an ExceptionGroup.
+
+ StreamingResponse uses ``collapse_excgroups()`` around its task group so
+ middleware sees the bare exception. EventSourceResponse must do the same.
+ """
+
+ async def boom():
+ yield {"data": "first"}
+ raise RuntimeError("boom")
+
+ response = EventSourceResponse(boom(), ping=1000)
+
+ sent: list[dict] = []
+
+ async def send(message):
+ sent.append(message)
+
+ async def receive():
+ # Block forever — the generator's exception should end the response
+ # before any disconnect is needed.
+ import anyio
+
+ await anyio.sleep_forever()
+
+ scope = {"type": "http", "method": "GET", "headers": []}
+
+ with pytest.raises(RuntimeError, match="boom"):
+ await response(scope, receive, send)
+
+
[email protected]
+async def test_call_whenWebsocketScope_thenSendIsWrappedForDenial():
+ """Streaming responses must be usable as WebSocket denial responses.
+
+ Starlette wraps ``send`` so message types become
``websocket.http.response.*``.
+ """
+
+ async def gen():
+ yield b"denied"
+
+ response = EventSourceResponse(gen(), ping=1000)
+
+ sent: list[dict] = []
+
+ async def send(message):
+ sent.append(message)
+
+ async def receive(): # pragma: no cover - never awaited on WS denial path
+ import anyio
+
+ await anyio.sleep_forever()
+
+ scope = {"type": "websocket", "headers": []}
+
+ await response(scope, receive, send)
+
+ types = [m["type"] for m in sent]
+ assert types, "expected at least one message"
+ for t in types:
+ assert t.startswith("websocket."), f"unexpected message type: {t}"
+ assert "websocket.http.response.start" in types
+ assert "websocket.http.response.body" in types
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sse-starlette-3.3.4/uv.lock
new/sse-starlette-3.4.4/uv.lock
--- old/sse-starlette-3.3.4/uv.lock 2026-03-29 10:59:32.000000000 +0200
+++ new/sse-starlette-3.4.4/uv.lock 2026-05-12 19:36:32.000000000 +0200
@@ -72,15 +72,6 @@
]
[[package]]
-name = "async-timeout"
-version = "5.0.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz",
hash =
"sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size
= 9274, upload-time = "2024-11-06T16:41:39.6Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl",
hash =
"sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size
= 6233, upload-time = "2024-11-06T16:41:37.9Z" },
-]
-
-[[package]]
name = "attrs"
version = "25.4.0"
source = { registry = "https://pypi.org/simple" }
@@ -164,22 +155,6 @@
]
[[package]]
-name = "build"
-version = "1.4.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "colorama", marker = "os_name == 'nt'" },
- { name = "importlib-metadata", marker = "python_full_version < '3.10.2'" },
- { name = "packaging" },
- { name = "pyproject-hooks" },
- { name = "tomli", marker = "python_full_version < '3.11'" },
-]
-sdist = { url =
"https://files.pythonhosted.org/packages/42/18/94eaffda7b329535d91f00fe605ab1f1e5cd68b2074d03f255c7d250687d/build-1.4.0.tar.gz",
hash =
"sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936", size
= 50054, upload-time = "2026-01-08T16:41:47.696Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl",
hash =
"sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596", size
= 24141, upload-time = "2026-01-08T16:41:46.453Z" },
-]
-
-[[package]]
name = "cbor2"
version = "5.9.0"
source = { registry = "https://pypi.org/simple" }
@@ -548,62 +523,62 @@
[[package]]
name = "cryptography"
-version = "46.0.6"
+version = "46.0.7"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/a4/ba/04b1bd4218cbc58dc90ce967106d51582371b898690f3ae0402876cc4f34/cryptography-46.0.6.tar.gz",
hash =
"sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759", size
= 750542, upload-time = "2026-03-25T23:34:53.396Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz",
hash =
"sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size
= 750652, upload-time = "2026-04-08T01:57:54.692Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/47/23/9285e15e3bc57325b0a72e592921983a701efc1ee8f91c06c5f0235d86d9/cryptography-46.0.6-cp311-abi3-macosx_10_9_universal2.whl",
hash =
"sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8", size
= 7176401, upload-time = "2026-03-25T23:33:22.096Z" },
- { url =
"https://files.pythonhosted.org/packages/60/f8/e61f8f13950ab6195b31913b42d39f0f9afc7d93f76710f299b5ec286ae6/cryptography-46.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30", size
= 4275275, upload-time = "2026-03-25T23:33:23.844Z" },
- { url =
"https://files.pythonhosted.org/packages/19/69/732a736d12c2631e140be2348b4ad3d226302df63ef64d30dfdb8db7ad1c/cryptography-46.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a", size
= 4425320, upload-time = "2026-03-25T23:33:25.703Z" },
- { url =
"https://files.pythonhosted.org/packages/d4/12/123be7292674abf76b21ac1fc0e1af50661f0e5b8f0ec8285faac18eb99e/cryptography-46.0.6-cp311-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175", size
= 4278082, upload-time = "2026-03-25T23:33:27.423Z" },
- { url =
"https://files.pythonhosted.org/packages/5b/ba/d5e27f8d68c24951b0a484924a84c7cdaed7502bac9f18601cd357f8b1d2/cryptography-46.0.6-cp311-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463", size
= 4926514, upload-time = "2026-03-25T23:33:29.206Z" },
- { url =
"https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97", size
= 4457766, upload-time = "2026-03-25T23:33:30.834Z" },
- { url =
"https://files.pythonhosted.org/packages/01/59/562be1e653accee4fdad92c7a2e88fced26b3fdfce144047519bbebc299e/cryptography-46.0.6-cp311-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c", size
= 3986535, upload-time = "2026-03-25T23:33:33.02Z" },
- { url =
"https://files.pythonhosted.org/packages/d6/8b/b1ebfeb788bf4624d36e45ed2662b8bd43a05ff62157093c1539c1288a18/cryptography-46.0.6-cp311-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507", size
= 4277618, upload-time = "2026-03-25T23:33:34.567Z" },
- { url =
"https://files.pythonhosted.org/packages/dd/52/a005f8eabdb28df57c20f84c44d397a755782d6ff6d455f05baa2785bd91/cryptography-46.0.6-cp311-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19", size
= 4890802, upload-time = "2026-03-25T23:33:37.034Z" },
- { url =
"https://files.pythonhosted.org/packages/ec/4d/8e7d7245c79c617d08724e2efa397737715ca0ec830ecb3c91e547302555/cryptography-46.0.6-cp311-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738", size
= 4457425, upload-time = "2026-03-25T23:33:38.904Z" },
- { url =
"https://files.pythonhosted.org/packages/1d/5c/f6c3596a1430cec6f949085f0e1a970638d76f81c3ea56d93d564d04c340/cryptography-46.0.6-cp311-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c", size
= 4405530, upload-time = "2026-03-25T23:33:40.842Z" },
- { url =
"https://files.pythonhosted.org/packages/7e/c9/9f9cea13ee2dbde070424e0c4f621c091a91ffcc504ffea5e74f0e1daeff/cryptography-46.0.6-cp311-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f", size
= 4667896, upload-time = "2026-03-25T23:33:42.781Z" },
- { url =
"https://files.pythonhosted.org/packages/ad/b5/1895bc0821226f129bc74d00eccfc6a5969e2028f8617c09790bf89c185e/cryptography-46.0.6-cp311-abi3-win32.whl",
hash =
"sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2", size
= 3026348, upload-time = "2026-03-25T23:33:45.021Z" },
- { url =
"https://files.pythonhosted.org/packages/c3/f8/c9bcbf0d3e6ad288b9d9aa0b1dee04b063d19e8c4f871855a03ab3a297ab/cryptography-46.0.6-cp311-abi3-win_amd64.whl",
hash =
"sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124", size
= 3483896, upload-time = "2026-03-25T23:33:46.649Z" },
- { url =
"https://files.pythonhosted.org/packages/01/41/3a578f7fd5c70611c0aacba52cd13cb364a5dee895a5c1d467208a9380b0/cryptography-46.0.6-cp314-cp314t-macosx_10_9_universal2.whl",
hash =
"sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275", size
= 7117147, upload-time = "2026-03-25T23:33:48.249Z" },
- { url =
"https://files.pythonhosted.org/packages/fa/87/887f35a6fca9dde90cad08e0de0c89263a8e59b2d2ff904fd9fcd8025b6f/cryptography-46.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4", size
= 4266221, upload-time = "2026-03-25T23:33:49.874Z" },
- { url =
"https://files.pythonhosted.org/packages/aa/a8/0a90c4f0b0871e0e3d1ed126aed101328a8a57fd9fd17f00fb67e82a51ca/cryptography-46.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b", size
= 4408952, upload-time = "2026-03-25T23:33:52.128Z" },
- { url =
"https://files.pythonhosted.org/packages/16/0b/b239701eb946523e4e9f329336e4ff32b1247e109cbab32d1a7b61da8ed7/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_aarch64.whl",
hash =
"sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707", size
= 4270141, upload-time = "2026-03-25T23:33:54.11Z" },
- { url =
"https://files.pythonhosted.org/packages/0f/a8/976acdd4f0f30df7b25605f4b9d3d89295351665c2091d18224f7ad5cdbf/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_ppc64le.whl",
hash =
"sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361", size
= 4904178, upload-time = "2026-03-25T23:33:55.725Z" },
- { url =
"https://files.pythonhosted.org/packages/b1/1b/bf0e01a88efd0e59679b69f42d4afd5bced8700bb5e80617b2d63a3741af/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_x86_64.whl",
hash =
"sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b", size
= 4441812, upload-time = "2026-03-25T23:33:57.364Z" },
- { url =
"https://files.pythonhosted.org/packages/bb/8b/11df86de2ea389c65aa1806f331cae145f2ed18011f30234cc10ca253de8/cryptography-46.0.6-cp314-cp314t-manylinux_2_31_armv7l.whl",
hash =
"sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca", size
= 3963923, upload-time = "2026-03-25T23:33:59.361Z" },
- { url =
"https://files.pythonhosted.org/packages/91/e0/207fb177c3a9ef6a8108f234208c3e9e76a6aa8cf20d51932916bd43bda0/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_aarch64.whl",
hash =
"sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013", size
= 4269695, upload-time = "2026-03-25T23:34:00.909Z" },
- { url =
"https://files.pythonhosted.org/packages/21/5e/19f3260ed1e95bced52ace7501fabcd266df67077eeb382b79c81729d2d3/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_ppc64le.whl",
hash =
"sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4", size
= 4869785, upload-time = "2026-03-25T23:34:02.796Z" },
- { url =
"https://files.pythonhosted.org/packages/10/38/cd7864d79aa1d92ef6f1a584281433419b955ad5a5ba8d1eb6c872165bcb/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_x86_64.whl",
hash =
"sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a", size
= 4441404, upload-time = "2026-03-25T23:34:04.35Z" },
- { url =
"https://files.pythonhosted.org/packages/09/0a/4fe7a8d25fed74419f91835cf5829ade6408fd1963c9eae9c4bce390ecbb/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl",
hash =
"sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d", size
= 4397549, upload-time = "2026-03-25T23:34:06.342Z" },
- { url =
"https://files.pythonhosted.org/packages/5f/a0/7d738944eac6513cd60a8da98b65951f4a3b279b93479a7e8926d9cd730b/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl",
hash =
"sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736", size
= 4651874, upload-time = "2026-03-25T23:34:07.916Z" },
- { url =
"https://files.pythonhosted.org/packages/cb/f1/c2326781ca05208845efca38bf714f76939ae446cd492d7613808badedf1/cryptography-46.0.6-cp314-cp314t-win32.whl",
hash =
"sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed", size
= 3001511, upload-time = "2026-03-25T23:34:09.892Z" },
- { url =
"https://files.pythonhosted.org/packages/c9/57/fe4a23eb549ac9d903bd4698ffda13383808ef0876cc912bcb2838799ece/cryptography-46.0.6-cp314-cp314t-win_amd64.whl",
hash =
"sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4", size
= 3471692, upload-time = "2026-03-25T23:34:11.613Z" },
- { url =
"https://files.pythonhosted.org/packages/c4/cc/f330e982852403da79008552de9906804568ae9230da8432f7496ce02b71/cryptography-46.0.6-cp38-abi3-macosx_10_9_universal2.whl",
hash =
"sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a", size
= 7162776, upload-time = "2026-03-25T23:34:13.308Z" },
- { url =
"https://files.pythonhosted.org/packages/49/b3/dc27efd8dcc4bff583b3f01d4a3943cd8b5821777a58b3a6a5f054d61b79/cryptography-46.0.6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8", size
= 4270529, upload-time = "2026-03-25T23:34:15.019Z" },
- { url =
"https://files.pythonhosted.org/packages/e6/05/e8d0e6eb4f0d83365b3cb0e00eb3c484f7348db0266652ccd84632a3d58d/cryptography-46.0.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77", size
= 4414827, upload-time = "2026-03-25T23:34:16.604Z" },
- { url =
"https://files.pythonhosted.org/packages/2f/97/daba0f5d2dc6d855e2dcb70733c812558a7977a55dd4a6722756628c44d1/cryptography-46.0.6-cp38-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290", size
= 4271265, upload-time = "2026-03-25T23:34:18.586Z" },
- { url =
"https://files.pythonhosted.org/packages/89/06/fe1fce39a37ac452e58d04b43b0855261dac320a2ebf8f5260dd55b201a9/cryptography-46.0.6-cp38-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410", size
= 4916800, upload-time = "2026-03-25T23:34:20.561Z" },
- { url =
"https://files.pythonhosted.org/packages/ff/8a/b14f3101fe9c3592603339eb5d94046c3ce5f7fc76d6512a2d40efd9724e/cryptography-46.0.6-cp38-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d", size
= 4448771, upload-time = "2026-03-25T23:34:22.406Z" },
- { url =
"https://files.pythonhosted.org/packages/01/b3/0796998056a66d1973fd52ee89dc1bb3b6581960a91ad4ac705f182d398f/cryptography-46.0.6-cp38-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70", size
= 3978333, upload-time = "2026-03-25T23:34:24.281Z" },
- { url =
"https://files.pythonhosted.org/packages/c5/3d/db200af5a4ffd08918cd55c08399dc6c9c50b0bc72c00a3246e099d3a849/cryptography-46.0.6-cp38-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d", size
= 4271069, upload-time = "2026-03-25T23:34:25.895Z" },
- { url =
"https://files.pythonhosted.org/packages/d7/18/61acfd5b414309d74ee838be321c636fe71815436f53c9f0334bf19064fa/cryptography-46.0.6-cp38-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa", size
= 4878358, upload-time = "2026-03-25T23:34:27.67Z" },
- { url =
"https://files.pythonhosted.org/packages/8b/65/5bf43286d566f8171917cae23ac6add941654ccf085d739195a4eacf1674/cryptography-46.0.6-cp38-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58", size
= 4448061, upload-time = "2026-03-25T23:34:29.375Z" },
- { url =
"https://files.pythonhosted.org/packages/e0/25/7e49c0fa7205cf3597e525d156a6bce5b5c9de1fd7e8cb01120e459f205a/cryptography-46.0.6-cp38-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb", size
= 4399103, upload-time = "2026-03-25T23:34:32.036Z" },
- { url =
"https://files.pythonhosted.org/packages/44/46/466269e833f1c4718d6cd496ffe20c56c9c8d013486ff66b4f69c302a68d/cryptography-46.0.6-cp38-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72", size
= 4659255, upload-time = "2026-03-25T23:34:33.679Z" },
- { url =
"https://files.pythonhosted.org/packages/0a/09/ddc5f630cc32287d2c953fc5d32705e63ec73e37308e5120955316f53827/cryptography-46.0.6-cp38-abi3-win32.whl",
hash =
"sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c", size
= 3010660, upload-time = "2026-03-25T23:34:35.418Z" },
- { url =
"https://files.pythonhosted.org/packages/1b/82/ca4893968aeb2709aacfb57a30dec6fa2ab25b10fa9f064b8882ce33f599/cryptography-46.0.6-cp38-abi3-win_amd64.whl",
hash =
"sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f", size
= 3471160, upload-time = "2026-03-25T23:34:37.191Z" },
- { url =
"https://files.pythonhosted.org/packages/2e/84/7ccff00ced5bac74b775ce0beb7d1be4e8637536b522b5df9b73ada42da2/cryptography-46.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl",
hash =
"sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead", size
= 3475444, upload-time = "2026-03-25T23:34:38.944Z" },
- { url =
"https://files.pythonhosted.org/packages/bc/1f/4c926f50df7749f000f20eede0c896769509895e2648db5da0ed55db711d/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl",
hash =
"sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8", size
= 4218227, upload-time = "2026-03-25T23:34:40.871Z" },
- { url =
"https://files.pythonhosted.org/packages/c6/65/707be3ffbd5f786028665c3223e86e11c4cda86023adbc56bd72b1b6bab5/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl",
hash =
"sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0", size
= 4381399, upload-time = "2026-03-25T23:34:42.609Z" },
- { url =
"https://files.pythonhosted.org/packages/f3/6d/73557ed0ef7d73d04d9aba745d2c8e95218213687ee5e76b7d236a5030fc/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl",
hash =
"sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b", size
= 4217595, upload-time = "2026-03-25T23:34:44.205Z" },
- { url =
"https://files.pythonhosted.org/packages/9e/c5/e1594c4eec66a567c3ac4400008108a415808be2ce13dcb9a9045c92f1a0/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl",
hash =
"sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a", size
= 4380912, upload-time = "2026-03-25T23:34:46.328Z" },
- { url =
"https://files.pythonhosted.org/packages/1a/89/843b53614b47f97fe1abc13f9a86efa5ec9e275292c457af1d4a60dc80e0/cryptography-46.0.6-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e", size
= 3409955, upload-time = "2026-03-25T23:34:48.465Z" },
+ { url =
"https://files.pythonhosted.org/packages/0b/5d/4a8f770695d73be252331e60e526291e3df0c9b27556a90a6b47bccca4c2/cryptography-46.0.7-cp311-abi3-macosx_10_9_universal2.whl",
hash =
"sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4", size
= 7179869, upload-time = "2026-04-08T01:56:17.157Z" },
+ { url =
"https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size
= 4275492, upload-time = "2026-04-08T01:56:19.36Z" },
+ { url =
"https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size
= 4426670, upload-time = "2026-04-08T01:56:21.415Z" },
+ { url =
"https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size
= 4280275, upload-time = "2026-04-08T01:56:23.539Z" },
+ { url =
"https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size
= 4928402, upload-time = "2026-04-08T01:56:25.624Z" },
+ { url =
"https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size
= 4459985, upload-time = "2026-04-08T01:56:27.309Z" },
+ { url =
"https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size
= 3990652, upload-time = "2026-04-08T01:56:29.095Z" },
+ { url =
"https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size
= 4279805, upload-time = "2026-04-08T01:56:30.928Z" },
+ { url =
"https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size
= 4892883, upload-time = "2026-04-08T01:56:32.614Z" },
+ { url =
"https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size
= 4459756, upload-time = "2026-04-08T01:56:34.306Z" },
+ { url =
"https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size
= 4410244, upload-time = "2026-04-08T01:56:35.977Z" },
+ { url =
"https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size
= 4674868, upload-time = "2026-04-08T01:56:38.034Z" },
+ { url =
"https://files.pythonhosted.org/packages/1a/bb/a5c213c19ee94b15dfccc48f363738633a493812687f5567addbcbba9f6f/cryptography-46.0.7-cp311-abi3-win32.whl",
hash =
"sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457", size
= 3026504, upload-time = "2026-04-08T01:56:39.666Z" },
+ { url =
"https://files.pythonhosted.org/packages/2b/02/7788f9fefa1d060ca68717c3901ae7fffa21ee087a90b7f23c7a603c32ae/cryptography-46.0.7-cp311-abi3-win_amd64.whl",
hash =
"sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b", size
= 3488363, upload-time = "2026-04-08T01:56:41.893Z" },
+ { url =
"https://files.pythonhosted.org/packages/7b/56/15619b210e689c5403bb0540e4cb7dbf11a6bf42e483b7644e471a2812b3/cryptography-46.0.7-cp314-cp314t-macosx_10_9_universal2.whl",
hash =
"sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842", size
= 7119671, upload-time = "2026-04-08T01:56:44Z" },
+ { url =
"https://files.pythonhosted.org/packages/74/66/e3ce040721b0b5599e175ba91ab08884c75928fbeb74597dd10ef13505d2/cryptography-46.0.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c", size
= 4268551, upload-time = "2026-04-08T01:56:46.071Z" },
+ { url =
"https://files.pythonhosted.org/packages/03/11/5e395f961d6868269835dee1bafec6a1ac176505a167f68b7d8818431068/cryptography-46.0.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902", size
= 4408887, upload-time = "2026-04-08T01:56:47.718Z" },
+ { url =
"https://files.pythonhosted.org/packages/40/53/8ed1cf4c3b9c8e611e7122fb56f1c32d09e1fff0f1d77e78d9ff7c82653e/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_aarch64.whl",
hash =
"sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d", size
= 4271354, upload-time = "2026-04-08T01:56:49.312Z" },
+ { url =
"https://files.pythonhosted.org/packages/50/46/cf71e26025c2e767c5609162c866a78e8a2915bbcfa408b7ca495c6140c4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_ppc64le.whl",
hash =
"sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022", size
= 4905845, upload-time = "2026-04-08T01:56:50.916Z" },
+ { url =
"https://files.pythonhosted.org/packages/c0/ea/01276740375bac6249d0a971ebdf6b4dc9ead0ee0a34ef3b5a88c1a9b0d4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_x86_64.whl",
hash =
"sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce", size
= 4444641, upload-time = "2026-04-08T01:56:52.882Z" },
+ { url =
"https://files.pythonhosted.org/packages/3d/4c/7d258f169ae71230f25d9f3d06caabcff8c3baf0978e2b7d65e0acac3827/cryptography-46.0.7-cp314-cp314t-manylinux_2_31_armv7l.whl",
hash =
"sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f", size
= 3967749, upload-time = "2026-04-08T01:56:54.597Z" },
+ { url =
"https://files.pythonhosted.org/packages/b5/2a/2ea0767cad19e71b3530e4cad9605d0b5e338b6a1e72c37c9c1ceb86c333/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_aarch64.whl",
hash =
"sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99", size
= 4270942, upload-time = "2026-04-08T01:56:56.416Z" },
+ { url =
"https://files.pythonhosted.org/packages/41/3d/fe14df95a83319af25717677e956567a105bb6ab25641acaa093db79975d/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_ppc64le.whl",
hash =
"sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1", size
= 4871079, upload-time = "2026-04-08T01:56:58.31Z" },
+ { url =
"https://files.pythonhosted.org/packages/9c/59/4a479e0f36f8f378d397f4eab4c850b4ffb79a2f0d58704b8fa0703ddc11/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_x86_64.whl",
hash =
"sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2", size
= 4443999, upload-time = "2026-04-08T01:57:00.508Z" },
+ { url =
"https://files.pythonhosted.org/packages/28/17/b59a741645822ec6d04732b43c5d35e4ef58be7bfa84a81e5ae6f05a1d33/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_aarch64.whl",
hash =
"sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e", size
= 4399191, upload-time = "2026-04-08T01:57:02.654Z" },
+ { url =
"https://files.pythonhosted.org/packages/59/6a/bb2e166d6d0e0955f1e9ff70f10ec4b2824c9cfcdb4da772c7dd69cc7d80/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_x86_64.whl",
hash =
"sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee", size
= 4655782, upload-time = "2026-04-08T01:57:04.592Z" },
+ { url =
"https://files.pythonhosted.org/packages/95/b6/3da51d48415bcb63b00dc17c2eff3a651b7c4fed484308d0f19b30e8cb2c/cryptography-46.0.7-cp314-cp314t-win32.whl",
hash =
"sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298", size
= 3002227, upload-time = "2026-04-08T01:57:06.91Z" },
+ { url =
"https://files.pythonhosted.org/packages/32/a8/9f0e4ed57ec9cebe506e58db11ae472972ecb0c659e4d52bbaee80ca340a/cryptography-46.0.7-cp314-cp314t-win_amd64.whl",
hash =
"sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb", size
= 3475332, upload-time = "2026-04-08T01:57:08.807Z" },
+ { url =
"https://files.pythonhosted.org/packages/a7/7f/cd42fc3614386bc0c12f0cb3c4ae1fc2bbca5c9662dfed031514911d513d/cryptography-46.0.7-cp38-abi3-macosx_10_9_universal2.whl",
hash =
"sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4", size
= 7165618, upload-time = "2026-04-08T01:57:10.645Z" },
+ { url =
"https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size
= 4270628, upload-time = "2026-04-08T01:57:12.885Z" },
+ { url =
"https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size
= 4415405, upload-time = "2026-04-08T01:57:14.923Z" },
+ { url =
"https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size
= 4272715, upload-time = "2026-04-08T01:57:16.638Z" },
+ { url =
"https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size
= 4918400, upload-time = "2026-04-08T01:57:19.021Z" },
+ { url =
"https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size
= 4450634, upload-time = "2026-04-08T01:57:21.185Z" },
+ { url =
"https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size
= 3985233, upload-time = "2026-04-08T01:57:22.862Z" },
+ { url =
"https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size
= 4271955, upload-time = "2026-04-08T01:57:24.814Z" },
+ { url =
"https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size
= 4879888, upload-time = "2026-04-08T01:57:26.88Z" },
+ { url =
"https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size
= 4449961, upload-time = "2026-04-08T01:57:29.068Z" },
+ { url =
"https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size
= 4401696, upload-time = "2026-04-08T01:57:31.029Z" },
+ { url =
"https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size
= 4664256, upload-time = "2026-04-08T01:57:33.144Z" },
+ { url =
"https://files.pythonhosted.org/packages/4b/fa/f0ab06238e899cc3fb332623f337a7364f36f4bb3f2534c2bb95a35b132c/cryptography-46.0.7-cp38-abi3-win32.whl",
hash =
"sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246", size
= 3013001, upload-time = "2026-04-08T01:57:34.933Z" },
+ { url =
"https://files.pythonhosted.org/packages/d2/f1/00ce3bde3ca542d1acd8f8cfa38e446840945aa6363f9b74746394b14127/cryptography-46.0.7-cp38-abi3-win_amd64.whl",
hash =
"sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3", size
= 3472985, upload-time = "2026-04-08T01:57:36.714Z" },
+ { url =
"https://files.pythonhosted.org/packages/63/0c/dca8abb64e7ca4f6b2978769f6fea5ad06686a190cec381f0a796fdcaaba/cryptography-46.0.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl",
hash =
"sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f", size
= 3476879, upload-time = "2026-04-08T01:57:38.664Z" },
+ { url =
"https://files.pythonhosted.org/packages/3a/ea/075aac6a84b7c271578d81a2f9968acb6e273002408729f2ddff517fed4a/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl",
hash =
"sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15", size
= 4219700, upload-time = "2026-04-08T01:57:40.625Z" },
+ { url =
"https://files.pythonhosted.org/packages/6c/7b/1c55db7242b5e5612b29fc7a630e91ee7a6e3c8e7bf5406d22e206875fbd/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl",
hash =
"sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455", size
= 4385982, upload-time = "2026-04-08T01:57:42.725Z" },
+ { url =
"https://files.pythonhosted.org/packages/cb/da/9870eec4b69c63ef5925bf7d8342b7e13bc2ee3d47791461c4e49ca212f4/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl",
hash =
"sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65", size
= 4219115, upload-time = "2026-04-08T01:57:44.939Z" },
+ { url =
"https://files.pythonhosted.org/packages/f4/72/05aa5832b82dd341969e9a734d1812a6aadb088d9eb6f0430fc337cc5a8f/cryptography-46.0.7-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl",
hash =
"sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968", size
= 4385479, upload-time = "2026-04-08T01:57:46.86Z" },
+ { url =
"https://files.pythonhosted.org/packages/20/2a/1b016902351a523aa2bd446b50a5bc1175d7a7d1cf90fe2ef904f9b84ebc/cryptography-46.0.7-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4", size
= 3412829, upload-time = "2026-04-08T01:57:48.874Z" },
]
[[package]]
@@ -682,91 +657,91 @@
[[package]]
name = "granian"
-version = "2.6.0"
+version = "2.7.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/ea/1e/0a33c4b68b054b9d5f7963371dd06978da5f4f58f58ddcb77854018abfdb/granian-2.6.0.tar.gz",
hash =
"sha256:d9b773633e411c7bf51590704e608e757dab09cd452fb18971a50a7d7c439677", size
= 115955, upload-time = "2025-11-16T16:07:27.082Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/db/0c/27aa25280b6c1f323312e83088304da8a7f3e5c1e568d3a560365ec6fa67/granian-2.7.4.tar.gz",
hash =
"sha256:1dc0530d7ae6b0ae43aafafe771ac0b8c38af68bbd71ab355828817faf13aac1", size
= 128212, upload-time = "2026-04-23T11:55:55.275Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/76/71/e543f91d1a01515ff7211a19e18ee7dcf843dc25655d6cc18039901e2fb1/granian-2.6.0-cp310-cp310-macosx_10_12_x86_64.whl",
hash =
"sha256:759e8be4481c5aede0080e3c20a9e1bc7c00258cd4810f88ebcfb6bdac298f03", size
= 3078973, upload-time = "2025-11-16T16:05:30.886Z" },
- { url =
"https://files.pythonhosted.org/packages/ce/ae/ef87e76e5ade5633c11e892b663b922f8fda5ef804576373516a445d244f/granian-2.6.0-cp310-cp310-macosx_11_0_arm64.whl",
hash =
"sha256:6af5d9a088536798ee3188f1cbcffc5690ed38a53851825e4125c3bf3c9cfef3", size
= 2810530, upload-time = "2025-11-16T16:05:32.703Z" },
- { url =
"https://files.pythonhosted.org/packages/cf/9c/16a3ee4dad81e0dd446f391dad9ced17e7e685d97cce28188adb2e846004/granian-2.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:50c1cad7b2b0fb7c66169a12ab069e2f76f4d2a7390638e5b327504372976518", size
= 3331648, upload-time = "2025-11-16T16:05:34.15Z" },
- { url =
"https://files.pythonhosted.org/packages/8b/27/c9325343522ed89ac6f885995178c95f90052a5894fc681ec84df24a3ba6/granian-2.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:a811d0b80099fe1da945e6d137d64dfe8e1dd07d3bf20e2e1eeae6f2c83adbb9", size
= 3151584, upload-time = "2025-11-16T16:05:35.584Z" },
- { url =
"https://files.pythonhosted.org/packages/4f/73/376f08e3de394e50888bd9f8fa27be5dd60e1fd6cbbec3683f780ddaf5fc/granian-2.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:61c7b04e5520ec3d749e53da414ba0ccc7773d7b24e8049539d47a4171aa922a", size
= 3375838, upload-time = "2025-11-16T16:05:37.425Z" },
- { url =
"https://files.pythonhosted.org/packages/5b/9c/f2e32c826fc7fe0c65a6cf0ff0b4c459f71adc78f2721083ff50fa60c29a/granian-2.6.0-cp310-cp310-manylinux_2_28_aarch64.whl",
hash =
"sha256:d1bbe669228ba475adfdbebbae962f958be3002c742370000b7f5d06f895cacb", size
= 3234478, upload-time = "2025-11-16T16:05:38.664Z" },
- { url =
"https://files.pythonhosted.org/packages/dc/09/70bb969fcd4b35a357c93490efc7cf97185b521c90fcf21c2483de49cce8/granian-2.6.0-cp310-cp310-musllinux_1_1_aarch64.whl",
hash =
"sha256:bdef48aab0846fd5c215acd1779328d067708859bbf44c4e9363daa51b8c98bd", size
= 3300577, upload-time = "2025-11-16T16:05:39.792Z" },
- { url =
"https://files.pythonhosted.org/packages/c7/94/1722f6bf1a64475e390595c0b7a1b0dff40a4279fc215cb3695be7fd5168/granian-2.6.0-cp310-cp310-musllinux_1_1_armv7l.whl",
hash =
"sha256:8459a8b2335689ecb04b2ccba63cbcdf030c242a64ae77be68fb6e263984a150", size
= 3475443, upload-time = "2025-11-16T16:05:41.374Z" },
- { url =
"https://files.pythonhosted.org/packages/64/92/8a353cdb800b0c390b3c6d3bc0ab5a815221319bec65419a86a959e64acd/granian-2.6.0-cp310-cp310-musllinux_1_1_x86_64.whl",
hash =
"sha256:dcde0783cb546304f0e20a1f99feb1a8795adfb0540c9278e5f9ef583edffb36", size
= 3467863, upload-time = "2025-11-16T16:05:42.82Z" },
- { url =
"https://files.pythonhosted.org/packages/1c/3f/87a42611f2c6aa4d74746036b8d18b5cd57a23ef7043501cc24b0dd250b1/granian-2.6.0-cp310-cp310-win_amd64.whl",
hash =
"sha256:908a2dc5d2af1f275300827e5f8ec499206be995d777a86f850e7cc6fa722002", size
= 2343382, upload-time = "2025-11-16T16:05:44.087Z" },
- { url =
"https://files.pythonhosted.org/packages/3c/56/efb12bda35ce3d6ac89ec8a5b02036d17dfaec6bb2cab16f142dc9ee389f/granian-2.6.0-cp311-cp311-macosx_10_12_x86_64.whl",
hash =
"sha256:38029b6c25ac5a9f8a6975b65846eee23d9fa7b91089a3ff6d11770d089020f3", size
= 3078748, upload-time = "2025-11-16T16:05:45.593Z" },
- { url =
"https://files.pythonhosted.org/packages/5e/84/6d640c3439d532792a7668d66089df53d74ffb06455075b9db2a25fbb02d/granian-2.6.0-cp311-cp311-macosx_11_0_arm64.whl",
hash =
"sha256:efd9c92bc5d245f10d6924847c25d7f20046c976a4817a87fd8476c22c222b16", size
= 2810326, upload-time = "2025-11-16T16:05:47.085Z" },
- { url =
"https://files.pythonhosted.org/packages/92/60/909057f8f21e2d6f196f8c9380a755d5453a493cd071afa7f04c9de83725/granian-2.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:43e6a25d995206ba0a2fef65fea2789f36dde1006932ea2dcd9a096937c1afdd", size
= 3331727, upload-time = "2025-11-16T16:05:48.245Z" },
- { url =
"https://files.pythonhosted.org/packages/64/07/27701a5b9aa27873ce92730e80e5c0ad3e7fe80674ba1660996c1463c53a/granian-2.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:5d7ac1be5c65fef4e04fb9860ca7c985b9c305f8468d03c8527f006c23100c83", size
= 3151437, upload-time = "2025-11-16T16:05:49.413Z" },
- { url =
"https://files.pythonhosted.org/packages/b6/1b/dfc6782dad69b02ab6d50a320b54b2e28c573954e0697a3f24a68f7aa3c9/granian-2.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:318a7db03e771e2611a976a8c4ecc7ae39e43e2ebffd20a4c2371a71cdc5659c", size
= 3375815, upload-time = "2025-11-16T16:05:50.497Z" },
- { url =
"https://files.pythonhosted.org/packages/ad/ab/de57fcf406a9da5b28f83af71bd7b8e2fc944b786f95b01188b4f8c1c049/granian-2.6.0-cp311-cp311-manylinux_2_28_aarch64.whl",
hash =
"sha256:cdb1ab7a0cedfa834c6e8e7c9e2530d80d6fd6f04076c2f6998629688f8ecb00", size
= 3234158, upload-time = "2025-11-16T16:05:51.664Z" },
- { url =
"https://files.pythonhosted.org/packages/a7/d0/a2d3a14bfce05f62f3ec10cb1c1609fcfe983e6ae929b1656bff8784812c/granian-2.6.0-cp311-cp311-musllinux_1_1_aarch64.whl",
hash =
"sha256:fd11a9275ad01c2d99a322c1d0c8af0ad162c541515ad1d55ef585fd321cd2b9", size
= 3300040, upload-time = "2025-11-16T16:05:53.233Z" },
- { url =
"https://files.pythonhosted.org/packages/db/e3/d9b58bacf40da8f937a8a04f2fbc61424f551d0589f3bd6eb0755b57c3be/granian-2.6.0-cp311-cp311-musllinux_1_1_armv7l.whl",
hash =
"sha256:489b1e24b4360ecdaf08d404e13549d4377e77756d1911454abed9e0b559345a", size
= 3475356, upload-time = "2025-11-16T16:05:54.459Z" },
- { url =
"https://files.pythonhosted.org/packages/df/50/b45f53dea5ec3d9a94f720f4a0b3a7c2043a298151b52ac389db14025b61/granian-2.6.0-cp311-cp311-musllinux_1_1_x86_64.whl",
hash =
"sha256:17ba9fb67931852cf9d8eee23d1adb78c0e3106bd4ad440cf3b37ce124b4380c", size
= 3467883, upload-time = "2025-11-16T16:05:56.017Z" },
- { url =
"https://files.pythonhosted.org/packages/94/6d/1e8aebf735308ae424bebec7497300a559eebfe53a4db0430ee3409a3642/granian-2.6.0-cp311-cp311-win_amd64.whl",
hash =
"sha256:93c2734364081e34a87b6f494e8057b5f25ba6baed4b609dbca33b3471d843ec", size
= 2343370, upload-time = "2025-11-16T16:05:57.152Z" },
- { url =
"https://files.pythonhosted.org/packages/ef/db/c7d10c2b61dd40014346af3274500b72654710cdfe400f37358c63481f28/granian-2.6.0-cp312-cp312-macosx_10_12_x86_64.whl",
hash =
"sha256:b05b4fc5ce5855eb64a02b6e2c70b0d7e24632ee0d1193badfc0dace56688c11", size
= 3076177, upload-time = "2025-11-16T16:05:58.824Z" },
- { url =
"https://files.pythonhosted.org/packages/9c/54/095eb0cea6976f3aeaab434f9009521b4d50aa37f9efda54a70da5b465ec/granian-2.6.0-cp312-cp312-macosx_11_0_arm64.whl",
hash =
"sha256:b6aad6e7ded7a0a916119cd3ee28aa989e619074a6ca1ba3dc19cf5ad608832c", size
= 2801793, upload-time = "2025-11-16T16:06:00.396Z" },
- { url =
"https://files.pythonhosted.org/packages/6d/f5/4177070ec6942b0467c0da59b53cf83ac5b939cfcdf687daeaebaef31299/granian-2.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:8e77509ad3a5654da1268db9d78d49357bf91ac2d3dcb1c58a00cda162d922a7", size
= 3325958, upload-time = "2025-11-16T16:06:01.906Z" },
- { url =
"https://files.pythonhosted.org/packages/ad/5a/973e77414882df01ef75801d4c7e51bc2796475c0e7d72356d4a8f7701a5/granian-2.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:e3a7cc82cdc5d0c7371d805f00866f51ece71bb0cb2e1f192b84834cf1a6844b", size
= 3146873, upload-time = "2025-11-16T16:06:03.183Z" },
- { url =
"https://files.pythonhosted.org/packages/d6/97/410127ee96129c8f0746935b7be6703ad6f31232e0c33edec30496596d26/granian-2.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:2dbbce087a055eb64896b809a9a1f88161751815b112de4aa02ee4348f49cb73", size
= 3387122, upload-time = "2025-11-16T16:06:05.194Z" },
- { url =
"https://files.pythonhosted.org/packages/cf/37/36e74876d324fe6326af32a01607afc3f0f0fcb9e674092755da4146c40c/granian-2.6.0-cp312-cp312-manylinux_2_28_aarch64.whl",
hash =
"sha256:a7fa2728d32dfaf3b1b2bf5b0b7c6d23bb75eaf62bd08b71b61797d292381970", size
= 3234994, upload-time = "2025-11-16T16:06:06.978Z" },
- { url =
"https://files.pythonhosted.org/packages/bc/6e/5da9af1fdf7eeff9c7568f35171a0cdd63d73ab87a3deea560393b746d71/granian-2.6.0-cp312-cp312-musllinux_1_1_aarch64.whl",
hash =
"sha256:70b3867c33e5c95d6eb722a5c8b847c36c670fc189821bf7aef9934e943c2574", size
= 3303337, upload-time = "2025-11-16T16:06:08.263Z" },
- { url =
"https://files.pythonhosted.org/packages/e2/ab/d133ed75e9940abc9bed56cb096709b8c4a1dfe6221e61d43bd23939afad/granian-2.6.0-cp312-cp312-musllinux_1_1_armv7l.whl",
hash =
"sha256:7fb0448a292f2dda9c4130e394ac09ef1164713d873882fd3106ca6949ff0897", size
= 3472100, upload-time = "2025-11-16T16:06:09.494Z" },
- { url =
"https://files.pythonhosted.org/packages/0d/25/064406ade99fa7153e1a2b129f69af56cc1e50176a2fbec25911d9a121a9/granian-2.6.0-cp312-cp312-musllinux_1_1_x86_64.whl",
hash =
"sha256:a5bd3c59fe3a7acb22e434749ff2258606a93bc5848fa96332a6ed4c752f4dc8", size
= 3480023, upload-time = "2025-11-16T16:06:10.718Z" },
- { url =
"https://files.pythonhosted.org/packages/05/ff/da5b8e81ca728f081a3c29d302bb9e3b9c601c511a8f894ecd03da9f7cc6/granian-2.6.0-cp312-cp312-win_amd64.whl",
hash =
"sha256:95ddf79727d7cda8e005c8bc1e09d57d907662eacfd918d774b7ffb3290dc6b9", size
= 2346557, upload-time = "2025-11-16T16:06:11.907Z" },
- { url =
"https://files.pythonhosted.org/packages/4b/b0/a7be659186bf9de644a5214c31ce337342170de71c5cb1e3ea61e1feeebe/granian-2.6.0-cp313-cp313-macosx_10_12_x86_64.whl",
hash =
"sha256:74f579e7295945119394dc05dd1565be1ac700f6f26c8271d8327dfabc95ec34", size
= 3075590, upload-time = "2025-11-16T16:06:13.662Z" },
- { url =
"https://files.pythonhosted.org/packages/5a/d8/eb55f3657d7c104f96f2d20bd459908842a954f4d95c5769c46bf485d656/granian-2.6.0-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:f4e0e925d016e3dc43ae5950021c9ea0e9ee2ef1334a76ba7fbb80cc9e17c044", size
= 2801601, upload-time = "2025-11-16T16:06:14.908Z" },
- { url =
"https://files.pythonhosted.org/packages/2a/a3/45c79b3b2388a066e05ae3af171cde13540467efb0ec6404a52c12fcc449/granian-2.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:6b568459abe4813e4968310312e26add3dab80c3ce5044b537ebfe464601fe9a", size
= 3325246, upload-time = "2025-11-16T16:06:16.9Z" },
- { url =
"https://files.pythonhosted.org/packages/2f/2c/570df011d8c53a59d945db1b8b6adedf04f43d92bfd72f4149ee60c3aeaf/granian-2.6.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:0041ba59e4b89818db1772ea677bb619f5e3030060dcb6c57e8a17d72dc6210b", size
= 3146313, upload-time = "2025-11-16T16:06:18.339Z" },
- { url =
"https://files.pythonhosted.org/packages/a9/cd/8e9b183db4190fac1401eeab62669ebe35d962ba9b490c6deca421e3daa4/granian-2.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:7c032dca04171e4fbd54e587fe03aeef1825739d02ff3e3c49d578a8b5cc752c", size
= 3386170, upload-time = "2025-11-16T16:06:19.946Z" },
- { url =
"https://files.pythonhosted.org/packages/df/c5/9ccc0d04c1cefdb4bb42f671a0c27df4f68ba872a61edc7fc3bae6077ea9/granian-2.6.0-cp313-cp313-manylinux_2_28_aarch64.whl",
hash =
"sha256:d5686da7358fede8e9a1e1344310c6e3cb2c4d02a1aca52c31c990fe6b7d6281", size
= 3235277, upload-time = "2025-11-16T16:06:21.754Z" },
- { url =
"https://files.pythonhosted.org/packages/96/7d/a082bec08c1d54ce73dd237d6da0f35633cd5f2bfd1aec2f0a2590e6782a/granian-2.6.0-cp313-cp313-musllinux_1_1_aarch64.whl",
hash =
"sha256:62c69bb23efe26a33ac39e4b6ca0237d84ed6d3bf47a5bb817e00a46c27369f2", size
= 3302908, upload-time = "2025-11-16T16:06:22.988Z" },
- { url =
"https://files.pythonhosted.org/packages/b1/2e/c8a53c92f0e98c4b36a24c03a4243b53410804f78f1876ca3ea497831381/granian-2.6.0-cp313-cp313-musllinux_1_1_armv7l.whl",
hash =
"sha256:2ee5087e4b876f29dd1a11e9c2dd8d864ecb207278767a33bba60975260f225d", size
= 3470938, upload-time = "2025-11-16T16:06:24.666Z" },
- { url =
"https://files.pythonhosted.org/packages/7a/c7/0615d97cc666c6b5c1af24abbb08c6fd536a5f3c055fd09a3cd6b178283e/granian-2.6.0-cp313-cp313-musllinux_1_1_x86_64.whl",
hash =
"sha256:3627b69f391a769acfad4ae26bbfce03b50c31eb5fbea18ec0a44f37c89cf0fd", size
= 3479291, upload-time = "2025-11-16T16:06:25.984Z" },
- { url =
"https://files.pythonhosted.org/packages/68/cc/a590cbe311fdccd7ddd02086735ed6ceb10c0e00cdf499aafde03fd47128/granian-2.6.0-cp313-cp313-win_amd64.whl",
hash =
"sha256:5a2e3bf928c47b02b31c4f2aa12aa99ef3e9fc9c969fd2e26284fa2f1f91eb86", size
= 2346221, upload-time = "2025-11-16T16:06:27.252Z" },
- { url =
"https://files.pythonhosted.org/packages/08/2c/8256710307e32cc4aff58d730f3db9e87471121725adc92d700fa0190136/granian-2.6.0-cp313-cp313t-macosx_10_12_x86_64.whl",
hash =
"sha256:c66877f2b2a1ad6046a228ee228ed4faa43dd4949fbe07f61d5c38ad57506e02", size
= 3027712, upload-time = "2025-11-16T16:06:28.819Z" },
- { url =
"https://files.pythonhosted.org/packages/63/88/bb3dc2a67f146d03ffd1b3d912c92795ecf52aa2b7ea1375735c522a5e6c/granian-2.6.0-cp313-cp313t-macosx_11_0_arm64.whl",
hash =
"sha256:919ccfe3273c6325c82ecb2e62b5af4d1b57fdc9858ce725b8223af2e1d6e2cd", size
= 2753501, upload-time = "2025-11-16T16:06:30.267Z" },
- { url =
"https://files.pythonhosted.org/packages/0d/6e/86cea4a4cd0c9adbae74d865468f298083fcefd4d9f8f8f21910078b069a/granian-2.6.0-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.whl",
hash =
"sha256:7d6368281f9f1bfde53a71f67570b70df773e01329f7a113b248de453e5991c1", size
= 2966948, upload-time = "2025-11-16T16:06:31.932Z" },
- { url =
"https://files.pythonhosted.org/packages/e0/01/092337f9aae6cb6fb66516894a3a39d723de9ab263d3a144511d07d2ccef/granian-2.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:b3d0b7dd32a630336120c9a12e7ba7ca4e415bebd22d9735b19df593e01ffa40", size
= 3317466, upload-time = "2025-11-16T16:06:33.222Z" },
- { url =
"https://files.pythonhosted.org/packages/b7/60/0d3635ef8f1f73789cb1779574493668a76675ef18115826a4a2dcb415d7/granian-2.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:acb18fca86ff560ea5a3bf9dc342245e388409844c257d1125ff9a988c81080b", size
= 3273204, upload-time = "2025-11-16T16:06:34.513Z" },
- { url =
"https://files.pythonhosted.org/packages/f3/26/09bc5016ae7faac0af40a07934d4d4d41f9e5bd7e97560aac957f7aa9605/granian-2.6.0-cp313-cp313t-manylinux_2_28_aarch64.whl",
hash =
"sha256:3606f13ba2fd9afde1d879ef556afcccd17b55c57a9f6be8487626867fe94a20", size
= 3107339, upload-time = "2025-11-16T16:06:36.121Z" },
- { url =
"https://files.pythonhosted.org/packages/c6/cb/91a13e42965a3e20a4c7398c63843cac9ca1a1c36925bd3ff69e6c17775f/granian-2.6.0-cp313-cp313t-musllinux_1_1_aarch64.whl",
hash =
"sha256:ca8188119daba0a343d2736dd4ed4d8d71ca5c0ca016a3f93599710906aa036f", size
= 3298057, upload-time = "2025-11-16T16:06:37.567Z" },
- { url =
"https://files.pythonhosted.org/packages/23/8b/19bb0f679b74ddb58e1c6de2e4c85ba986b2040d7446fd7e5a498e5a67cf/granian-2.6.0-cp313-cp313t-musllinux_1_1_armv7l.whl",
hash =
"sha256:6ac9d479d4795ab9c7222829d220636250ee034d266ad89a9657b64fb6770b93", size
= 3465623, upload-time = "2025-11-16T16:06:39.144Z" },
- { url =
"https://files.pythonhosted.org/packages/41/25/4af1f3e0cfea237912d04d57e97193d350b06f93255bde16040780e75589/granian-2.6.0-cp313-cp313t-musllinux_1_1_x86_64.whl",
hash =
"sha256:b8cc3635676639c1c6fc336571e7cdd4d4f0be6e05c33ae06721a570b346ce21", size
= 3476874, upload-time = "2025-11-16T16:06:40.868Z" },
- { url =
"https://files.pythonhosted.org/packages/bc/39/0163fbc335bbe3531b4151a6a8b80174375fdfbf3e2cb69da00e0bba1c9f/granian-2.6.0-cp313-cp313t-win_amd64.whl",
hash =
"sha256:91fb08e02598a0059cd1cc1f807c085f2bc386c0deb370f216edadf75adee8b8", size
= 2345083, upload-time = "2025-11-16T16:06:42.19Z" },
- { url =
"https://files.pythonhosted.org/packages/bb/53/9ed1a1f710a78eaad2897b9264bb6ae1190dc251af463b87be41f1963dfe/granian-2.6.0-cp314-cp314-macosx_10_12_x86_64.whl",
hash =
"sha256:cba1d4ac5b101c41fa916fb1ca5d5c359892b63d1470a9587055605c68850df8", size
= 3072924, upload-time = "2025-11-16T16:06:43.949Z" },
- { url =
"https://files.pythonhosted.org/packages/b1/58/8fa09896c88937a95b92185a1377b09f7cd1b8ac1e0f06a251e02ce96164/granian-2.6.0-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:2c829ece96a49d431c01553e0c020a675624798659c74e3d800867a415376fef", size
= 2800675, upload-time = "2025-11-16T16:06:45.831Z" },
- { url =
"https://files.pythonhosted.org/packages/4f/53/779e15fb6372cf00d2c66f392d754e0816bf0597e8346459c22bde9de219/granian-2.6.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:637153b653a85e1bb0cba2e10e321e2cbb1af1e9abab0feafd34eb612fe3fcdd", size
= 3323029, upload-time = "2025-11-16T16:06:47.682Z" },
- { url =
"https://files.pythonhosted.org/packages/32/ad/3af7388f51b4df3a781ecfc6f1ec18331ec74ea413fb2c62fe24c65e7935/granian-2.6.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:b6c09792ca3807059ef8e58a7c7bc5620586414f03ebd4bb2e6cd044044f0165", size
= 3142617, upload-time = "2025-11-16T16:06:48.964Z" },
- { url =
"https://files.pythonhosted.org/packages/4c/4d/6a7766fd9fe09f3f887c2168d5607cc2eb2ee9fe5c9364a877942c05de41/granian-2.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:79e2f68d99f454d1c51aacc86bed346693c074f27c51fb19b8afe5dc375e1b70", size
= 3383669, upload-time = "2025-11-16T16:06:50.363Z" },
- { url =
"https://files.pythonhosted.org/packages/b8/1c/b4bbdcd6bbe9c3290a2ac76eac3ae8916fdb38269f9f981e5b933ff02664/granian-2.6.0-cp314-cp314-manylinux_2_28_aarch64.whl",
hash =
"sha256:995f7b496b16484c97e8da9f44ead66307d6f532135a9890b0d27c88b8232df3", size
= 3233040, upload-time = "2025-11-16T16:06:52.787Z" },
- { url =
"https://files.pythonhosted.org/packages/75/26/ca7afabab2b31101eabc78df26772bd679e0a2bc879c58e8fcbb9732d57e/granian-2.6.0-cp314-cp314-musllinux_1_1_aarch64.whl",
hash =
"sha256:6d5db194527d52183b2dc17be9d68c59647bc66459c01a960407d446aa686c98", size
= 3302090, upload-time = "2025-11-16T16:06:54.112Z" },
- { url =
"https://files.pythonhosted.org/packages/e8/3b/3e6992ac60f8d2e7f6eb5ae7845ba8f77d9373379e7d8ec7dbdfac89c00b/granian-2.6.0-cp314-cp314-musllinux_1_1_armv7l.whl",
hash =
"sha256:c9fd40f3db242eece303ab4e9da4c7c398c865d628d58ff747680c54775ea9e4", size
= 3469619, upload-time = "2025-11-16T16:06:55.488Z" },
- { url =
"https://files.pythonhosted.org/packages/5d/96/8e78858630d7ca51751502c323f22841a56847db827a73d946a9303108c1/granian-2.6.0-cp314-cp314-musllinux_1_1_x86_64.whl",
hash =
"sha256:99dfa23b29e6a4f8cc2ec9b55946746f94ce305e474defef5c3c0e496471821e", size
= 3479330, upload-time = "2025-11-16T16:06:56.989Z" },
- { url =
"https://files.pythonhosted.org/packages/41/c1/2ea5fa5e28a9b400549494ce091dfb1a6122893b318c3fbc4cf7693cc398/granian-2.6.0-cp314-cp314-win_amd64.whl",
hash =
"sha256:22138a906503cb62cc25e26baa6d9e424ae26f9b46d7f852126d0a92fd9b3194", size
= 2345011, upload-time = "2025-11-16T16:06:58.745Z" },
- { url =
"https://files.pythonhosted.org/packages/5a/5c/5770f1270c2e59b7d27e25792ed62f3164b8b962ccf19b4a351429fd34fe/granian-2.6.0-cp314-cp314t-macosx_10_12_x86_64.whl",
hash =
"sha256:a8b356e8d96481c0fa67c2646a516b1f8985171995c0a40c5548352b75cae513", size
= 3026090, upload-time = "2025-11-16T16:07:00.105Z" },
- { url =
"https://files.pythonhosted.org/packages/28/89/85b40c55ddd270a31e047b368b4d82f32c0f6388511a0affcf6c8459821b/granian-2.6.0-cp314-cp314t-macosx_11_0_arm64.whl",
hash =
"sha256:f026d7a2f1395b02cba2b59613edfd463d9ef43aae33b3c5e41f2ac8d0752507", size
= 2752890, upload-time = "2025-11-16T16:07:01.507Z" },
- { url =
"https://files.pythonhosted.org/packages/bf/4e/369700caefaad0526fc36d43510e9274f430a5bdeea54b97f907e2dd387d/granian-2.6.0-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl",
hash =
"sha256:15c888605406c9b29b7da8e3afa0ce31dabad7d446cf42a2033d1f184e280ef3", size
= 2965483, upload-time = "2025-11-16T16:07:02.836Z" },
- { url =
"https://files.pythonhosted.org/packages/75/47/d6d95615b94a8bac94efca7a634cb3160fb7cd3235039e4d1708e0399453/granian-2.6.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:d9ce9ff8d4d9da73eb2e90c72eae986f823ab46b2c8c7ee091ec06e3c835a94e", size
= 3313071, upload-time = "2025-11-16T16:07:04.128Z" },
- { url =
"https://files.pythonhosted.org/packages/6a/76/f9098765797adfc142d503ee8a18fe137324558a028db6322753d88305d9/granian-2.6.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:681f44fa950b50721250536477b068315322c447f60b6a7018a9d61385202d67", size
= 3271503, upload-time = "2025-11-16T16:07:05.482Z" },
- { url =
"https://files.pythonhosted.org/packages/7f/f9/55be32f079af772054284aa917eb7bd77f1f8ba840f0773db9ac47279149/granian-2.6.0-cp314-cp314t-manylinux_2_28_aarch64.whl",
hash =
"sha256:cf23f25826e7c87c2cd9d984a358c14106d589febcd71af0f5392bb65fafb07a", size
= 3106398, upload-time = "2025-11-16T16:07:07.396Z" },
- { url =
"https://files.pythonhosted.org/packages/79/ab/e63f54a8432b2b877d83c5f2921a54791a420685002854dc7005bbd48817/granian-2.6.0-cp314-cp314t-musllinux_1_1_aarch64.whl",
hash =
"sha256:559985641cc1f0497f2c35d75126214f9cf9286ec6cea083fb1d0324712dbc47", size
= 3296156, upload-time = "2025-11-16T16:07:08.858Z" },
- { url =
"https://files.pythonhosted.org/packages/ef/3c/a37c038be10441a27cfde65a64c4406556ee64ab5deba4a782eaaa5ce7cf/granian-2.6.0-cp314-cp314t-musllinux_1_1_armv7l.whl",
hash =
"sha256:98718c08713d4afdf0e444f6236eeac6d01fdf08d0587f3c15da37fd12ee03f6", size
= 3460301, upload-time = "2025-11-16T16:07:10.476Z" },
- { url =
"https://files.pythonhosted.org/packages/44/05/bcc03661028df91808440f24ae9923cda4fc53938c6bb85a87e3d47540a5/granian-2.6.0-cp314-cp314t-musllinux_1_1_x86_64.whl",
hash =
"sha256:c115726904be2186b1e621a2b4a292f8d0ccc4b0f41ac89dcbe4b50cbaa67414", size
= 3474889, upload-time = "2025-11-16T16:07:11.873Z" },
- { url =
"https://files.pythonhosted.org/packages/fa/e2/69a3263a7415993c46561521de93213d2c7e04f2675b627a14c6dd69334c/granian-2.6.0-cp314-cp314t-win_amd64.whl",
hash =
"sha256:5bf42d8b4240f95a0edd227175161c0c93d465d6b8bb23abd65c2b82c37cfc44", size
= 2344006, upload-time = "2025-11-16T16:07:13.314Z" },
- { url =
"https://files.pythonhosted.org/packages/d5/ee/88767d70d21e6c35e44b40176abd25e1adb8f93103b0abc6035c580a52aa/granian-2.6.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl",
hash =
"sha256:323c096c7ebac19a16306708b4ed6abc9e57be572f0b9ff5dc65532be76f5d59", size
= 3089586, upload-time = "2025-11-16T16:07:14.65Z" },
- { url =
"https://files.pythonhosted.org/packages/5c/22/2405b36c01b5c32fc4bbc622f7c30b89a4ec9162cc3408a38c41d03e1c27/granian-2.6.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl",
hash =
"sha256:b9736ab48a1b3d70152e495374d4c5b61e90ea2a79f1fc19889f8bba6c68b3b5", size
= 2805061, upload-time = "2025-11-16T16:07:16.582Z" },
- { url =
"https://files.pythonhosted.org/packages/33/38/79e13366729f0f2561b33abef7deb326860443abbbb1d2247679feaeebdc/granian-2.6.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:ee4b1f5f7ec7096bdffc98171b559cb703c0be68e1c49ff59c208b90870c6bba", size
= 3381989, upload-time = "2025-11-16T16:07:17.906Z" },
- { url =
"https://files.pythonhosted.org/packages/90/9f/fcff1978ca3cbf138291a29fe09f2af5d939cab9e5f77acc49510092c0d8/granian-2.6.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl",
hash =
"sha256:e1e27e9527cdcd8e767c52e091e69ade0082c9868107164e32331a9bf9ead621", size
= 3237042, upload-time = "2025-11-16T16:07:19.381Z" },
- { url =
"https://files.pythonhosted.org/packages/a1/9d/06dc6b5f411cac8d6a6ef4824dc102b1818173027ab4293e4ae57c620cfe/granian-2.6.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl",
hash =
"sha256:f9f9c5384f9370179d849c876c35da82f0ebd7389d04a3923c094a9e4e80afc5", size
= 3316073, upload-time = "2025-11-16T16:07:20.95Z" },
- { url =
"https://files.pythonhosted.org/packages/1c/e1/45e9861df695c743b57738d9b8c15b3c98ebd34ba16a79884372b2006b32/granian-2.6.0-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl",
hash =
"sha256:561a3b86523a0b0e5d636229e3f0dcd80118ace2b1d2d061ecddeba0044ae8ac", size
= 3483622, upload-time = "2025-11-16T16:07:22.567Z" },
- { url =
"https://files.pythonhosted.org/packages/5f/14/cfe0648b2e1779ed2a2215a97de9acc74f94941bb60c6f2c9fb7061ae4bb/granian-2.6.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl",
hash =
"sha256:8e12a70bdb3b5845f62dc2013527d5b150b6a4bc484f2dec555e6d27f4852e59", size
= 3460175, upload-time = "2025-11-16T16:07:24.327Z" },
- { url =
"https://files.pythonhosted.org/packages/13/ad/44bbbb97adc507af6fa47dec53cecee1abc2e802bcf3762a82249f0a127d/granian-2.6.0-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:2ce02a92e938a44ea942ea1be44056fd41861ce957cf4498f0258fb15b04210a", size
= 2338041, upload-time = "2025-11-16T16:07:25.796Z" },
+ { url =
"https://files.pythonhosted.org/packages/1c/23/ccaa1c786aa528a672d6f25ce236156aeb06a63931109aa6f2d4d3c8a350/granian-2.7.4-cp310-cp310-macosx_10_12_x86_64.whl",
hash =
"sha256:1c2a13c5c119e34369f984d8414edb8ba3793d7c78c37bb795942648dda3eca1", size
= 6354293, upload-time = "2026-04-23T11:53:32.922Z" },
+ { url =
"https://files.pythonhosted.org/packages/91/b7/2b0b0e2dc07cb17febbbf3b349c96f425a53d913ba76278091f821adfc22/granian-2.7.4-cp310-cp310-macosx_11_0_arm64.whl",
hash =
"sha256:91963c4928a355d772f14075057ff721423bce70612a619edc2daf04dd258577", size
= 6050464, upload-time = "2026-04-23T11:53:34.912Z" },
+ { url =
"https://files.pythonhosted.org/packages/a3/9c/1feb488abb85446ac7d12d05a93788a3a6b42810d64d5806ebc309c65fc9/granian-2.7.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:9d068796cb7e8e0b7a4c8d51077701e37104a39cd103c655a5c232ad561fb07c", size
= 6883201, upload-time = "2026-04-23T11:53:36.73Z" },
+ { url =
"https://files.pythonhosted.org/packages/c8/ac/176b47bb48689fe3575ccbf372d67dd52fb0390686f4d8b7174ab2538ce5/granian-2.7.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:c932f5c292b643019c4dd410a352789dbb8cb2cb41ec5b373779a87375de398a", size
= 6135933, upload-time = "2026-04-23T11:53:38.552Z" },
+ { url =
"https://files.pythonhosted.org/packages/25/5d/4d894789683bd074bbe0361df7e3e524a2b763e44d771e326a16d4ea014b/granian-2.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:b7a8f411408b0b65a07460e39cb53178e30a15ff5f0c77ed6aa31e1106590ea9", size
= 6783971, upload-time = "2026-04-23T11:53:40.602Z" },
+ { url =
"https://files.pythonhosted.org/packages/88/e3/fe781d55306f1542b3db0fac13b70b39846b5e9a400fda9a3a2bf04a9af6/granian-2.7.4-cp310-cp310-manylinux_2_28_aarch64.whl",
hash =
"sha256:6b7ab6a1a0c0d77ec1dd1145b7c8f3da5251ec7926c005da22f7415bf1b217a7", size
= 6906647, upload-time = "2026-04-23T11:53:42.352Z" },
+ { url =
"https://files.pythonhosted.org/packages/76/11/c10af6940d8bb73cfb4eaa6781eb3f5c7880e1b69d9d87edc63292171538/granian-2.7.4-cp310-cp310-musllinux_1_1_aarch64.whl",
hash =
"sha256:6036316f781f7ad1412d7aa10b49c5a25e69fae3f67ed766b0923ebb43aa5118", size
= 6930262, upload-time = "2026-04-23T11:53:43.855Z" },
+ { url =
"https://files.pythonhosted.org/packages/f4/3d/5d129792626ac990d3b14d484736b8eafa202966f1a541c5b665c30fc880/granian-2.7.4-cp310-cp310-musllinux_1_1_armv7l.whl",
hash =
"sha256:acef581d94270a22763fba192fc8cef0df77dac125080ca27e6e847a5e59cd07", size
= 7050428, upload-time = "2026-04-23T11:53:45.385Z" },
+ { url =
"https://files.pythonhosted.org/packages/4c/e0/9a9d9f9d0e68277d49829d53746b2e8b3761e7b79a666fd9a4f445587321/granian-2.7.4-cp310-cp310-musllinux_1_1_x86_64.whl",
hash =
"sha256:187a85fe36561c74a1db94b858175824c3154ebe6d0aa61c97124427f5c5a5fa", size
= 6899482, upload-time = "2026-04-23T11:53:47.372Z" },
+ { url =
"https://files.pythonhosted.org/packages/19/de/04de408275968d4bff8e6fed9d6abf406beccac27412a08c8daaab7c9534/granian-2.7.4-cp310-cp310-win_amd64.whl",
hash =
"sha256:c73c6099206288c903a305d975064fbb51f9d0c78d06c914b23dde56165105c9", size
= 3995374, upload-time = "2026-04-23T11:53:48.751Z" },
+ { url =
"https://files.pythonhosted.org/packages/df/00/a7db7e3627992c59927f57d5447638be515e683e2c8037ab7845250270d2/granian-2.7.4-cp311-cp311-macosx_10_12_x86_64.whl",
hash =
"sha256:455c51baf51dd0c3d22004fc04f9afb0662cb84ab2b75b48e5d6bb8b3e4e3548", size
= 6353285, upload-time = "2026-04-23T11:53:50.113Z" },
+ { url =
"https://files.pythonhosted.org/packages/b2/23/337ab1a0929cb0cfbdedc06879cff62d6c08cb725fa2d4e139c7e305fed3/granian-2.7.4-cp311-cp311-macosx_11_0_arm64.whl",
hash =
"sha256:f2c54f3fe69790aa4b685372bcc8f382a8e9ba570b8ea4cb476e3b240a5a5a7c", size
= 6050711, upload-time = "2026-04-23T11:53:51.887Z" },
+ { url =
"https://files.pythonhosted.org/packages/28/ba/3605834adaf5dc9ac3701b817bc9d42c73c89fb67815c7c87c7f64a9b6e1/granian-2.7.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:f9549c44b325fe51ee4fc57308761f5178add4d531f1cc333b4a1eedf4a5b7af", size
= 6882199, upload-time = "2026-04-23T11:53:53.298Z" },
+ { url =
"https://files.pythonhosted.org/packages/2e/1e/f11c9773dbf07ed326efc26a771b39ce97f7ee25608c16d69248db2da8da/granian-2.7.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:0910390ea8f893cc4c3f38a28c923a321609358cf46d31aa7df5c3d3e58e8337", size
= 6135800, upload-time = "2026-04-23T11:53:55.186Z" },
+ { url =
"https://files.pythonhosted.org/packages/f1/96/ca238b4f5d813643264abace48ca630efb1ab6d10409bd9e2c05c1d1ef12/granian-2.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:b0de44552990b3dacb87ea3f37ebbcce67881712c0b0db500013821b14df7e4e", size
= 6784786, upload-time = "2026-04-23T11:53:56.706Z" },
+ { url =
"https://files.pythonhosted.org/packages/ae/85/2feeffc37fe3c8a0f3e932393bcc99c8972984fe95907b34b380284caf1c/granian-2.7.4-cp311-cp311-manylinux_2_28_aarch64.whl",
hash =
"sha256:5c9c6d51a675d9b7084244e63157899dd1afe6f1a5ab014015bc86afd4871df5", size
= 6906836, upload-time = "2026-04-23T11:53:58.991Z" },
+ { url =
"https://files.pythonhosted.org/packages/ae/b6/faed26e3abd741e1d261defc0e7e3b2ecb9a2189c557e829bb28c3281456/granian-2.7.4-cp311-cp311-musllinux_1_1_aarch64.whl",
hash =
"sha256:6be8c6ebbc53efea03284aef87de9b7367df3c9433f7df3b46c1edceaaa9d840", size
= 6929985, upload-time = "2026-04-23T11:54:00.846Z" },
+ { url =
"https://files.pythonhosted.org/packages/25/5c/9f7a836177b5e94ad15da49046254e5b837e1d2c3d03981111d4af9a9d2b/granian-2.7.4-cp311-cp311-musllinux_1_1_armv7l.whl",
hash =
"sha256:c10e056a6e76da640adb35f88d41ba40ae44065c5e04d4bc35f47c19a7f83a99", size
= 7050668, upload-time = "2026-04-23T11:54:02.466Z" },
+ { url =
"https://files.pythonhosted.org/packages/08/88/19c01761d639b5e2c2eb2f12ff064c6765f32fa7f129c9f48162cdca0668/granian-2.7.4-cp311-cp311-musllinux_1_1_x86_64.whl",
hash =
"sha256:0e60a3153456f8922ca73d3a427cc3bb594c021f70ec08ecded6581efe25f48c", size
= 6899480, upload-time = "2026-04-23T11:54:03.948Z" },
+ { url =
"https://files.pythonhosted.org/packages/04/ec/9022f3c2728fcd99f9374ce633e254b201f4bf76fbe60031bbc137f1cf8a/granian-2.7.4-cp311-cp311-win_amd64.whl",
hash =
"sha256:e9cafbf391d16ea8b8a2e9f88501783fac8da75eb948620899062a17929c4a84", size
= 3996087, upload-time = "2026-04-23T11:54:05.771Z" },
+ { url =
"https://files.pythonhosted.org/packages/8d/d9/148024fd3a8bd974bb5c68a0cb48d15df7763fd1364bf090ccc2d423028a/granian-2.7.4-cp312-cp312-macosx_10_12_x86_64.whl",
hash =
"sha256:2c2f40aaecf2ba3d8232e55181c8f6db7bc68d9112a419ab8d5f9e2f33f631f5", size
= 6374067, upload-time = "2026-04-23T11:54:07.293Z" },
+ { url =
"https://files.pythonhosted.org/packages/fc/bb/c53b61a7cb67d33677d96913438eca3d79de1b1b7173a361fcdf2753ade7/granian-2.7.4-cp312-cp312-macosx_11_0_arm64.whl",
hash =
"sha256:a8111d5e74b27721e0fdda3edba7c154d44c41b469466857ca3c51b088e3846b", size
= 6046338, upload-time = "2026-04-23T11:54:08.684Z" },
+ { url =
"https://files.pythonhosted.org/packages/29/8d/5c9dc91b9c9a05bf6ed0b795d30f4bb8f290d61502779a89ed2fd75f9fb6/granian-2.7.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:74adbb6c1920dbf4271b824135639318b2a20ff5e33bc35639a8e2928a777234", size
= 7000585, upload-time = "2026-04-23T11:54:10.451Z" },
+ { url =
"https://files.pythonhosted.org/packages/d9/7c/c770593b24a472ab5265a44546f56079757efbf89f8e8b2229a8443e453b/granian-2.7.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:0b778d356b61e0389c823016ad2be50a634b80d3d28a33922f7ac39553e828ad", size
= 6255544, upload-time = "2026-04-23T11:54:12.484Z" },
+ { url =
"https://files.pythonhosted.org/packages/15/46/796147587edb494a330294cb001cf68520ad8296a7da91d80ec672ac8615/granian-2.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:3607b091c4ef225ee99150f3b02cb827de8d677b52fc75f0b28893244f7bab27", size
= 6875124, upload-time = "2026-04-23T11:54:13.967Z" },
+ { url =
"https://files.pythonhosted.org/packages/c5/25/b867f624886e11053e7a6235244de26fd864a136e65d12295e728b3e5005/granian-2.7.4-cp312-cp312-manylinux_2_28_aarch64.whl",
hash =
"sha256:3d3cf4fe3cafd9b874d8b749c66c790cbf2b4225f2a7d9fb284c51b77a8e938d", size
= 6982394, upload-time = "2026-04-23T11:54:15.733Z" },
+ { url =
"https://files.pythonhosted.org/packages/4f/e1/5746bfe202bd2f6a1506346463ce52dd015c2b5d03d07a53ecf0fddefa3f/granian-2.7.4-cp312-cp312-musllinux_1_1_aarch64.whl",
hash =
"sha256:846c9cbfea8684ab13d21d66855ad06dc077fb95b5590e7f5040e79994d6429d", size
= 6991457, upload-time = "2026-04-23T11:54:17.325Z" },
+ { url =
"https://files.pythonhosted.org/packages/e0/45/fc6992839d367b6ae8fa8d88b5e70ec293162c3a2e0e6b90fc426f228df2/granian-2.7.4-cp312-cp312-musllinux_1_1_armv7l.whl",
hash =
"sha256:d34d97cfe4a7805ecb5b1b1684f3f197bb4baf019d2a9f18e34fd1d697a03a7f", size
= 7148499, upload-time = "2026-04-23T11:54:19.234Z" },
+ { url =
"https://files.pythonhosted.org/packages/fe/12/16ffd64a1213858d4cf824767b398758be807dd1a6df5a303dc76994b6d6/granian-2.7.4-cp312-cp312-musllinux_1_1_x86_64.whl",
hash =
"sha256:f11336e4bcd8ef5c5143b075b5260e37e8431eb36d68564cc39416ca526c797f", size
= 7006829, upload-time = "2026-04-23T11:54:20.804Z" },
+ { url =
"https://files.pythonhosted.org/packages/95/9a/f2fcda200f8739ddf25be72591b7a28897be0ffd952a76ec655e5f877144/granian-2.7.4-cp312-cp312-win_amd64.whl",
hash =
"sha256:9e0a4370773ec4a0e92a55a33fc700b60003e335480e5c7fe941f4bc3dda2e18", size
= 4026771, upload-time = "2026-04-23T11:54:22.36Z" },
+ { url =
"https://files.pythonhosted.org/packages/0a/0f/fa7c63afedcb214edb96703cade360d946d5f1ca59ddb0b3d8e04587fb45/granian-2.7.4-cp313-cp313-macosx_10_12_x86_64.whl",
hash =
"sha256:d11da4a4527ba8dc28b5533d5e3241d8d9212e593195d27c6e72c8a422010af5", size
= 6373513, upload-time = "2026-04-23T11:54:24.246Z" },
+ { url =
"https://files.pythonhosted.org/packages/be/39/3088ce32d940f7982102ea3bdc230090e34ac56dc0bce04f2d03b56ea435/granian-2.7.4-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:057a3db87e93eca1a11255dd13b45b5dd83f798a750fd87f02e14d54db5741b6", size
= 6045232, upload-time = "2026-04-23T11:54:25.708Z" },
+ { url =
"https://files.pythonhosted.org/packages/ac/61/588f6b5397ea4f5bd9fc8de4b8cc092c555b8d95371c03d149b3bc419277/granian-2.7.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:bb63d64c686799cea850c0c328d21adf75e323991a20be04923afc729432d2b5", size
= 7001059, upload-time = "2026-04-23T11:54:27.532Z" },
+ { url =
"https://files.pythonhosted.org/packages/58/63/2affbcecfe96f940744c2086ea3793935d5f6898207590a579c92fc8588f/granian-2.7.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:f406648c47569e983f0c58bd0853bac30a2bcdc6227428255ee5cc65a8ee62b6", size
= 6255487, upload-time = "2026-04-23T11:54:29.397Z" },
+ { url =
"https://files.pythonhosted.org/packages/87/ac/31f7155a467020e7640e91af15ca3a70b0e7da210de42e3d3344e5eba8d0/granian-2.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:2bd56306eed06e293f4848c5ea997e1d019d1ad13b8252dde1f0bc773aca85ef", size
= 6875068, upload-time = "2026-04-23T11:54:31.128Z" },
+ { url =
"https://files.pythonhosted.org/packages/99/22/402cc903e5c4e82bd363177392d4e1dcab8b27c1f7006c5316c37c597056/granian-2.7.4-cp313-cp313-manylinux_2_28_aarch64.whl",
hash =
"sha256:732639e612e6b6e8d481f399f367e8c9bbb6f0e1b7b0aa74db340c574ee3dd98", size
= 6982487, upload-time = "2026-04-23T11:54:32.704Z" },
+ { url =
"https://files.pythonhosted.org/packages/d3/92/3878f977bda82fc3a66fc7e95a54366a7b82edd53e6c9fdb3ec053693280/granian-2.7.4-cp313-cp313-musllinux_1_1_aarch64.whl",
hash =
"sha256:47b8fdbfb369d52bb3fb884514a6a3a7e4d8e81c65fd26e5232985f2b46ebe0f", size
= 6990683, upload-time = "2026-04-23T11:54:34.301Z" },
+ { url =
"https://files.pythonhosted.org/packages/ce/b3/a1239f3bc4e9034e07cb32403e6a6d26db01bba1c244dd654f6a76bf2612/granian-2.7.4-cp313-cp313-musllinux_1_1_armv7l.whl",
hash =
"sha256:b679086082bfd7c1aa8c248ef673b715616a4ce58eec6fbeef8b83b30ac84283", size
= 7148570, upload-time = "2026-04-23T11:54:36.494Z" },
+ { url =
"https://files.pythonhosted.org/packages/89/3c/fef781ea7356b21f671615dd0d53adc00fad81031a9ea506f80d1f46a43d/granian-2.7.4-cp313-cp313-musllinux_1_1_x86_64.whl",
hash =
"sha256:a29191e949a99ffae2807abb7a864f7493f7a744e4fe2ddd2b5cd8db9b71378d", size
= 7006976, upload-time = "2026-04-23T11:54:38.135Z" },
+ { url =
"https://files.pythonhosted.org/packages/56/54/ae2979fc45c06fbb37f595ee10eb6b138b6056202163b8e274d140d3f87b/granian-2.7.4-cp313-cp313-win_amd64.whl",
hash =
"sha256:07d26325cc69371ea2dc9d3a9cd0cc851c1c8e3dce40aca90e8c204547b5ba7e", size
= 4027044, upload-time = "2026-04-23T11:54:39.957Z" },
+ { url =
"https://files.pythonhosted.org/packages/21/51/10344430e495bfa128dccc114957b33e712e971f91668788c08fe791df73/granian-2.7.4-cp313-cp313t-macosx_10_12_x86_64.whl",
hash =
"sha256:4e093fe9511387313ad7ec9a76b0c78397cc584ef3dff47d46c336c5aee9cd8d", size
= 6249290, upload-time = "2026-04-23T11:54:41.738Z" },
+ { url =
"https://files.pythonhosted.org/packages/ec/46/c7eda2e71a89a13e174598649f721c63ed3d908c0904b62621e8a433af0f/granian-2.7.4-cp313-cp313t-macosx_11_0_arm64.whl",
hash =
"sha256:227889f821526b8b60c5edf31b01fc987c4193bb0fc198c0998e0841e0cb719c", size
= 5901799, upload-time = "2026-04-23T11:54:43.708Z" },
+ { url =
"https://files.pythonhosted.org/packages/72/d8/79e51f9f794389a9d6cab3d7c6b834b87d65fba72a43784eb5d2664a57a6/granian-2.7.4-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.whl",
hash =
"sha256:2b28d4aec5a9f2758a48da1897649a01b70ee1c00f2c4649db574527a3d00943", size
= 6037594, upload-time = "2026-04-23T11:54:45.595Z" },
+ { url =
"https://files.pythonhosted.org/packages/ce/d8/835873a407279435fa0c8e8ac52392d3ba5c9a652bb15c0036aa07d9c302/granian-2.7.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:f708fea5024a40e0dfba1c17c1c4b09e02e00ac0ac9ac1e345b409f0c11b71e5", size
= 6966672, upload-time = "2026-04-23T11:54:47.242Z" },
+ { url =
"https://files.pythonhosted.org/packages/92/5f/21eacdda27c38e4194de5f9bef36c4045058daf6d58533fadb7c54c70573/granian-2.7.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:f7006dfe9852cded794bc60008a168faf4dc2ecc18f1d74b5fde545685b699ec", size
= 6563668, upload-time = "2026-04-23T11:54:49.751Z" },
+ { url =
"https://files.pythonhosted.org/packages/bd/06/9b19956d75277df44ee380e873a86b9890c431f2e2bcde32b3ba341f0efa/granian-2.7.4-cp313-cp313t-manylinux_2_28_aarch64.whl",
hash =
"sha256:77103af44034e30505fb5577b8214b0ad39cd6cbdc854ff980d4755faf93adaa", size
= 6664285, upload-time = "2026-04-23T11:54:51.502Z" },
+ { url =
"https://files.pythonhosted.org/packages/85/33/740e0c9478be49c0778c4ea1773357680980e10e84b59bc19664033996dc/granian-2.7.4-cp313-cp313t-musllinux_1_1_aarch64.whl",
hash =
"sha256:b23194e1e0652297086224212605edb4998442511637e732d6009506277f8ff9", size
= 6820367, upload-time = "2026-04-23T11:54:53.506Z" },
+ { url =
"https://files.pythonhosted.org/packages/c2/ad/3453fc1212268a01fee957122f2b1699af0efe50eca07ac570e11d1be12b/granian-2.7.4-cp313-cp313t-musllinux_1_1_armv7l.whl",
hash =
"sha256:f62941a4ffa1f1c2c5750cfc0b0ad96aa85d63b016125289779eef8888f5340d", size
= 7132366, upload-time = "2026-04-23T11:54:55.123Z" },
+ { url =
"https://files.pythonhosted.org/packages/6c/ca/8479e4d2a02f210ce68b5dc73c77953ec1dfd3769bf725d06e6ec420d502/granian-2.7.4-cp313-cp313t-musllinux_1_1_x86_64.whl",
hash =
"sha256:ea6f97d2ade676f1bf49b79088fa4b5640b8b9804b7470218486df3d4be50046", size
= 6842094, upload-time = "2026-04-23T11:54:56.665Z" },
+ { url =
"https://files.pythonhosted.org/packages/0d/96/71f95c73220726aee3e908b3ad2745c4c44fbfba508cb5ed615a9d4d367f/granian-2.7.4-cp313-cp313t-win_amd64.whl",
hash =
"sha256:759140ceef02ef72e57a184461927d72bcc2ddd3664c3cbbf4def7516f818041", size
= 3974523, upload-time = "2026-04-23T11:54:58.541Z" },
+ { url =
"https://files.pythonhosted.org/packages/98/5d/a0c3d8778cd8aa68131974d34c439a38a00a32953e71e3b549759a5e3cdb/granian-2.7.4-cp314-cp314-macosx_10_12_x86_64.whl",
hash =
"sha256:c19ebe797d7383cbb3497c599b8201af71f9fff6b18deaf9965d106f61588ab8", size
= 6322736, upload-time = "2026-04-23T11:55:00.292Z" },
+ { url =
"https://files.pythonhosted.org/packages/5e/99/211da053030574f2402c750f3e3e5dc587f5192eac4888affe6ca8894a9f/granian-2.7.4-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:4cee0bdba9179537669c2fa0afab2ce89327a372f1b2a82f280798da321c996c", size
= 6052103, upload-time = "2026-04-23T11:55:02.797Z" },
+ { url =
"https://files.pythonhosted.org/packages/ab/9d/23ec1fd519a4c0db961b05d1821869ed6371cbaf8b3d3a0a85c04f89e6ca/granian-2.7.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:a4bc5b54845bfb5f87537483f25c8f8e6003c3c1b4b0eadf6b93a432d0604265", size
= 7000868, upload-time = "2026-04-23T11:55:04.826Z" },
+ { url =
"https://files.pythonhosted.org/packages/98/35/b8798c98c90d3293d9c85580ea6021f148d5ab73ab99d1f82a0e66f73131/granian-2.7.4-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:b550fb98b89465c8192b6e506993de6bfb956838e715ffb58e944aec1afdae99", size
= 6257266, upload-time = "2026-04-23T11:55:06.962Z" },
+ { url =
"https://files.pythonhosted.org/packages/6b/4f/5574db17193d90a5831120a0ce2a2dc64a711110ccb9af5a3630260c3597/granian-2.7.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:d7100a6a6d3835fec2a207fef536a259dd42d9efdb5c46933cf6f9d55d5bfaad", size
= 6849667, upload-time = "2026-04-23T11:55:08.862Z" },
+ { url =
"https://files.pythonhosted.org/packages/66/a7/90b85cc6a31cbee772fc8ee731479429a64169e389444a5fdd685d44a342/granian-2.7.4-cp314-cp314-manylinux_2_28_aarch64.whl",
hash =
"sha256:034ac1bfe8c19b5a7916d35a1ca426845db9ac11215f1b367566aec3b6530549", size
= 6902612, upload-time = "2026-04-23T11:55:10.888Z" },
+ { url =
"https://files.pythonhosted.org/packages/06/6c/ba203ca40bd406db0412bca70281e44712f941bc6aafb59a628f4811d517/granian-2.7.4-cp314-cp314-musllinux_1_1_aarch64.whl",
hash =
"sha256:baf1c390a25d3d9840204c39e7b801c909e99e896ae2713d898c46b563cbf962", size
= 6927025, upload-time = "2026-04-23T11:55:12.663Z" },
+ { url =
"https://files.pythonhosted.org/packages/ee/52/77e2abfba54523943eea275ebbe733a6d186fe646304fe25f6d22b243d03/granian-2.7.4-cp314-cp314-musllinux_1_1_armv7l.whl",
hash =
"sha256:3bb99778ae05c1118cd694717d025cc0b85f5ee81f60cbcb2a8783692798db96", size
= 7146800, upload-time = "2026-04-23T11:55:14.459Z" },
+ { url =
"https://files.pythonhosted.org/packages/1d/66/7209201856b7de8d3c643ba87e11272c4d651c216d05ea3fcbdce0da4ab0/granian-2.7.4-cp314-cp314-musllinux_1_1_x86_64.whl",
hash =
"sha256:13f0a39872afa81c6aaa8e29832371fd831373140f1f04de459ff862824f488b", size
= 6999983, upload-time = "2026-04-23T11:55:16.236Z" },
+ { url =
"https://files.pythonhosted.org/packages/c3/45/bd1e521284714615996dcee48dad47d8b97ca2767a7e7cccd392f25fc176/granian-2.7.4-cp314-cp314-win_amd64.whl",
hash =
"sha256:97b5aeec98a9c6c0695bf8f068bd03aca83fc17c0d977a9c3a2e57bb5f10d47e", size
= 3989433, upload-time = "2026-04-23T11:55:17.774Z" },
+ { url =
"https://files.pythonhosted.org/packages/45/a2/609f8f0dca7f596b5fb6e57b988b4b8f4d6579724b2720933c379d43301a/granian-2.7.4-cp314-cp314t-macosx_10_12_x86_64.whl",
hash =
"sha256:a7b1aca6c654f0e61c9e493dd6d3ddb1698f47dc33ed04566a6635948b081b64", size
= 6251034, upload-time = "2026-04-23T11:55:19.29Z" },
+ { url =
"https://files.pythonhosted.org/packages/4c/f5/2eefa8ff477cce7b119ed2fe97fc1f3b2d108397d4755e83a5198149f2c8/granian-2.7.4-cp314-cp314t-macosx_11_0_arm64.whl",
hash =
"sha256:d4e0c8cc6850dec7180a26b6805b2c4cdbac4c1c48077fd7857a3cd8ff342d9d", size
= 5912772, upload-time = "2026-04-23T11:55:21.581Z" },
+ { url =
"https://files.pythonhosted.org/packages/ae/40/9a5070badaed4ceecf4082855985840c320f7232b8c1ddc93e1732c63265/granian-2.7.4-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl",
hash =
"sha256:7e6b1f6e0fe873efa3393ef28803ff699a94254f2a7dc07422cc01d9849e2136", size
= 6037318, upload-time = "2026-04-23T11:55:23.855Z" },
+ { url =
"https://files.pythonhosted.org/packages/95/52/1db412e63425cb12f5ca61877956583c6d12f21657b1a3e47eb3200e9c1b/granian-2.7.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
hash =
"sha256:dce110217825cff60f68da83280bc20471b10e004e720fa94b845e01925d8698", size
= 6962778, upload-time = "2026-04-23T11:55:26.095Z" },
+ { url =
"https://files.pythonhosted.org/packages/b4/f2/fcca39f617bf70e29ef903bb7a4d037970c637023484f2112d9ed6882516/granian-2.7.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:058f9a4ebfc7b9c2577569c6ecfd333628d0d045de272afaa65ee9933849778c", size
= 6566618, upload-time = "2026-04-23T11:55:28.233Z" },
+ { url =
"https://files.pythonhosted.org/packages/ee/20/0da1bb552746d74275017e1ffc7fc419dd1a33345f132f6f5a90f9f41142/granian-2.7.4-cp314-cp314t-manylinux_2_28_aarch64.whl",
hash =
"sha256:7c05f74fa5b5dcedc9f035a7c10b8afd90a3d941975a370f1e07c3f3095dd883", size
= 6670850, upload-time = "2026-04-23T11:55:29.945Z" },
+ { url =
"https://files.pythonhosted.org/packages/11/2a/d0d9cdb10d2760e2f47bd4600c8eef02e326f8f7e253a80ce4ba384265e6/granian-2.7.4-cp314-cp314t-musllinux_1_1_aarch64.whl",
hash =
"sha256:8b992bbc667e3c74de4ad48ac8d735c7cddf3f709fc2097f7dd230ecc46fd7b3", size
= 6824752, upload-time = "2026-04-23T11:55:32.066Z" },
+ { url =
"https://files.pythonhosted.org/packages/3d/79/0432f92f9df6e54394e4dd1c159c0d4814d255a2d2541fa9a5c187d19152/granian-2.7.4-cp314-cp314t-musllinux_1_1_armv7l.whl",
hash =
"sha256:df05e0f85712b3e90ddf28cb8be358664b1afa8cb8f09978141ca70052dca3a7", size
= 7130809, upload-time = "2026-04-23T11:55:33.807Z" },
+ { url =
"https://files.pythonhosted.org/packages/19/03/11cc0e08f59f03a3cd6a1fe46d7632a0f8690ef945a495b1303140bb7541/granian-2.7.4-cp314-cp314t-musllinux_1_1_x86_64.whl",
hash =
"sha256:dbc620f35b67cf6b03d2b6a24b9b442d1bf52961eaebadb2c3ff214d3d0c8dc4", size
= 6845920, upload-time = "2026-04-23T11:55:35.583Z" },
+ { url =
"https://files.pythonhosted.org/packages/b4/49/bcbaaeec0f68d3d1a3dd1fdd21e4a6963d303ae18027c42b2b53f87d6b89/granian-2.7.4-cp314-cp314t-win_amd64.whl",
hash =
"sha256:b9df8aead4d71562753788264db23d32db34147bb73294ddd90833bef1f4cf35", size
= 3981107, upload-time = "2026-04-23T11:55:37.597Z" },
+ { url =
"https://files.pythonhosted.org/packages/51/18/577637bb861ab688db8eb5d698ad700133818debd7ae6f58c0574c43f70e/granian-2.7.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl",
hash =
"sha256:ce50300cf876f418ba0545f6e8c56d8c75038fc503add0fd1b58d9a3057d95ea", size
= 6363314, upload-time = "2026-04-23T11:55:39.837Z" },
+ { url =
"https://files.pythonhosted.org/packages/48/41/11a6219baa10270f1a6a2a101cfa372e5d55a46a839a43b49a8d087fac09/granian-2.7.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl",
hash =
"sha256:eb7f727f14d7d485a5df4078e7cc3038864b4e7c380865968e75e1e51e62457a", size
= 6027259, upload-time = "2026-04-23T11:55:42.122Z" },
+ { url =
"https://files.pythonhosted.org/packages/bf/58/12b19b17fb79ee064a8a77a865a031bb49f4ea813789ad63186458ea02c9/granian-2.7.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:abbab303b502a770355c13c93569e6c0c71ccc864ab41b59636720d5a643f6b3", size
= 6760497, upload-time = "2026-04-23T11:55:44.116Z" },
+ { url =
"https://files.pythonhosted.org/packages/45/9f/572711f882423f599707aae577ccdbc1700cf0cc3ceb4e9500e00c6b8d14/granian-2.7.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl",
hash =
"sha256:f0b0423fa33a1afb9730fbfb5700fef4dac16bf7a1b7a2a79d0349739c1b1f44", size
= 6843897, upload-time = "2026-04-23T11:55:46.322Z" },
+ { url =
"https://files.pythonhosted.org/packages/31/f9/75d51721069a184cd00310c4b0b0d614a6370905c13a096ccee193432ba3/granian-2.7.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl",
hash =
"sha256:efa0d4fc35ab42562747e4103124e1c4f21afab081c1591de6472174a3416802", size
= 6876194, upload-time = "2026-04-23T11:55:48.231Z" },
+ { url =
"https://files.pythonhosted.org/packages/44/5e/fd81492529bc2b02dafc63c95d03c2c7faa26ac883ccd94aa93b21fc68c3/granian-2.7.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl",
hash =
"sha256:03b5ce06df095b5db49bd4e976ac8d8419bb0e73dc160613fc3db5e5d5dcd1af", size
= 7094066, upload-time = "2026-04-23T11:55:50.328Z" },
+ { url =
"https://files.pythonhosted.org/packages/c7/04/f2fa35dc2956edb9a5abaabc0840aed92b4121ce27adf684a1c75e3c70ac/granian-2.7.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl",
hash =
"sha256:9247db25dd66f74766a6a9488f1279c9b40cf422c6d7a04010492fa1aa7c9019", size
= 6892580, upload-time = "2026-04-23T11:55:52.084Z" },
+ { url =
"https://files.pythonhosted.org/packages/72/6f/f45fa86c36fcc34f6e613bb223b10fd36c6acd9f7aa43d4f65d0f1eff4cc/granian-2.7.4-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:efccd6818a1ac4cba7eededf5e2768f56d4a8c7c93bd5e3a8d7a901510976944", size
= 3971242, upload-time = "2026-04-23T11:55:53.834Z" },
]
[[package]]
@@ -892,18 +867,6 @@
]
[[package]]
-name = "importlib-metadata"
-version = "8.7.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "zipp", marker = "python_full_version < '3.11'" },
-]
-sdist = { url =
"https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz",
hash =
"sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size
= 56641, upload-time = "2025-04-27T15:29:01.736Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl",
hash =
"sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size
= 27656, upload-time = "2025-04-27T15:29:00.214Z" },
-]
-
-[[package]]
name = "incremental"
version = "24.11.0"
source = { registry = "https://pypi.org/simple" }
@@ -1268,11 +1231,11 @@
[[package]]
name = "pygments"
-version = "2.19.2"
+version = "2.20.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz",
hash =
"sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size
= 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz",
hash =
"sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size
= 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl",
hash =
"sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size
= 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
+ { url =
"https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl",
hash =
"sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size
= 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
]
[[package]]
@@ -1289,17 +1252,8 @@
]
[[package]]
-name = "pyproject-hooks"
-version = "1.2.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz",
hash =
"sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size
= 19228, upload-time = "2024-09-29T09:24:13.293Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl",
hash =
"sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size
= 10216, upload-time = "2024-09-29T09:24:11.978Z" },
-]
-
-[[package]]
name = "pytest"
-version = "9.0.2"
+version = "9.0.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
@@ -1310,9 +1264,9 @@
{ name = "pygments" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz",
hash =
"sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size
= 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz",
hash =
"sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size
= 1572165, upload-time = "2026-04-07T17:16:18.027Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl",
hash =
"sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size
= 374801, upload-time = "2025-12-06T21:30:49.154Z" },
+ { url =
"https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl",
hash =
"sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size
= 375249, upload-time = "2026-04-07T17:16:16.13Z" },
]
[[package]]
@@ -1357,11 +1311,11 @@
[[package]]
name = "python-dotenv"
-version = "1.2.1"
+version = "1.2.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz",
hash =
"sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size
= 44221, upload-time = "2025-10-26T15:12:10.434Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz",
hash =
"sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size
= 50135, upload-time = "2026-03-01T16:00:26.196Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl",
hash =
"sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size
= 21230, upload-time = "2025-10-26T15:12:09.109Z" },
+ { url =
"https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl",
hash =
"sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size
= 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
[[package]]
@@ -1589,7 +1543,7 @@
[[package]]
name = "sse-starlette"
-version = "3.3.3"
+version = "3.4.3"
source = { editable = "." }
dependencies = [
{ name = "anyio" },
@@ -1601,11 +1555,14 @@
{ name = "daphne" },
]
examples = [
- { name = "aiosqlite" },
{ name = "fastapi" },
- { name = "sqlalchemy", extra = ["asyncio"] },
+ { name = "pydantic" },
{ name = "uvicorn" },
]
+examples-db = [
+ { name = "aiosqlite" },
+ { name = "sqlalchemy", extra = ["asyncio"] },
+]
granian = [
{ name = "granian" },
]
@@ -1616,56 +1573,55 @@
[package.dev-dependencies]
dev = [
{ name = "asgi-lifespan" },
- { name = "async-timeout" },
- { name = "build" },
{ name = "httpx" },
- { name = "portend" },
{ name = "pre-commit" },
- { name = "psutil" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-cov" },
{ name = "ruff" },
- { name = "starlette" },
- { name = "tenacity" },
{ name = "testcontainers" },
{ name = "ty" },
{ name = "uvicorn" },
]
+experimentation = [
+ { name = "portend" },
+ { name = "psutil" },
+ { name = "tenacity" },
+]
[package.metadata]
requires-dist = [
- { name = "aiosqlite", marker = "extra == 'examples'", specifier =
">=0.21.0" },
+ { name = "aiosqlite", marker = "extra == 'examples-db'", specifier =
">=0.21.0" },
{ name = "anyio", specifier = ">=4.7.0" },
{ name = "daphne", marker = "extra == 'daphne'", specifier = ">=4.2.0" },
{ name = "fastapi", marker = "extra == 'examples'", specifier =
">=0.115.12" },
{ name = "granian", marker = "extra == 'granian'", specifier = ">=2.3.1" },
- { name = "sqlalchemy", extras = ["asyncio"], marker = "extra ==
'examples'", specifier = ">=2.0.41" },
+ { name = "pydantic", marker = "extra == 'examples'", specifier = ">=2" },
+ { name = "sqlalchemy", extras = ["asyncio"], marker = "extra ==
'examples-db'", specifier = ">=2.0.41" },
{ name = "starlette", specifier = ">=0.49.1" },
{ name = "uvicorn", marker = "extra == 'examples'", specifier = ">=0.34.0"
},
{ name = "uvicorn", marker = "extra == 'uvicorn'", specifier = ">=0.34.0"
},
]
-provides-extras = ["examples", "uvicorn", "granian", "daphne"]
+provides-extras = ["examples", "examples-db", "uvicorn", "granian", "daphne"]
[package.metadata.requires-dev]
dev = [
{ name = "asgi-lifespan", specifier = ">=2.1.0" },
- { name = "async-timeout", specifier = ">=5.0.1" },
- { name = "build", specifier = ">=1.4.0" },
{ name = "httpx", specifier = ">=0.28.1" },
- { name = "portend", specifier = ">=3.2.1" },
{ name = "pre-commit", specifier = ">=4.5.0" },
- { name = "psutil", specifier = ">=7.0.0" },
{ name = "pytest", specifier = ">=8.3.4" },
{ name = "pytest-asyncio", specifier = ">=0.25.0" },
{ name = "pytest-cov", specifier = ">=6.0.0" },
{ name = "ruff", specifier = ">=0.14.0" },
- { name = "starlette", specifier = ">=0.49.1" },
- { name = "tenacity", specifier = ">=9.0.0" },
{ name = "testcontainers", specifier = ">=4.9.0" },
{ name = "ty", specifier = ">=0.0.19" },
{ name = "uvicorn", specifier = ">=0.34.0" },
]
+experimentation = [
+ { name = "portend", specifier = ">=3.2.1" },
+ { name = "psutil", specifier = ">=7.0.0" },
+ { name = "tenacity", specifier = ">=9.0.0" },
+]
[[package]]
name = "starlette"
@@ -1957,11 +1913,11 @@
[[package]]
name = "urllib3"
-version = "2.6.3"
+version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz",
hash =
"sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size
= 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz",
hash =
"sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size
= 433602, upload-time = "2026-05-07T16:13:18.596Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl",
hash =
"sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size
= 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+ { url =
"https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl",
hash =
"sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size
= 131087, upload-time = "2026-05-07T16:13:17.151Z" },
]
[[package]]
@@ -2087,15 +2043,6 @@
]
[[package]]
-name = "zipp"
-version = "3.23.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz",
hash =
"sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size
= 25547, upload-time = "2025-06-08T17:06:39.4Z" }
-wheels = [
- { url =
"https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl",
hash =
"sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size
= 10276, upload-time = "2025-06-08T17:06:38.034Z" },
-]
-
-[[package]]
name = "zope-interface"
version = "8.1.1"
source = { registry = "https://pypi.org/simple" }