Commit Graph

1458 Commits

Author SHA1 Message Date
Marcelo Trylesinski
0f274d2a4e Refine thread worker heartbeat handling 2026-04-12 17:11:40 +02:00
Marcelo Trylesinski
7e901a0d2b Document free-threaded runtime detection 2026-04-12 16:36:23 +02:00
Marcelo Trylesinski
eea9b41c99 Add free-threaded thread worker class 2026-04-12 16:21:59 +02:00
Marcelo Trylesinski
12b823eb8a
Bump locked dependencies (#2894) 2026-04-08 09:35:01 +00:00
Marcelo Trylesinski
1f2abe357a
Add Cloudflare Pages docs preview on pull requests (#2893) 2026-04-07 14:51:52 +00:00
Marcelo Trylesinski
edb54c43c0
Version 0.44.0 (#2890) 2026-04-06 11:21:24 +02:00
Marcelo Trylesinski
029be08867
Implement websocket keepalive pings for websockets-sansio (#2888) 2026-04-06 07:52:58 +00:00
Marcelo Trylesinski
8d397c7319
Version 0.43.0 (#2885) 2026-04-03 18:33:18 +00:00
Sebastián Ramírez
587042d68f
🐛 Emit http.disconnect ASGI receive() event on server shutting down for streaming responses (#2829) 2026-04-03 14:23:03 +00:00
dependabot[bot]
c9a75fb67b
chore(deps): bump the github-actions group with 3 updates (#2878) 2026-04-01 04:30:52 -04:00
dependabot[bot]
84fd578224
chore(deps): bump pygments from 2.19.2 to 2.20.0 (#2877)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-31 09:44:16 -04:00
Harsha Vashisht
cd52d34b55
Use native context parameter for create_task on Python 3.11+ (#2859)
## Summary

Both HTTP protocol implementations (`h11_impl.py` and
`httptools_impl.py`) use
`contextvars.Context().run(loop.create_task, ...)` to start ASGI tasks
with a
fresh context. Python 3.11 added a `context=` parameter to
`create_task()`,
which avoids the extra indirection through `Context.run()`.

This has been a known TODO in the codebase for a while. Under
high-concurrency
workloads, the `Context().run()` wrapper adds a small but measurable
overhead
per request compared to the native kwarg, since it has to set up and
tear down
the context activation around the call.

The change uses `sys.version_info` to branch at runtime — 3.11+ gets the
native
kwarg, older versions keep the existing behavior. Coverage pragmas
follow the
existing convention in `_types.py` (`py-lt-311` / `py-gte-311` on the
branch
lines).

---------

Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
2026-03-28 11:45:30 +00:00
Marcelo Trylesinski
5211880320
Drop cast in ASGI types (#2875) 2026-03-28 11:20:47 +01:00
Marcelo Trylesinski
1cb8e747e2
Add websocket 500 fallback header test (#2874)
## Summary
- extend the invalid websocket HTTP response regression test
- assert the 500 fallback includes content-length and connection headers

## Testing
- uv run pytest tests/protocols/test_websocket.py -k invalid_status -q
2026-03-28 10:09:29 +00:00
dependabot[bot]
28efbb24bd
chore(deps-dev): bump cryptography from 46.0.5 to 46.0.6 (#2873)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5
to 46.0.6.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.6 - 2026-03-25</p>
<pre><code>
* **SECURITY ISSUE**: Fixed a bug where name constraints were not
applied
  to peer names during verification when the leaf certificate contains a
wildcard DNS SAN. Ordinary X.509 topologies are not affected by this
bug,
including those used by the Web PKI. Credit to **Oleh Konko (1seal)**
for
  reporting the issue. **CVE-2026-34073**
<p>.. _v46-0-5:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="91d728897b"><code>91d7288</code></a>
Cherry-pick <a
href="https://redirect.github.com/pyca/cryptography/issues/14542">#14542</a>
(<a
href="https://redirect.github.com/pyca/cryptography/issues/14543">#14543</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.5...46.0.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=uv&previous-version=46.0.5&new-version=46.0.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/Kludex/uvicorn/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-28 11:03:41 +01:00
Marcelo Trylesinski
042ffeb7d6
ci: add zizmor (#2872) 2026-03-28 09:39:39 +00:00
dependabot[bot]
c61f9d4ebd
chore(deps): bump requests from 2.32.5 to 2.33.0 (#2871)
Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.5...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 08:42:53 +01:00
Marcelo Trylesinski
02bed6f8c3
Version 0.42.0 (#2852)
* Version 0.42.0

* Remove benchmark entries from release notes

* Remove docs entry from release notes
2026-03-16 06:11:15 +00:00
Marcelo Trylesinski
d8f2501316
chore: pre-create Config objects in benchmarks to measure protocol hot paths (#2851)
Config.__init__ calls dictConfig() on every construction, which
dominated benchmark time (~70% for httptools). Pre-creating configs
at module level removes this setup noise so CodSpeed measures the
actual protocol work.
2026-03-16 05:12:05 +01:00
Marcelo Trylesinski
9dbb7836bb
Add WebSocket protocol benchmarks for wsproto and websockets-sansio (#2849)
Benchmark handshake and text frame sending using the same mock
transport approach as HTTP benchmarks. The legacy websockets
implementation is excluded as it manages its own internal tasks.
2026-03-15 17:07:06 +00:00
Marcelo Trylesinski
b3c69da8c1
Use bytearray for request body accumulation (#2845)
* Use bytearray for request body accumulation

Accumulating request body with bytes += creates a new bytes object on
every chunk, leading to O(n^2) allocation for fragmented bodies.
bytearray extends in-place (amortized O(1)), avoiding the quadratic cost.

* Add fragmented body benchmark for chunked body accumulation

Sends 100KB in 390 x 256-byte chunks to exercise the body += path
that triggers O(n^2) allocation with bytes concatenation.

* Revert "Add fragmented body benchmark for chunked body accumulation"

This reverts commit 47662509c1.
2026-03-15 17:16:56 +01:00
Marcelo Trylesinski
3f3ebee20f
Disable pytest-xdist for CodSpeed benchmark runs (#2847)
CodSpeed instrumentation does not work with parallel test execution.
Pass -n 0 to disable xdist workers.
2026-03-15 16:10:36 +00:00
Marcelo Trylesinski
d072de754f
Add fragmented body benchmark for chunked body accumulation (#2846)
Sends 100KB in 390 x 256-byte chunks to exercise the body += path
that triggers O(n^2) allocation with bytes concatenation.
2026-03-15 16:01:51 +00:00
Marcelo Trylesinski
e300c2c75d
Add CodSpeed benchmark suite for HTTP protocol hot paths (#2844)
* Add CodSpeed benchmark suite for HTTP protocol hot paths

* Suppress mypy operator error on ASGI message body concatenation

* Use OIDC token and pin CodSpeed action to latest commit
2026-03-15 15:37:09 +00:00
Kadir Can Ozden
1fa697651b
Escape brackets and backslash in httptools HEADER_RE regex (#2824)
* Fix broken HEADER_RE regex in httptools HTTP implementation

The character class in HEADER_RE has unescaped [ and ] which causes
the regex to be parsed incorrectly. The ] prematurely closes the
character class after ':', so the remaining characters '={} \t"'
are treated as a literal sequence rather than part of the class.

As a result the regex never matches any invalid header name character
and the validation at line 496 is completely non-functional.

This escapes the brackets and backslash properly inside the
character class so all RFC 7230 header name separators are caught.

* Add tests for invalid HTTP header name validation

* Add comment explaining why no 500 is sent on invalid header name

* Use backticks around response_started in comment

---------

Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
2026-03-15 14:00:30 +00:00
Kadir Can Ozden
59ec1de7a4
Fix multiple issues in websockets sansio implementation (#2825) 2026-03-15 11:22:13 +01:00
Marcelo Trylesinski
2fc0efcdd9
Clarify Windows asyncio event loop selection in docs (#2843)
* Fix Windows event loop docs

* Clarify Windows event loop docs note
2026-03-14 10:07:39 +00:00
dependabot[bot]
c825f4eb6e
chore(deps): bump the github-actions group with 3 updates (#2831)
Bumps the github-actions group with 3 updates: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `astral-sh/setup-uv` from 7.3.0 to 7.3.1
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](eac588ad8d...5a095e7a20)

Updates `actions/upload-artifact` from 6.0.0 to 7.0.0
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](b7c566a772...bbbca2ddaa)

Updates `actions/download-artifact` from 7.0.0 to 8.0.0
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](37930b1c2a...70fc10c6e5)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/download-artifact
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-01 07:54:55 +01:00
dependabot[bot]
38731c31d1
chore(deps): bump the github-actions group with 2 updates (#2827)
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `actions/checkout` from 6.0.1 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e8c483db8...de0fac2e45)

Updates `astral-sh/setup-uv` from 7.1.6 to 7.3.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](681c641aba...eac588ad8d)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-22 13:57:51 +01:00
Marcelo Trylesinski
9283c0f15c
Version 0.41.0 (#2821)
* Version 0.41.0

* Add #2776 to release notes
2026-02-16 22:33:52 +00:00
Jonas Haag
a01a33eb8f
Add --limit-max-requests-jitter to stagger worker restarts (#2707)
* feat: max_requests_jitter

* format

* type check

* Fix test

* Add type annotation for `Server.limit_max_requests`

Mypy infers `int` from the first branch and errors on the `None`
assignment in the else branch.

* Use `cached_property` for `Server.limit_max_requests`

Keeps `__init__` clean by moving the jitter computation out.

* Document `--limit-max-requests-jitter` setting

---------

Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
2026-02-15 20:52:08 +00:00
Marcelo Trylesinski
2ce65bde15
Ignore permission denied errors in watchfiles reloader (#2817)
Pass `ignore_permission_denied=True` to `watchfiles.watch()` so
that directories the process cannot access are silently skipped
instead of crashing the reloader.

Bump the minimum watchfiles version to 0.20, which is the release
that introduced the `ignore_permission_denied` parameter.

Closes #1785
2026-02-15 19:49:07 +00:00
Marcelo Trylesinski
654f2ed7d7
Ensure lifespan shutdown runs when should_exit is set during startup (#2812) 2026-02-15 19:02:12 +00:00
Shahar Evron
a03d9f6f0e
Reduce the log level of 'request limit exceeded' messages (#2788)
Co-authored-by: Shahar Evron <shahar@DS-shahar-MBP.local>
2026-02-15 18:40:14 +00:00
Marcelo Trylesinski
e377de40d0
Add socket path to scope["server"] (#2561)
* Add socket path to scope["server"]

* fix lint

* Address review feedback and update sansio protocol

- Use `if` instead of `elif` after early returns in `get_local_addr`
- Update `server` type in `WebSocketsSansIOProtocol` to support UDS
- Add missing test case for full coverage
2026-02-15 18:34:14 +00:00
Marcelo Trylesinski
0779f7f8a4
Poll for readiness in test_multiprocess_health_check and run_server (#2816)
* Poll for readiness in `test_multiprocess_health_check` and `run_server`

Apply the same polling pattern to `test_multiprocess_health_check` — wait
for all processes to be alive instead of a fixed 1s sleep.

In `run_server`, wait for `server.started` instead of a fixed 0.1s sleep
to avoid connection races on slow setups (e.g. free-threaded Python 3.14).

* Avoid uncovered branch in health check polling loop

* Add pragma: no cover to health check polling loop body
2026-02-15 18:23:26 +00:00
Marcelo Trylesinski
7e9ce2c974
Poll for PID changes in test_multiprocess_sighup instead of fixed sleep (#2815)
The 1-second sleep wasn't always enough for the supervisor to pick up the
signal and complete `restart_all()`, causing flaky failures on macOS 3.14.
2026-02-15 18:12:12 +00:00
Erik Wienhold
99f0d8734d
Fix grep warning in scripts/sync-version (#2807)
Extended regular expressions (enabled via flag -E) don't support
non-capturing groups under POSIX.  Get rid of them as they don't add any
value since we don't handle the captured groups in the first place.
2026-02-15 18:01:40 +00:00
dependabot[bot]
7ae2e6375a
chore(deps): bump the python-packages group with 18 updates (#2801)
* chore(deps): bump the python-packages group with 18 updates

Bumps the python-packages group with 18 updates:

| Package | From | To |
| --- | --- | --- |
| [click](https://github.com/pallets/click) | `8.3.0` | `8.3.1` |
| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.1.1` | `1.2.1` |
| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.0` | `1.1.1` |
| [websockets](https://github.com/python-websockets/websockets) | `13.1` | `16.0` |
| [ruff](https://github.com/astral-sh/ruff) | `0.11.9` | `0.14.14` |
| [pytest](https://github.com/pytest-dev/pytest) | `8.3.5` | `9.0.2` |
| [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.14.0` | `3.15.1` |
| [pytest-xdist[psutil]](https://github.com/pytest-dev/pytest-xdist) | `3.6.1` | `3.8.0` |
| [mypy](https://github.com/python/mypy) | `1.15.0` | `1.19.1` |
| [types-pyyaml](https://github.com/typeshed-internal/stub_uploader) | `6.0.12.20250402` | `6.0.12.20250915` |
| [cryptography](https://github.com/pyca/cryptography) | `46.0.3` | `46.0.4` |
| [coverage](https://github.com/coveragepy/coveragepy) | `7.8.0` | `7.13.2` |
| [twine](https://github.com/pypa/twine) | `6.1.0` | `6.2.0` |
| [a2wsgi](https://github.com/abersheeran/a2wsgi) | `1.10.8` | `1.10.10` |
| [wsproto](https://github.com/python-hyper/wsproto) | `1.2.0` | `1.3.2` |
| [mkdocs-material](https://github.com/squidfunk/mkdocs-material) | `9.6.21` | `9.7.1` |
| [mkdocstrings-python](https://github.com/mkdocstrings/python) | `1.18.2` | `2.0.1` |
| [mkdocs-llmstxt](https://github.com/pawamoy/mkdocs-llmstxt) | `0.4.0` | `0.5.0` |


Updates `click` from 8.3.0 to 8.3.1
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.3.0...8.3.1)

Updates `python-dotenv` from 1.1.1 to 1.2.1
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v1.1.1...v1.2.1)

Updates `watchfiles` from 1.1.0 to 1.1.1
- [Release notes](https://github.com/samuelcolvin/watchfiles/releases)
- [Commits](https://github.com/samuelcolvin/watchfiles/compare/v1.1.0...v1.1.1)

Updates `websockets` from 13.1 to 16.0
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/13.1...16.0)

Updates `ruff` from 0.11.9 to 0.14.14
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.9...0.14.14)

Updates `pytest` from 8.3.5 to 9.0.2
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.5...9.0.2)

Updates `pytest-mock` from 3.14.0 to 3.15.1
- [Release notes](https://github.com/pytest-dev/pytest-mock/releases)
- [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-mock/compare/v3.14.0...v3.15.1)

Updates `pytest-xdist[psutil]` from 3.6.1 to 3.8.0
- [Release notes](https://github.com/pytest-dev/pytest-xdist/releases)
- [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.6.1...v3.8.0)

Updates `mypy` from 1.15.0 to 1.19.1
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.15.0...v1.19.1)

Updates `types-pyyaml` from 6.0.12.20250402 to 6.0.12.20250915
- [Commits](https://github.com/typeshed-internal/stub_uploader/commits)

Updates `cryptography` from 46.0.3 to 46.0.4
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.3...46.0.4)

Updates `coverage` from 7.8.0 to 7.13.2
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.8.0...7.13.2)

Updates `twine` from 6.1.0 to 6.2.0
- [Release notes](https://github.com/pypa/twine/releases)
- [Changelog](https://github.com/pypa/twine/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pypa/twine/compare/6.1.0...6.2.0)

Updates `a2wsgi` from 1.10.8 to 1.10.10
- [Commits](https://github.com/abersheeran/a2wsgi/compare/v1.10.8...v1.10.10)

Updates `wsproto` from 1.2.0 to 1.3.2
- [Changelog](https://github.com/python-hyper/wsproto/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/python-hyper/wsproto/compare/1.2.0...1.3.2)

Updates `mkdocs-material` from 9.6.21 to 9.7.1
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.21...9.7.1)

Updates `mkdocstrings-python` from 1.18.2 to 2.0.1
- [Release notes](https://github.com/mkdocstrings/python/releases)
- [Changelog](https://github.com/mkdocstrings/python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mkdocstrings/python/compare/1.18.2...2.0.1)

Updates `mkdocs-llmstxt` from 0.4.0 to 0.5.0
- [Release notes](https://github.com/pawamoy/mkdocs-llmstxt/releases)
- [Changelog](https://github.com/pawamoy/mkdocs-llmstxt/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pawamoy/mkdocs-llmstxt/compare/0.4.0...0.5.0)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: python-dotenv
  dependency-version: 1.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: watchfiles
  dependency-version: 1.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: websockets
  dependency-version: '16.0'
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: python-packages
- dependency-name: ruff
  dependency-version: 0.14.14
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: pytest
  dependency-version: 9.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: python-packages
- dependency-name: pytest-mock
  dependency-version: 3.15.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: pytest-xdist[psutil]
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: mypy
  dependency-version: 1.19.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: types-pyyaml
  dependency-version: 6.0.12.20250915
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: cryptography
  dependency-version: 46.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: coverage
  dependency-version: 7.13.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: twine
  dependency-version: 6.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: a2wsgi
  dependency-version: 1.10.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: wsproto
  dependency-version: 1.3.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: mkdocs-material
  dependency-version: 9.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
- dependency-name: mkdocstrings-python
  dependency-version: 2.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: python-packages
- dependency-name: mkdocs-llmstxt
  dependency-version: 0.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-packages
...

Signed-off-by: dependabot[bot] <support@github.com>

* Keep websockets pinned at 13.1, remove stale type: ignore comments

websockets 16.0 has breaking API changes (removed legacy module
from type stubs, renamed exceptions) that require a separate
migration effort. Keep it at 13.1 for now.

The two removed `type: ignore` comments became unused with mypy 1.19.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
2026-02-15 17:53:17 +00:00
dependabot[bot]
4532a39a67
chore(deps-dev): bump cryptography from 46.0.3 to 46.0.5 (#2814)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.3 to 46.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.3...46.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-15 14:33:36 +00:00
dependabot[bot]
4aff1b95f4
chore(deps): bump urllib3 from 2.5.0 to 2.6.3 (#2803)
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.3.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.5.0...2.6.3)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.6.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-15 14:28:38 +00:00
Fardin Alizadeh
a148fc5a71
fix typos (#2800) 2026-02-02 10:33:31 +00:00
Irfanuddin Shafi Ahmed
422ce367ae
Update sdist include list in pyproject.toml (#2802)
Removed requirements.txt from the sdist include list as the project no longer uses it
2026-02-02 11:29:12 +01:00
dependabot[bot]
918dae6ef9
chore(deps): bump the github-actions group with 4 updates (#2779)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 09:09:13 +01:00
t-kawasumi
ae56d07af7
Fix typo: error_occured -> error_occurred (#2776) 2025-12-25 09:26:05 +01:00
Marcelo Trylesinski
9ff60042a5
Version 0.40.0 (#2773) 2025-12-21 14:04:42 +00:00
Marcelo Trylesinski
19df042c54
Drop Python 3.9 (#2772) 2025-12-21 14:56:01 +01:00
Marcelo Trylesinski
865ce7c0b4
Run strict mypy on test suite (#2771) 2025-12-21 13:35:00 +00:00
Marcelo Trylesinski
4f40b84957
Version 0.39.0 (#2770) 2025-12-21 12:49:56 +01:00
Marcelo Trylesinski
5692dfc416
fix(websockets): Send close frame on ASGI return (#2769) 2025-12-21 12:23:26 +01:00