Repository navigation
chore(deps): update all non-major dependencies - #3468
Merged
Merged
Conversation
renovate
Bot
force-pushed
the
renovate/all-minor-patch
branch
from
November 9, 2026 18:53
41c92b0 to
2381c1c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
==4.15.1→==4.16.0==7.4.1→==7.5.044.184.0→44.205.144.224.1(+42)==2.4.0→==2.4.1v2.4.0→v2.4.17.4.1→7.5.0==9.1.1→==9.2.0==0.34.0→==0.35.0==6.0.12.20260906→==6.0.12.202610306.0.12.20261103==2.33.0.20261006→==2.33.0.20261030Note: The
pre-commitmanager in Renovate is not supported by thepre-commitmaintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
agronholm/anyio (anyio)
v4.16.0Compare Source
New features
BlockingPortal.call_async()for asynchronously calling into an event loop with optional abandonment on cancellation (#1342; PR by @davidbrochart)connect_unix()andcreate_unix_listener()(#1349; PR by @theunkn0wn1)Other changes
send()wait until the datagram has been passed to the operating system (#1294; PR by @graingert)Bug fixes
use_uvloop=Truefalls back to the standard event loop when uvloop (winloop on Windows) is not installed, and showed how to skip the corresponding pytest backend variant when the dependency is missing (#645; PR by @GruffElixir)get_current_task()on the asyncio backend raising an opaqueTypeError: cannot create weak reference to 'NoneType' objectinstead of a clear error when called from a callback scheduled vialoop.call_soon_threadsafe()(e.g. from withinfrom_thread.run_sync()), whereasyncio.current_task()is legitimatelyNone(#773; PR by @AmirF194)CancelScopeon the asyncio backend swallowing a nativeTask.cancel()that was delivered in the same event loop iteration as the scope's own cancellation (such as amove_on_after()deadline expiring), which left the host task with a pending cancellation request that never raisedCancelledError(#1214)aclose_forcefully()calls on asyncio socket streams returning before the underlying socket was closed (#1273; PR by @graingert)aclose()on sockets not checkpointing, and thus failing to raise a cancellation exception when called inside a cancelled scope (affected UNIX socket streams and UNIX datagram sockets on asyncio, and all sockets on Trio) (#1288; PR by @graingert)aclose()on asyncio TCP socket listeners not checkpointing, and leaking the listening socket if cancelled while another task was waiting inaccept()(#1289; PR by @graingert)accept()on asyncio UNIX socket listeners hanging forever, and leaving the listening socket registered with the event loop, when the listener was closed by another task (#1289; PR by @graingert)send()on asyncio TCP and UDP sockets returning normally, despite the data being discarded, when the socket was closed by another task (or, for TCP, the connection was lost) whilesend()was waiting for the operating system to accept the data (#1289; PR by @graingert)SocketStream.send()on the asyncio backend handing its data to a paused transport after a previoussend()was cancelled (#1299; PR by @graingert)sleep()treating a negative delay (including-inf) inconsistently across backends (asyncio returned immediately; Trio raisedValueError) by raisingValueErroron all backends (#1306; PR by @BetterAndBetterII)create_tcp_listener()occasionally failing with a message likeCould not create 2 listeners with a consistent portwhen an ephemeral port is requested and IPv6 is enabled and the dual-stack path is not available or a specific local host name was given (#1313)AsyncFilenot shielding against cancellation while closing (#1314)TemporaryDirectory.cleanup()reacting to cancellation prematurely when the host task was already cancelled, causing the actual cleanup operation to be skipped (#1316; PR by @Yasser-Ameur)ValueError, which silently disabled the timeout (fail_after(math.nan)returned instead of raisingTimeoutError);CancelScopenow rejects it on both backends (#1317; PR by @dylanpulver)FileReadStreamandFileWriteStreamleaving files open when cancelled during context manager exit, including unflushed writes (#1318; PR by @Kuang-xianxin)Condition.notify()andCondition.notify_all()failing when the underlying lock was acquired directly rather than through the condition (#1319; PR by @GruffElixir)__file__, such as PyOxidizer, raisingTypeErrorinstead of falling back to eager imports (#1322; PR by @skulitom)Semaphore(fast_acquire=True)losing its fast-acquire behavior when instantiated outside a running event loop (#1348; PR by @feiiiiii5)BlockingPortalProviderpermanently failing with anAttributeErroron every subsequent use if the first attempt to start its blocking portal failed (#1350; PR by @Yasser-Ameur)create_udp_socket()silently ignoring thelocal_portargument whenlocal_hostwas omitted, making the socket bind to a random ephemeral port instead of the requested one (#1351; PR by @januththedev)to_thread.run_sync()call was cancelled after it had been queued for the worker but before the worker thread had picked it up (#1352; PR by @Zac-HD)TypeErrorwhen subclassing an existingTypedAttributeSetsubclass, and this subclass contains type annotations (#1358; PR by @pasmud)Lock.locked()(andCondition.locked()) raisingNoEventLoopErrorwhen the lock was created outside a running event loop (#1362; PR by @00200200)connect_tcp()leaking a connected socket when an enclosing cancel scope was cancelled before the connection attempt task group exited (#1364; PR by @charan-rathore)create_connected_udp_socket()silently ignoringlocal_portwhenlocal_hostwas not given: the local address was left unset, so the OS picked an ephemeral port instead of the requested one (#1365; PR by @feiiiiii5)BlockingPortalProvidernot passing the exception raised in itswithblock on to thestart_blocking_portal()context manager it wraps (#1366; PR by @feiiiiii5)anyio.itertools.islice()not consuming the firststartitems whenstop <= start(#1372; PR by @Rodrigo-Palma)BufferedByteReceiveStream.receive_exactly()andreceive_until()returning buffered data after explicit closure instead of raisingClosedResourceError(#1378; PR by @kokotatan)send()lost an already-encrypted record; the stream now raisesBrokenResourceErroron further use instead (#1385; PR by @Kayvan-Zahiri)close()on memory object streams not waking up tasks blocked insend()orreceive()on the same stream (#1391)anyio.itertools.product()acquiring and consuming unused input iterables whenrepeat=0(#1394; PR by @sricharanreddycheruku)SpooledTemporaryFilerolling over to disk on writes whenmax_sizeis zero (the default) (#1397; PR by @fhgffy)SpooledTemporaryFile.rollover()losing buffered contents (#1404; PR by @adenzhou1350)TextSendStream.send()re-emitting the byte order mark on every item with BOM-emitting encodings (utf-16,utf-32,utf-8-sig), which made the peer decode a stray\ufeffin front of every message after the first (#1405; PR by @feiiiiii5)EndOfStream(#1409; PR by @00200200)BlockingPortalcrashing withInvalidStateErrorwhen a future it returned was cancelled just as the callable was completing (#1410; PR by @adenzhou1350)UNIXSocketStream.send_fds()silently truncating messages on short socket writes (#1422; PR by @AryanRG)CapacityLimiter.acquire_on_behalf_of()on asyncio releasing the wrong borrower when the acquiring task was cancelled during the cancel-shielded checkpoint that runs after a non-blocking acquisitionpycqa/flake8 (flake8)
v7.5.0Compare Source
maxbrunet/pre-commit-renovate
v44.205.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.205.1 for more changes
v44.204.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.204.0 for more changes
v44.202.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.202.1 for more changes
v44.201.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.201.1 for more changes
v44.201.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.201.0 for more changes
v44.200.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.200.2 for more changes
v44.200.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.200.1 for more changes
v44.200.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.200.0 for more changes
v44.199.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.199.2 for more changes
v44.199.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.199.1 for more changes
v44.199.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.199.0 for more changes
v44.198.3Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.198.3 for more changes
v44.198.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.198.0 for more changes
v44.197.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.197.1 for more changes
v44.196.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.196.1 for more changes
v44.196.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.196.0 for more changes
v44.195.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.195.1 for more changes
v44.195.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.195.0 for more changes
v44.194.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.194.0 for more changes
v44.193.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.193.1 for more changes
v44.193.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.193.0 for more changes
v44.192.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.192.2 for more changes
v44.192.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.192.0 for more changes
v44.191.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.191.0 for more changes
v44.190.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.190.2 for more changes
v44.190.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.190.1 for more changes
v44.190.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.190.0 for more changes
v44.188.4Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.188.4 for more changes
v44.188.3Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.188.3 for more changes
v44.188.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.188.2 for more changes
v44.188.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.188.1 for more changes
v44.187.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.187.0 for more changes
v44.186.8Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.8 for more changes
v44.186.7Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.7 for more changes
v44.186.6Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.6 for more changes
v44.186.5Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.5 for more changes
v44.186.4Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.4 for more changes
v44.186.3Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.3 for more changes
v44.186.2Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.2 for more changes
v44.186.0Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.186.0 for more changes
v44.184.1Compare Source
See https://github.com/renovatebot/renovate/releases/tag/44.184.1 for more changes
python/mypy (mypy)
v2.4.1Compare Source
pre-commit/mirrors-mypy
v2.4.1Compare Source
pytest-dev/pytest (pytest)
v9.2.0Compare Source
pytest 9.2.0 (2026-10-27)
Removals and backward incompatible breaking changes
#14716:
-cnow raises a usage error for a path that does not exist, is a directory, or is in a format pytest has no loader for. Such paths were previously either ignored or reported as an unhandledFileNotFoundError.#8593: The
indirect,idsandscopearguments ofMetafunc.parametrize() <pytest.Metafunc.parametrize>-- and therefore of@pytest.mark.parametrize <pytest.mark.parametrize ref>-- are now keyword-only.Passing them positionally was a common source of confusing errors, e.g.
parametrize("arg1", "arg2", [(1, 2)])made the argvalues land inindirectand failed withindirect fixture '(1, 2)' doesn't exist; such mistakes now fail with an understandableTypeError. The type annotations have always declared these arguments as keyword-only.#993: Plugin import failures at startup are now reported and classified instead of escaping as a raw traceback with the accidental exit code
1:-p,pytest_pluginsorPYTEST_PLUGINS-- exits withpytest.ExitCodeUSAGE_ERROR(4), like aconftest.pythat fails to import;pytest11entry point or a missing plugin dependency -- exits withpytest.ExitCodeINTERNAL_ERROR(3), with the traceback preserved.pytest.mainnow returns these codes instead of raisingImportError. Also fixed anIndexErrorfrom pytest's own internals when the plugin raised an exception with no arguments.Deprecations (removal in next major release)
#14742: The private
_pytest.python.CallSpec2name has been renamed toCallSpec.The old
CallSpec2alias remains available for now and will be removed in pytest 10 or 11.#14755: Schedule yield_fixture decorator for removal in pytest 10 or 11.
#14774: Similarly to the deprecation of class-scoped fixtures defined as instance methods in pytest 9.1,
all higher-scoped fixtures (
module,package, andsession) definedas instance methods are now deprecated.
They suffer from the same issue the original deprecation only fixed for
class-scoped fixtures, see
10819and14011.#14808: Passing a non-string value to a
string-typed ini option now emits apytest.PytestRemovedIn10Warning. This affects[tool.pytest.ini_options]inpyproject.toml. In pytest 10 this will raise aTypeError, matching the behavior of the corresponding TOML config path.#7323: Passing
bytestoTerminalReporter.write_line()is now deprecated, pass astrinstead.New features
strict_markersis enabled, marker names used in-mexpressions are now validated against registered markers.parametrize_long_str_id_strategyconfiguration option to control how longstr/bytesparameter values are handled in auto-generated test IDs. Explicit IDs set viaids=[...]orpytest.param(..., id=...)are not affected. Available strategies:short(default, values over 100 chars fall back toargname+index),sha256(SHA-256 hex digest),legacy(keep full value), anddisallow(error requesting explicit IDs).Improvements in existing functionality
#10745: A
RecursionErrorwhose recursion origin cannot be located now shows only thefirst and last 10 stack frames, matching what pytest already did when locating
the origin failed outright. Previously the full traceback -- often around a
thousand near-identical frames -- was rendered, which was both slow and
unreadable. Pass
--full-traceto see every frame.#10745: The line numbers of a module's statements are now computed once per traceback
instead of once per traceback entry, which noticeably speeds up rendering
failures raised from large test modules.
#11418: The cached rewritten modules in
__pycache__are now invalidated by a hash ofthe source instead of its modification time, using the checked-hash pyc format
from
552.Timestamps make the cache useless wherever source files get fresh modification
times, most notably in CI: a checkout gives every file a new mtime, so a
restored cache is discarded in full and every test module is rewritten again.
Hashing the source costs roughly 15 microseconds per file and makes the cache
survive that.
Existing timestamp based caches are ignored and rewritten once.
#12624: The
pytest_pluginsvariable and thePYTEST_PLUGINSenvironment variable now also accept entry point names of installed plugins (e.g.xdist), in addition to importable module names, matching the behavior of the-pcommand-line option.As part of this change, plugins specified by entry point name through these mechanisms are now also listed in the
plugins:line of the terminal header (12615).Based on the original implementation by Marcel Telka in
12616.#12697: Warnings emitted while importing plugins through
-p,PYTEST_PLUGINS, or entry point autoloading are now captured, filtered, and reported like other warnings.#12860: Assertion diffs for
dict.items()anddict.keys()comparisons (>=,<=,>,<,==) now show which items are missing, the same way set comparisons do.#13354:
Node.get_closest_marker <_pytest.nodes.Node.get_closest_marker>now also accepts a~pytest.MarkDecoratoras itsdefault, for exampleitem.get_closest_marker("foo", pytest.mark.foo(1)), and returns the wrapped~pytest.Mark.Previously the only way to build a
defaultwas to instantiate~pytest.Markdirectly, which is private and warns.#13369: Improved the error from
pytest.RunResult.assert_outcomeswhen a plugin changes or removes pytest's standard terminal summary, and documented how to isolate output-changing plugins.#13431: Exposed
pytest.ParameterSetas the type of the return value ofpytest.param().This can be used in type annotations and
isinstancechecks.#13564: Issue a warning when fixtures are wrapped with a decorator that prevents
correct discovery, including
@classmethodabove@pytest.fixtureand@staticmethodabove@pytest.fixture. Put@pytest.fixtureabovethose decorators on test classes.
#14164: Exposed
pytest.Approxas the type of the return value ofpytest.approx().This can be used in type annotations and
isinstancechecks.#14463: Assertion diffs for mappings now match up keys the way the compared mappings match them themselves.
Key comparison goes through the mappings' key views instead of plain sets of their keys, so a mapping
with its own notion of key equivalence, such as case-insensitive header mappings, no longer
reports its common keys as missing on either side.
#14523: Large assertion comparison diffs are now built lazily and capped to the
truncation budget, so a huge diff is no longer formatted in full just to
be truncated. As a consequence, the truncation footer no longer
reports the exact number of hidden lines.
#14687: The default fd-level output capturing (
--capture=fd) now skips reading the capture buffer for tests which produce no output, reducing per-test overhead in large test suites.#14724:
--no-summarynow only applies directly to pytest's own summary.The flag no longer skips the
pytest_terminal_summaryhook, so third-partyplugins (for example coverage) can still write their terminal summaries.
#14751:
parser.addini <pytest.Parser.addini>now also accepts type expressions for itstypeargument, in addition to the existing string tags: the plain Python typesstr,bool,int,float, aLiteralof strings, and unions of these (for exampleint | strorint | Literal["auto"]).#14754:
pytest.approx()now rejects infinite relative tolerances fordatetime.timedeltavalues with a clearValueErrorinstead of raisingOverflowError.#14791: The
junit_family,junit_logging,junit_duration_report,console_output_style,empty_parameter_set_mark,assertion_text_diff_styleandtmp_path_retention_policyconfiguration options are now registered with the set of values they accept: an invalid value now fails with a clean usage error instead of being silently ignored or crashing later, andpytest --helplists the accepted values.config.getini <pytest.Config.getini>now raisespytest.UsageErrorinstead ofTypeErrororValueErrorwhen the value read from the configuration file does not match the registered type, so a bad value is always reported as a short usage error message instead of an internal error traceback. Asking for an option name that was never registered still raisesValueError.#15006:
pytest.approxnow emitspytest.PytestApproxDecimalToleranceWarningwhen arelorabstolerance is given as afloatthat cannot be represented exactly for a~decimal.Decimalcomparison, since such a tolerance is widened to the float's exact binary value.#14675, #14953, #15153, #15132: The
truncation_limit_lines,truncation_limit_chars,max_warnings,verbosity_assertions,verbosity_test_cases,verbosity_subtests,tmp_path_retention_count,log_level,log_cli_level,log_file_level,log_auto_indentandfaulthandler_timeoutconfiguration options now accept native integer (and, forlog_auto_indent, boolean) values in TOML configuration files, while still accepting strings for backward compatibility.log_file_modenow reports invalid values as a usage error.#15254:
tmp_pathandTempPathFactory.mktemp <pytest.TempPathFactory.mktemp>no longer list the whole base temporary directory on every call, which made sessions with many temporary directories quadratically slow. Numbers are now handed out from a per-prefix counter, skipping names that already exist.#4569:
Node.add_marker <_pytest.nodes.Node.add_marker>now stores a~pytest.Markinnode.keywords, matching what marks applied during collection store. Previously it stored a~pytest.MarkDecorator.#9436: Avoided formatting tracebacks for tests marked with
xfail(run=False).Bug fixes
#10128: Configured warning filters now apply to warnings emitted by
pytest_configurehooks.#10210:
pytest.approxnow raises aTypeErrorfor any nested container, notonly for one of the same type as its parent. Previously
approx([{"k": 1}])and
approx({"k": [1]})were accepted and then compared unequal to everyvalue, silently ignoring the tolerance, while
approx([[1]])correctlyreported that nesting is unsupported.
#10644:
monkeypatch.setattr()no longer leaves a new entry in the instance__dict__when it patches an attribute that the instance inherits from its class.Previously
undo()assigned the inherited value onto the instance, which shadowed the class attribute -- permanently freezing the result for descriptors that resolve dynamically.#1139: Fixed tracebacks showing
???instead of source lines for code compiled with a filename relative to a directory other than the current working directory -- e.g. compiled Cython modules, when running pytest from a subdirectory of the project root.The source lookup now falls back to searching
sys.pathfor such filenames, as the standardtracebackmodule does.#11502: The
rootdiris no longer derived from a configuration file that is not a regular file, such as--config-file=/dev/null.#11783: Plugins installed in editable mode (
660) are marked for assertion rewriting again.Such installs do not record the package's Python files in the distribution metadata, so pytest found nothing to rewrite and assertions inside the plugin lost their introspection. The plugin's entry point is now used to locate the package in that case.
#11933:
pytest.warnsno longer re-emits unmatched warnings withmodule="warnings", which causedmodule-based warning filters to be applied to the wrong warnings. Sincewarnings.WarningMessagedoes not record the module a warning was emitted with, re-emitted warnings now use the standardwarnings.warn_explicitdefault of deriving the module from the warning's filename.#12175:
ExceptionInfo.exconly(tryshort=True) <pytest.ExceptionInfo.exconly>now strips theAssertionError:prefix of failedassertstatements for~pytest.ExceptionInfoobjects created bypytest.raises, and failures insideunittest.TestCase.subTestreport the same short crash line as regular tests.#12223: The
messageattribute of<failure>and<error>elements in--junitxmlreports is now shortened to whole lines within 500 characters. When something is dropped, it ends with a note pointing to the element text, which still holds the full report. Previously, very verbose assertion output (e.g. with-vv) produced attributes tens of thousands of characters long, which some XML parsers fail on.#12307: Fixed truncation of long collections (lists, dicts, sets, etc.) in the "message" part of failed assertions (as in
assert condition, msg) when using-vv: the message now uses the same unlimited repr as the rest of the assertion output, instead of eliding collection elements with....#12824: Custom command-line options now fail with a clear error when their implicit
destination conflicts with an existing option, avoiding silent overrides of
built-in options such as
-k.#13292: Fixed a stale rewritten module being used when a test file is modified twice
within the same sec
Configuration
📅 Schedule: (UTC)
* 0-3 * * 1)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.