deps(python): bump the python group in /backend with 10 updates
Bumps the python group in /backend with 10 updates:
| Package | From | To |
|---|---|---|
| aiohttp | 3.14.4 | 3.14.5 |
| fastapi | 0.143.0 | 0.143.2 |
| multidict | 6.9.1 | 7.1.0 |
| pymongo | 4.18.3 | 4.19.0 |
| starlette | 1.7.0 | 1.8.0 |
| wrapt | 2.5.0 | 2.5.1 |
| pluggy | 1.6.0 | 1.7.0 |
| pytest-env | 1.7.1 | 1.8.0 |
| ruff | 0.17.0 | 0.17.1 |
| pipdeptree | 4.2.6 | 4.2.8 |
Updates aiohttp from 3.14.4 to 3.14.5
Updates fastapi from 0.143.0 to 0.143.2
Release notes
Sourced from fastapi's releases.
0.143.2
Fixes
- 🐛 Fix blocking frontend fallback file checks. PR #16503 by
@tiangolo.Translations
- 🌐 Update translations for zh-hant (update-outdated). PR #16500 by
@pr-submit[bot].- 🌐 Update translations for ja (update-outdated). PR #16499 by
@pr-submit[bot].- 🌐 Update translations for zh (update-outdated). PR #16501 by
@pr-submit[bot].- 🌐 Update translations for hi (update-outdated). PR #16498 by
@pr-submit[bot].- 🌐 Update translations for es (update-outdated). PR #16497 by
@pr-submit[bot].- 🌐 Update translations for fr (update-outdated). PR #16495 by
@pr-submit[bot].- 🌐 Update translations for ko (update-outdated). PR #16496 by
@pr-submit[bot].- 🌐 Update translations for de (update-outdated). PR #16493 by
@pr-submit[bot].- 🌐 Update translations for uk (update-outdated). PR #16494 by
@pr-submit[bot].- 🌐 Update translations for tr (update-outdated). PR #16490 by
@pr-submit[bot].- 🌐 Update translations for pt (update-outdated). PR #16491 by
@pr-submit[bot].- 🌐 Update translations for ru (update-outdated). PR #16492 by
@pr-submit[bot].Internal
- ⬆ Bump pydantic-ai-slim from 2.49.0 to 2.53.0. PR #16487 by
@dependabot[bot].- ⬆ Bump werkzeug from 3.1.6 to 3.1.9. PR #16464 by
@dependabot[bot].0.143.1
Fixes
- 🐛 Fix included route metadata in
iter_route_contexts(). PR #16484 by@tiangolo.
Commits
ba24dc3🔖 Release version 0.143.2 (#16504)98050ee📝 Update release notesd0282a3🐛 Fix blocking frontend fallback file checks (#16503)db04f5b📝 Update release notesfd0614c🌐 Update translations for zh-hant (update-outdated) (#16500)0c83cfa📝 Update release notes6955ff7🌐 Update translations for ja (update-outdated) (#16499)aa1c3ba📝 Update release notesf6f33b2🌐 Update translations for zh (update-outdated) (#16501)0474a7e📝 Update release notes- Additional commits viewable in compare view
Updates multidict from 6.9.1 to 7.1.0
Release notes
Sourced from multidict's releases.
7.1.0 is a correctness and housekeeping release. It changes what
keys()yields, fixes a long list of crashes and inconsistencies that Python code run in the middle of an operation could trigger, stores the common all-strmultidicts in half the space, and deprecatesmultidict.upstr.Behaviour changes.
keys()and iteration over a multidict yield each key once, as spelled in its first item, solen(d.keys())counts distinct keys;items(),values()andlen(d)still see every item. Astrsubclass's ownlower()is no longer called to compute the case-insensitive identity of aCIMultiDictkey.Robustness. Finalizers,
__eq__(),__repr__(),lower()and argument iterators that read or mutate the multidict in the middle of__init__(),update(),merge(),del d[key],popall(),popitem(),to_dict()orrepr()no longer crash the C extension, lose or duplicate pairs, or make the two backends disagree. Two data races against lock-free readers on the free-threaded build are gone too.Memory. A
MultiDictwhose keys are all exactstr, and aCIMultiDictwhose keys are all exactistr, are stored in a compact table without a separate identity and hash per entry, which cuts their size by about 45%.Bug fixes
Fixed building the C extension on platforms where
charis unsigned, such as ARM, PowerPC, s390x and RISC-V, and with GCC 9, which flags CPython's own headers from 3.12 on; both failed on a sign conversion warning since-Wconversiontook effect. GCC 9 builds the extension without-Wconversion-- by@asvetlov.Fixed
getversion()returning only the low 32 bits of the version on Windows and on 32-bit platforms, where two different versions could compare equal, and fixed a race in the pure-Python implementation on GIL builds that could give two multidicts mutated at the same time from different threads the same version -- by@asvetlov.
... (truncated)
Changelog
Sourced from multidict's changelog.
7.1.0
(2026-10-08)
7.1.0 is a correctness and housekeeping release. It changes what :meth:
~multidict.MultiDict.keysyields, fixes a long list of crashes and inconsistencies that Python code run in the middle of an operation could trigger, stores the common all-:class:strmultidicts in half the space, and deprecatesmultidict.upstr.Behaviour changes. :meth:
~multidict.MultiDict.keysand iteration over a multidict yield each key once, as spelled in its first item, solen(d.keys())counts distinct keys; :meth:~multidict.MultiDict.items, :meth:~multidict.MultiDict.valuesandlen(d)still see every item. A :class:strsubclass's ownlower()is no longer called to compute the case-insensitive identity of a :class:~multidict.CIMultiDictkey.Robustness. Finalizers,
__eq__(),__repr__(),lower()and argument iterators that read or mutate the multidict in the middle of__init__(),update(),merge(),del d[key], :meth:~multidict.MultiDict.popall, :meth:~multidict.MultiDict.popitem, :meth:~multidict.MultiDict.to_dictor :func:reprno longer crash the C extension, lose or duplicate pairs, or make the two backends disagree. Two data races against lock-free readers on the free-threaded build are gone too.Memory. A :class:
~multidict.MultiDictwhose keys are all exact :class:str, and a :class:~multidict.CIMultiDictwhose keys are all exact :class:~multidict.istr, are stored in a compact table without a separate identity and hash per entry, which cuts their size by about 45%.Bug fixes
Fixed building the C extension on platforms where
charis unsigned, such as ARM, PowerPC, s390x and RISC-V, and with GCC 9, which flags CPython's own headers from 3.12 on; both failed on a sign conversion warning since-Wconversiontook effect. GCC 9 builds the extension without-Wconversion-- by :user:asvetlov.Related issues and pull requests on GitHub: :issue:
1759, :issue:1760.Fixed :func:
~multidict.getversionreturning only the low 32 bits of the version on Windows and on 32-bit platforms, where two different versions could compare equal, and fixed a race in the pure-Python implementation on GIL builds that could give two multidicts mutated at the same time from different threads the same version
... (truncated)
Commits
709f260Trim the test run of the emulated wheel jobs (#1762)dbc3abaBuild(deps): Bump pypa/cibuildwheel from 4.2.1 to 4.3.0 (#1761)ef68371Build without -Wconversion on GCC 9 (#1760)e812c4fFix the C extension build where char is unsigned (#1759)f9459a1Release 7.1.0 (#1758)45552bdFold the hash chain walk into _md_update() (#1757)84c5412Move to_dict() into to_dict.h and mark only later duplicates (#1756)cfd8ea2Reserve room for update() and merge() only when keys are added (#1755)fb828e3Prefix header-local helpers with an underscore (#1753)3c3fc84Move istr_canonical() into istr_object.h (#1754)- Additional commits viewable in compare view
Updates pymongo from 4.18.3 to 4.19.0
Release notes
Sourced from pymongo's releases.
PyMongo 4.19.0
Release notes: https://jira.mongodb.org/secure/ReleaseNote.jspa?projectId=10004&version=52147
Changelog
Sourced from pymongo's changelog.
Changes in Version 4.19.0 (2026/10/14)
PyMongo 4.19 brings a number of changes including:
.. warning:: PyMongo 4.19 drops support for Python 3.9 and 3.10 and removes PyPy support: Python 3.11+ is now required.
- Added support for Python 3.15.
- Dropped support for Python 3.9 and 3.10.
- Removed support for PyPy.
- Removed the deprecated
Algorithm.RANGEPREVIEWandQueryType.RANGEPREVIEWmembers (PYTHON-6009_).- Added support for running the synchronous and asynchronous clients in subinterpreters, including inside
concurrent.futures.InterpreterPoolExecutor(Python 3.14+). Only in subinterpreters, which do not allow daemon threads, the synchronous client's monitor threads now start as non-daemon threads and are stopped and joined when the interpreter is torn down. Monitor threads in the main interpreter remain daemon threads and shutdown behavior is unchanged. Note that because these threads are non-daemon, a subinterpreter may block on teardown until any in-flight monitor work completes.- Added support for routing Key Management Service (KMS) requests for Client-Side Field Level Encryption and Queryable Encryption through an HTTP proxy, using the new
kms_connect_callbackoption on :class:~pymongo.encryption_options.AutoEncryptionOpts, :class:~pymongo.encryption.ClientEncryption, and :class:~pymongo.asynchronous.encryption.AsyncClientEncryption. The callback opens the connection and the driver performs the KMS TLS handshake over it, so verification still targets the KMS host rather than the proxy. For an ordinary HTTP proxy, pass :class:~pymongo.encryption_options.HTTPProxyKMSConnector :class:~pymongo.encryption_options.AsyncHTTPProxyKMSConnectinstead of writing a callback. Both helpers accept customCONNECTheaders, e.g.Proxy-Authorizationfor proxies that require authentication.- Added the
srv_host_validatorkeyword argument to :class:~pymongo.synchronous.mongo_client.MongoClientand :class:~pymongo.asynchronous.mongo_client.AsyncMongoClient, an alternative tosrvAllowedHostsSuffixfor deployments whose acceptable SRV hosts cannot be expressed as a single suffix. The callback is invoked once per SRV-returned host and must return a boolean:Trueto accept the host andFalseto reject it. During initial DNS discovery a non-boolean return raises an error; during SRV polling it is treated as a rejection. It is mutually exclusive withsrvAllowedHostsSuffixand, because it takes a callable, cannot be set in a connection string. See the :class:~pymongo.synchronous.mongo_client.MongoClientand :class:~pymongo.asynchronous.mongo_client.AsyncMongoClientdocumentation for security considerations.srvAllowedHostsSuffixmay now be set to a single label reserved for private or special use, such aslocalhost,test, orinternal.
... (truncated)
Commits
a58b4f4Prep 4.19 Release (#3122)3242611PYTHON-6147 Add CSFLE HTTP proxy KMS connect helpers (#3101)b5a7f26PYTHON-6009 Remove deprecated Algorithm.RANGEPREVIEW and QueryType.RANGEPREVI...f3f19dfPYTHON-6170 [BF] AWS ECS test container cannot install uv (#3120)a740cdfPYTHON-6063 Remove PyPy support (#3119)ed74401PYTHON-6138 followup -- Drop Python 3.9 and 3.10 Support (#3118)e0b11bfPYTHON-6163 Pure-Python decode_all silently accepts 1-byte invalid BSON (#3117)b5a36ccPYTHON-6111 C extension accepts BSON documents where element data overlaps th...1f64ecdPYTHON-6158 Clean up version-gated code paths (#3112)0cc64d6PYTHON-6161 Fix mod_wsgi CI: run apt-get update before install (#3115)- Additional commits viewable in compare view
Updates starlette from 1.7.0 to 1.8.0
Release notes
Sourced from starlette's releases.
Version 1.8.0
This release adds HTTP 103 Early Hints, preserves response trailers through
GZipMiddleware, and stopsFileResponsetransfers when clients disconnect. Starlette now requires Python 3.11.Added
- Add
Request.send_early_hints()for HTTP 103 Early Hints through the ASGIhttp.response.early_hintextension #3435.Changed
- Require Python 3.11 or later, dropping support for Python 3.10 #3592.
- Exclude native gRPC media types (
application/grpcandapplication/grpc+...) fromGZipMiddlewarecompression by default #3565.- Send
http.response.startimmediately inGZipMiddlewarefor responses with an existingContent-Encoding, status206, or an excluded content type, instead of waiting for the first body chunk #3631.- Resolve the multipart charset once per request instead of once per field #3618.
Fixed
- Preserve response trailers through
GZipMiddleware#3565.- Stop
FileResponsetransfers when the client disconnects #3523.- Stop multipart range responses when the file ends before a range is complete, instead of looping forever #3583.
- Ignore
RangewhenIf-Rangecontains a weak ETag #3567.- Include
Allow: GET, HEADinStaticFiles405responses #3640.- Close
Request.stream()generators deterministically, avoiding "Exception ignored" errors with stackedBaseHTTPMiddleware#3628.- Add
Vary: CookiewhenSession.pop()removes an existing key #3186.- Emit
Max-Age=0on the session cookie whenSessionMiddlewareusesmax_age=0#3651.- Bracket IPv6 hostnames in
URL.replace()#3617.Full changelog: 1.7.0...1.8.0
Changelog
Sourced from starlette's changelog.
1.8.0 (October 13, 2026)
This release drops Python 3.10 support and adds HTTP 103 Early Hints.
Added
- Add
Request.send_early_hints()for HTTP 103 Early Hints through the ASGIhttp.response.early_hintextension #3435.Changed
- Require Python 3.11 or later, dropping support for Python 3.10 #3592.
- Exclude native gRPC media types (
application/grpcandapplication/grpc+...) fromGZipMiddlewarecompression by default #3565.- Send
http.response.startimmediately inGZipMiddlewarefor responses with an existingContent-Encoding, status206, or an excluded content type, instead of waiting for the first body chunk #3631.- Resolve the multipart charset once per request instead of once per field #3618.
Fixed
- Preserve response trailers through
GZipMiddleware#3565.- Stop
FileResponsetransfers when the client disconnects #3523.- Stop multipart range responses when the file ends before a range is complete, instead of looping forever #3583.
- Ignore
RangewhenIf-Rangecontains a weak ETag #3567.- Include
Allow: GET, HEADinStaticFiles405responses #3640.- Close
Request.stream()generators deterministically, avoiding "Exception ignored" errors with stackedBaseHTTPMiddleware#3628.- Add
Vary: CookiewhenSession.pop()removes an existing key #3186.- Emit
Max-Age=0on the session cookie whenSessionMiddlewareusesmax_age=0#3651.- Bracket IPv6 hostnames in
URL.replace()#3617.
Commits
7b2948fVersion 1.8.0 (#3660)5b544ceSend response start immediately when GZipMiddleware cannot compress (#3631)96d5023EmitMax-Age=0on session cookie whenmax_age=0(#3651)0a15da3Include allowed methods in StaticFiles 405 responses (#3640)ff5b4dfCloseRequest.stream()generators withaclosing(#3628)7cb2f09Mark sessions as accessed when popping existing keys (#3186)c67ca4eAdd HTTP 103 Early Hints support (#3435)04741d0Update broken external documentation links (#3621)470f986Correct the documented WebSocket and Request constructor signatures (#3580)b2e8750Bracket IPv6 hostnames inURL.replace()(#3617)- Additional commits viewable in compare view
Updates wrapt from 2.5.0 to 2.5.1
Release notes
Sourced from wrapt's releases.
wrapt 2.5.1
Full release notes: https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1
Install from PyPi (recommended):
pip install wrapt==2.5.1PyPi uploads follow each GitHub release; if
pipreports the version is unavailable, the matching PyPi upload may not have happened yet.Pre-built wheels are provided for a range of Python versions and platforms (Linux x86_64/aarch64/riscv64, macOS x86_64 and arm64, Windows x86_64 and arm64, plus PyPy and free-threaded builds). The source distribution is also attached together with
SHA256SUMSfor verification.wrapt 2.5.1rc1
Release candidate. Release notes for the upcoming 2.5.1 final (work in progress): https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1
May be installable from PyPi:
pip install wrapt==2.5.1rc1If
pipreports the version is unavailable, this candidate either has not been uploaded yet or is not being published to PyPi. Use the attached wheels or build from the source distribution instead:tar xf wrapt-2.5.1rc1.tar.gz cd wrapt-2.5.1rc1 pip install .
SHA256SUMSis attached for verification of the archives.wrapt 2.5.1.dev1
Development snapshot. Not normally published to PyPi (occasionally uploaded to exercise the release pipeline).
Release notes for the upcoming 2.5.1 final (work in progress): https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1
Platform wheels and the source distribution are attached. To test against your Python install, either grab a matching wheel or build from the source distribution:
pip install wrapt-2.5.1.dev1-<python>-<abi>-<platform>.whlor
... (truncated)
Changelog
Sourced from wrapt's changelog.
Version 2.5.1
Bugs Fixed
A
LazyObjectProxycreated with aninterfaceargument that declared a path-like type, such asos.PathLikeorpathlib.Path, did not define the__fspath__()special method on the class it generated. Becauseos.fspath()looks up__fspath__()on the type of the object, passing such a proxy toos.fspath(), the builtinopen()or other standard library functions accepting paths raisedTypeErrorbefore the factory callable had been invoked to create the wrapped object. The__fspath__()special method is now added when the declared interface provides it, in the same way as is already done for the other special methods looked up on the type, so the first path conversion triggers creation of the wrapped object and succeeds. With thanks to Muneeb Sheikh forpull request [#360](https://github.com/GrahamDumpleton/wrapt/issues/360) <https://github.com/GrahamDumpleton/wrapt/pull/360>_.A callback passed to
wrapt.WeakFunctionProxywhich was callable but evaluated as false, such as an event emitter object which reports its number of subscribers via__len__()and is empty when first created, was passed the underlying weak reference object instead of the proxy when the wrapped function expired. Where the wrapped function was a bound method, such a callback could also be called twice, once each when the instance and the function expired. OnlyNoneis now treated as meaning no callback was supplied, which mirrors the behaviour ofweakref.ref()andweakref.proxy()in the standard library, so these callbacks now receive the proxy and are called only once, as for any other callback. With thanks to Huanyi Xie forpull request [#359](https://github.com/GrahamDumpleton/wrapt/issues/359) <https://github.com/GrahamDumpleton/wrapt/pull/359>_.A
wrapt.AdapterFactoryinstance passed as theadapterargument towrapt.decoratorwas ignored, and so never called, if the instance evaluated as false, such as when the factory class defined__bool__()or__len__(). The decorated function then retained its original signature instead of that produced by the factory. Whether an adapter factory was supplied is now determined by type before the truth value of the adapter is considered, so such factories are always called. As a consequence of this change a factory can now also returnNone, or any other false value, to indicate that no adapter should be used for a particular function, where previously this failed with an obscure error. With thanks to Luochenchen forpull request [#358](https://github.com/GrahamDumpleton/wrapt/issues/358) <https://github.com/GrahamDumpleton/wrapt/pull/358>_ which identified the issue.
Commits
dbbb21fMerge branch 'release/2.5.1'95e2afbDrop the release candidate suffix for the 2.5.1 release.1ed68caUpdate to 2.5.1rc1.77e826dRecognise adapter factories by type so one which evaluates as false is not ig...13efe63Move change note for PR #359 under 2.5.1 and add clarifying comments.6ba6048Reorder fspath handling in lazy proxy and add change note for PR #360.5e97e2dUpdate to 2.5.1.dev1.e9d491cMerge pull request #359 from xiehuanyi/fix-falsey-weak-proxy-callbacks0d6c935Merge pull request #360 from muneikh/fix-lazy-pathlike-interfacede574aaHonor the declared pathlike interface in lazy proxies- Additional commits viewable in compare view
Updates pluggy from 1.6.0 to 1.7.0
Changelog
Sourced from pluggy's changelog.
pluggy 1.7.0 (2026-10-14)
Deprecations and Removals
[#632](https://github.com/pytest-dev/pluggy/issues/632) <https://github.com/pytest-dev/pluggy/issues/632>_: Hookspec methods defined withoutselfas the first parameter now emit a :class:DeprecationWarning. Addselfas the first parameter or use@staticmethod.Features
[#170](https://github.com/pytest-dev/pluggy/issues/170) <https://github.com/pytest-dev/pluggy/issues/170>_: Hookspecs can now declare default values for arguments, using the usualdef myhook(myarg="default")syntax. This is mainly a backward compatibility feature, to allow a hookspec to add new parameters to an existing hook without breaking existing callers. See :ref:hookspec_arg_defaultfor details.
[#729](https://github.com/pytest-dev/pluggy/issues/729) <https://github.com/pytest-dev/pluggy/issues/729>_: Tracing now adds detail wherestr()is ambiguous: empty strings and strings containing whitespace are quoted, and enums and paths show theirrepr().A value spanning several lines is now displayed as a block instead of running into the surrounding trace.
Bug Fixes
[#629](https://github.com/pytest-dev/pluggy/issues/629) <https://github.com/pytest-dev/pluggy/issues/629>_: Fix hooks failing to register on Python 3.14+ when type annotations use forward references.
[#315](https://github.com/pytest-dev/pluggy/issues/315) <https://github.com/pytest-dev/pluggy/issues/315>_: Source archives created bygit archive(including GitHub's "Source code" downloads) now carry version information, so building pluggy from them no longer fails with a missing version.
[#442](https://github.com/pytest-dev/pluggy/issues/442) <https://github.com/pytest-dev/pluggy/issues/442>_: With the addition of default values for hookspec arguments, we also changed the precedence of default values for hookimpl arguments. Previously, if a hookimpl function declared a default for an argument, it was always used, even if the hook call passed an explicit value. Now the precedence is changed to: hook call passed value > hookspec default value > hookimpl default value. See :ref:hookimpl_arg_defaults.
[#701](https://github.com/pytest-dev/pluggy/issues/701) <https://github.com/pytest-dev/pluggy/issues/701>_: Hookimpls and hookspecs are now discovered via :func:inspect.getattr_static, so properties,cached_propertyand other descriptors are no longer executed while scanning a plugin. Hooks declared through such a descriptor are not supported.As a side effect,
@hookimpl/@hookspecapplied above@classmethodor@staticmethodis now picked up; previously the marker sat on the wrapper wheregetattr()never saw it. Callables stored directly on a plugin instance -- in its__dict__or in a__slots__slot -- keep being called exactly asgetattr()returned them, i.e. without an implicitself.
... (truncated)
Commits
4c7f636Preparing release 1.7.021c7e16Merge pull request #787 from pytest-dev/rm-outdated-doc628959bdocs: remove outdated hookimpl default args paragraph2edab5eMerge pull request #752 from bluetech/register-none-allow6995073Merge pull request #776 from RonnyPfannschmidt/fix/uv-lock-pytest-downgrade50c1ac9[pre-commit.ci] pre-commit autoupdate (#781)6a7e84eAdd changelog fragment for #776d22cfb5Drop tox from the dev dependency group74cbfa2Relock pytest and tox that dependabot downgraded87f130aMerge pull request #755 from harbinresearcher/codex/entrypoint-plugin-presence- Additional commits viewable in compare view
Updates pytest-env from 1.7.1 to 1.8.0
Release notes
Sourced from pytest-env's releases.
1.8.0
- Document [pytest] env configuration in pytest.toml / .pytest.toml (#262)
- 👷 ci: pin ubuntu-26.04 and bump dependencies (#268)
- feat(python): require 3.11 and default to 3.15 (#270)
Full Changelog: https://github.com/pytest-dev/pytest-env/compare/1.7.1...1.8.0
Commits
484cdaefeat(python): require 3.11 and default to 3.15 (#270)5c8b323[pre-commit.ci] pre-commit autoupdate (#269)6bfeb12👷 ci: pin ubuntu-26.04 and bump dependencies (#268)d6ad54fbuild(deps): bump astral-sh/setup-uv from 10.1.0 to 10.2.0 in the github-acti...ca0dad2[pre-commit.ci] pre-commit autoupdate (#266)0334ce8build(deps): bump astral-sh/setup-uv from 10.0.1 to 10.1.0 in the github-acti...0cf852c[pre-commit.ci] pre-commit autoupdate (#264)d842d15[pre-commit.ci] pre-commit autoupdate (#263)e8c1b87Document [pytest] env configuration in pytest.toml / .pytest.toml (#262)- See full diff in compare view
Updates ruff from 0.17.0 to 0.17.1
Release notes
Sourced from ruff's releases.
0.17.1
Release Notes
Released on 2026-10-15.
Preview features
- [
pycodestyle] Don't treatNone,True, orFalseas keywords (E271-E274) (#29322)Bug fixes
- Fix dedent with multiple leading comments (#29382)
- [
flake8-pyi] Detect legacy positional-only parameters in__new__methods (PYI063) (#28502)- [
flake8-pyi] Fix false positives on quoted annotations (PYI036) (#29274)- [
perflint] Avoid invalid comprehension suggestions (PERF401,PERF403) (#29366)Rule changes
- Treat more
collectionsandweakrefcontainers as mutable (#29213)Documentation
- [
flake8-import-conventions] Update default and examplealiases(#29333)Contributors
Install ruff 0.17.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex"Download ruff 0.17.1
| File | Platform | Checksum |
... (truncated)
Changelog
Sourced from ruff's changelog.
0.17.1
Released on 2026-10-15.
Preview features
- [
pycodestyle] Don't treatNone,True, orFalseas keywords (E271-E274) (#29322)Bug fixes
- Fix dedent with multiple leading comments (#29382)
- [
flake8-pyi] Detect legacy positional-only parameters in__new__methods (PYI063) (#28502)- [
flake8-pyi] Fix false positives on quoted annotations (PYI036) (#29274)- [
perflint] Avoid invalid comprehension suggestions (PERF401,PERF403) (#29366)Rule changes
- Treat more
collectionsandweakrefcontainers as mutable (#29213)Documentation
- [
flake8-import-conventions] Update default and examplealiases(#29333)Contributors
Commits
4683270Bump version to 0.17.1 (#29420)3514027[ty] Update typing conformance suite pin (#29417)8294556Update referenced PR security-review workflow (#29237)d1e1b1f[ty] Preserve recursive aliases when rebuilding intersections (#29057)9352615[perflint] Avoid invalid comprehension suggestions (PERF401,PERF403) (...83a3afcFix dedent with multiple leading comments (#29382)b42a873[ty] Clarify object attribute write-contract rationale (#29384)d01678e[ty] Clarify object attribute write-contract rationale (#29384)355b42a[ty] Avoid writable override contracts from object (#29373)e26e6d2[ty] Collect intersection inference through constraint relations (#28677)- Additional commits viewable in compare view
Updates pipdeptree from 4.2.6 to 4.2.8
Release notes
Sourced from pipdeptree's releases.
4.2.8
Features - 4.2.8
- Add
-o cyclonedx-jsonandrender(output_format="cyclonedx-json")to export CycloneDX 1.5 JSON usingcyclonedx-bom, including dependency relationships, available installed licenses and extras, component external references, a timestamp, and a unique serial number. The renderer supports installed environments, PEP 751 locks, and index resolution. ()Full Changelog: https://github.com/tox-dev/pipdeptree/compare/4.2.7...4.2.8
4.2.7
Features - 4.2.7
- Show declared requirement ranges, markers and extras for dependencies resolved with
from-index. (#723)Full Changelog: https://github.com/tox-dev/pipdeptree/compare/4.2.6...4.2.7
Changelog
Sourced from pipdeptree's changelog.
Features - 4.2.8
- Add
-o cyclonedx-jsonandrender(output_format="cyclonedx-json")to export CycloneDX 1.5 JSON usingcyclonedx-bom, including dependency relationships, available installed licenses and extras, component external references, a timestamp, and a unique serial number. The renderer supports installed environments, PEP 751 locks, and index resolution. ()
4.2.7 (2026-10-10)
Features - 4.2.7
- Show declared requirement ranges, markers and extras for dependencies resolved with
from-index. (:issue:723)
4.2.6 (2026-10-10)
Commits
03602a2release 4.2.8b725d5a🔧 build(rust): require Rust 1.99 to take patched time (#734)cb3f208👷 ci(dist): build wheels on the newest runners (#733)ce19b60🧪 test(api): render extras from a fixture site (#732)2713b82feat: Add CycloneDX JSON SBOM output (#731)5855a82build(deps): bump the github-actions group with 4 updates (#729)0319526build(deps): bump serde_json from 1.0.151 to 1.0.154 in the cargo group (#730)a14c938[pre-commit.ci] pre-commit autoupdate (#728)cefd5cdrelease 4.2.7a4fb8ac✨ feat(index): retain declared requirements (#727)- See full diff in compare view
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 commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions
Summary by cubic
Bumps 10 Python dependencies in backend/ for bug fixes and minor feature updates.
Notable changes
multidictis a major bump (6.9.1 → 7.1.0):keys()now yields each key once,multidict.upstris deprecated, and all-strmultidicts use ~45% less memory.starlette1.8.0 andpymongo4.19.0 raise their minimum supported Python versions; the project already requires Python >= 3.14, so no impact.fastapi0.143.2 fixes blocking frontend fallback file checks;wrapt2.5.1 fixes lazy proxy and callback bugs.
The remaining updates are patch/minor bumps for linting and test tooling (pluggy, pytest-env, ruff, pipdeptree).