Skip to content

chore(deps): update all non-major dependencies - #3468

Merged
JohnVillalovos merged 1 commit into
mainfrom
renovate/all-minor-patch
Nov 9, 2026
Merged

JohnVillalovos merged 1 commit into
mainfrom
renovate/all-minor-patch

Conversation

@renovate

@renovate renovate Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence Type Update Pending
anyio (changelog) ==4.15.1 → ==4.16.0 age confidence minor
flake8 (changelog) ==7.4.1 → ==7.5.0 age confidence minor
maxbrunet/pre-commit-renovate 44.184.0 → 44.205.1 age confidence repository minor 44.224.1 (+42)
mypy (changelog) ==2.4.0 → ==2.4.1 age confidence patch
pre-commit/mirrors-mypy v2.4.0 → v2.4.1 age confidence repository patch
pycqa/flake8 7.4.1 → 7.5.0 age confidence repository minor
pytest (changelog) ==9.1.1 → ==9.2.0 age confidence minor
trio (changelog) ==0.34.0 → ==0.35.0 age confidence minor
types-PyYAML (changelog) ==6.0.12.20260906 → ==6.0.12.20261030 age confidence patch 6.0.12.20261103
types-requests (changelog) ==2.33.0.20261006 → ==2.33.0.20261030 age confidence patch

Note: The pre-commit manager in Renovate is not supported by the pre-commit maintainers 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.0

Compare Source

New features

  • Added BlockingPortal.call_async() for asynchronously calling into an event loop with optional abandonment on cancellation (#​1342; PR by @​davidbrochart)
  • Added SOCK_SEQPACKET support to connect_unix() and create_unix_listener() (#​1349; PR by @​theunkn0wn1)

Other changes

  • Changed UDP sockets on the asyncio backend to make send() wait until the datagram has been passed to the operating system (#​1294; PR by @​graingert)

Bug fixes

  • Fixed documentation implying that use_uvloop=True falls 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)
  • Fixed get_current_task() on the asyncio backend raising an opaque TypeError: cannot create weak reference to 'NoneType' object instead of a clear error when called from a callback scheduled via loop.call_soon_threadsafe() (e.g. from within from_thread.run_sync()), where asyncio.current_task() is legitimately None (#​773; PR by @​AmirF194)
  • Fixed CancelScope on the asyncio backend swallowing a native Task.cancel() that was delivered in the same event loop iteration as the scope's own cancellation (such as a move_on_after() deadline expiring), which left the host task with a pending cancellation request that never raised CancelledError (#​1214)
  • Fixed UDP socket closing hanging if a datagram send was still in flight (#​1237; PR by @​graingert)
  • Fixed concurrent aclose_forcefully() calls on asyncio socket streams returning before the underlying socket was closed (#​1273; PR by @​graingert)
  • Fixed 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)
  • Fixed aclose() on asyncio TCP socket listeners not checkpointing, and leaking the listening socket if cancelled while another task was waiting in accept() (#​1289; PR by @​graingert)
  • Fixed 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)
  • Fixed 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) while send() was waiting for the operating system to accept the data (#​1289; PR by @​graingert)
  • Fixed SocketStream.send() on the asyncio backend handing its data to a paused transport after a previous send() was cancelled (#​1299; PR by @​graingert)
  • Fixed sleep() treating a negative delay (including -inf) inconsistently across backends (asyncio returned immediately; Trio raised ValueError) by raising ValueError on all backends (#​1306; PR by @​BetterAndBetterII)
  • Fixed create_tcp_listener() occasionally failing with a message like Could not create 2 listeners with a consistent port when 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)
  • Fixed AsyncFile not shielding against cancellation while closing (#​1314)
  • Fixed 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)
  • Fixed a NaN deadline being accepted on asyncio while Trio raised ValueError, which silently disabled the timeout (fail_after(math.nan) returned instead of raising TimeoutError); CancelScope now rejects it on both backends (#​1317; PR by @​dylanpulver)
  • Fixed FileReadStream and FileWriteStream leaving files open when cancelled during context manager exit, including unflushed writes (#​1318; PR by @​Kuang-xianxin)
  • Fixed Condition.notify() and Condition.notify_all() failing when the underlying lock was acquired directly rather than through the condition (#​1319; PR by @​GruffElixir)
  • Fixed importing AnyIO with loaders that do not provide __file__, such as PyOxidizer, raising TypeError instead of falling back to eager imports (#​1322; PR by @​skulitom)
  • Fixed text receive streams silently discarding incomplete characters at end-of-file instead of applying the configured decoding error handler (#​1339; PR by @​Aurelucien)
  • Fixed Semaphore(fast_acquire=True) losing its fast-acquire behavior when instantiated outside a running event loop (#​1348; PR by @​feiiiiii5)
  • Fixed BlockingPortalProvider permanently failing with an AttributeError on every subsequent use if the first attempt to start its blocking portal failed (#​1350; PR by @​Yasser-Ameur)
  • Fixed create_udp_socket() silently ignoring the local_port argument when local_host was omitted, making the socket bind to a random ephemeral port instead of the requested one (#​1351; PR by @​januththedev)
  • Fixed worker threads on the asyncio backend never returning to the idle pool (and thus never being reused or pruned) when a 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)
  • Fixed pytest plugin running Hypothesis async tests only on the first parametrized backend instead of each backend (#​1353; PR by @​DYNOSuprovo)
  • Fixed TypeError when subclassing an existing TypedAttributeSet subclass, and this subclass contains type annotations (#​1358; PR by @​pasmud)
  • Fixed Lock.locked() (and Condition.locked()) raising NoEventLoopError when the lock was created outside a running event loop (#​1362; PR by @​00200200)
  • Fixed 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)
  • Fixed create_connected_udp_socket() silently ignoring local_port when local_host was not given: the local address was left unset, so the OS picked an ephemeral port instead of the requested one (#​1365; PR by @​feiiiiii5)
  • Fixed BlockingPortalProvider not passing the exception raised in its with block on to the start_blocking_portal() context manager it wraps (#​1366; PR by @​feiiiiii5)
  • Fixed anyio.itertools.islice() not consuming the first start items when stop <= start (#​1372; PR by @​Rodrigo-Palma)
  • Fixed BufferedByteReceiveStream.receive_exactly() and receive_until() returning buffered data after explicit closure instead of raising ClosedResourceError (#​1378; PR by @​kokotatan)
  • Fixed a TLS stream sending records the peer could no longer decrypt after a cancelled send() lost an already-encrypted record; the stream now raises BrokenResourceError on further use instead (#​1385; PR by @​Kayvan-Zahiri)
  • Fixed close() on memory object streams not waking up tasks blocked in send() or receive() on the same stream (#​1391)
  • Fixed anyio.itertools.product() acquiring and consuming unused input iterables when repeat=0 (#​1394; PR by @​sricharanreddycheruku)
  • Fixed SpooledTemporaryFile rolling over to disk on writes when max_size is zero (the default) (#​1397; PR by @​fhgffy)
  • Fixed Trio UDP sockets remaining open when initialization failed or was cancelled (#​1400; PR by @​adenzhou1350)
  • Fixed SpooledTemporaryFile.rollover() moving the current file position to the end of the file (#​1401; PR by @​fhgffy)
  • Fixed cancellation during temporary directory creation leaving the directory behind while its context manager is retained (#​1403; PR by @​adenzhou1350)
  • Fixed cancellation during SpooledTemporaryFile.rollover() losing buffered contents (#​1404; PR by @​adenzhou1350)
  • Fixed 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 \ufeff in front of every message after the first (#​1405; PR by @​feiiiiii5)
  • Fixed buffered byte streams returning empty bytes when a wrapped object stream received empty messages instead of waiting for data or raising EndOfStream (#​1409; PR by @​00200200)
  • Fixed BlockingPortal crashing with InvalidStateError when a future it returned was cancelled just as the callable was completing (#​1410; PR by @​adenzhou1350)
  • Fixed UNIXSocketStream.send_fds() silently truncating messages on short socket writes (#​1422; PR by @​AryanRG)
  • Fixed cancelled TCP receives on the asyncio backend leaving transport reads enabled, allowing incoming data to accumulate while the application was not receiving. (#​1423; PR by @​Master-Norna)
  • Fixed 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 acquisition
pycqa/flake8 (flake8)

v7.5.0

Compare Source

maxbrunet/pre-commit-renovate

v44.205.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.205.1 for more changes

v44.204.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.204.0 for more changes

v44.202.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.202.1 for more changes

v44.201.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.201.1 for more changes

v44.201.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.201.0 for more changes

v44.200.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.200.2 for more changes

v44.200.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.200.1 for more changes

v44.200.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.200.0 for more changes

v44.199.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.199.2 for more changes

v44.199.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.199.1 for more changes

v44.199.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.199.0 for more changes

v44.198.3

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.198.3 for more changes

v44.198.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.198.0 for more changes

v44.197.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.197.1 for more changes

v44.196.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.196.1 for more changes

v44.196.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.196.0 for more changes

v44.195.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.195.1 for more changes

v44.195.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.195.0 for more changes

v44.194.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.194.0 for more changes

v44.193.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.193.1 for more changes

v44.193.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.193.0 for more changes

v44.192.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.192.2 for more changes

v44.192.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.192.0 for more changes

v44.191.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.191.0 for more changes

v44.190.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.190.2 for more changes

v44.190.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.190.1 for more changes

v44.190.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.190.0 for more changes

v44.188.4

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.188.4 for more changes

v44.188.3

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.188.3 for more changes

v44.188.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.188.2 for more changes

v44.188.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.188.1 for more changes

v44.187.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.187.0 for more changes

v44.186.8

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.8 for more changes

v44.186.7

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.7 for more changes

v44.186.6

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.6 for more changes

v44.186.5

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.5 for more changes

v44.186.4

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.4 for more changes

v44.186.3

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.3 for more changes

v44.186.2

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.2 for more changes

v44.186.0

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.186.0 for more changes

v44.184.1

Compare Source

See https://github.com/renovatebot/renovate/releases/tag/44.184.1 for more changes

python/mypy (mypy)

v2.4.1

Compare Source

  • Process overloads as a whole in two-phase type checking (Ivan Levkivskyi, PR 22231)
  • Skip recursive setup for frame-private nested functions in mypyc (Piotr Sawicki, PR 22187)
pre-commit/mirrors-mypy

v2.4.1

Compare Source

pytest-dev/pytest (pytest)

v9.2.0

Compare Source

pytest 9.2.0 (2026-10-27)

Removals and backward incompatible breaking changes

  • #​14716: -c now 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 unhandled FileNotFoundError.

  • #​8593: The indirect, ids and scope arguments of Metafunc.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 in indirect and failed with indirect fixture '(1, 2)' doesn't exist; such mistakes now fail with an understandable TypeError. 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:

    • a plugin that cannot be found -- via -p, pytest_plugins or PYTEST_PLUGINS -- exits with pytest.ExitCode USAGE_ERROR (4), like a conftest.py that fails to import;
    • a plugin that is found but raises while importing -- including a broken pytest11 entry point or a missing plugin dependency -- exits with pytest.ExitCode INTERNAL_ERROR (3), with the traceback preserved.

    pytest.main now returns these codes instead of raising ImportError. Also fixed an IndexError from pytest's own internals when the plugin raised an exception with no arguments.

Deprecations (removal in next major release)

  • #​14742: The private _pytest.python.CallSpec2 name has been renamed to CallSpec.
    The old CallSpec2 alias 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, and session) defined
    as instance methods are now deprecated.

    They suffer from the same issue the original deprecation only fixed for
    class-scoped fixtures, see 10819 and 14011.

  • #​14808: Passing a non-string value to a string-typed ini option now emits a pytest.PytestRemovedIn10Warning. This affects [tool.pytest.ini_options] in pyproject.toml. In pytest 10 this will raise a TypeError, matching the behavior of the corresponding TOML config path.

  • #​7323: Passing bytes to TerminalReporter.write_line() is now deprecated, pass a str instead.

New features

  • #​14743: Full diff: now contains a legend explaining the + & - symbols in diff output.
  • #​2781: When strict_markers is enabled, marker names used in -m expressions are now validated against registered markers.
  • #​6881: Added the parametrize_long_str_id_strategy configuration option to control how long str/bytes parameter values are handled in auto-generated test IDs. Explicit IDs set via ids=[...] or pytest.param(..., id=...) are not affected. Available strategies: short (default, values over 100 chars fall back to argname+index), sha256 (SHA-256 hex digest), legacy (keep full value), and disallow (error requesting explicit IDs).

Improvements in existing functionality

  • #​10745: A RecursionError whose recursion origin cannot be located now shows only the
    first 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-trace to 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 of
    the 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_plugins variable and the PYTEST_PLUGINS environment variable now also accept entry point names of installed plugins (e.g. xdist), in addition to importable module names, matching the behavior of the -p command-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() and dict.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.MarkDecorator as its default, for example item.get_closest_marker("foo", pytest.mark.foo(1)), and returns the wrapped ~pytest.Mark.

    Previously the only way to build a default was to instantiate ~pytest.Mark directly, which is private and warns.

  • #​13369: Improved the error from pytest.RunResult.assert_outcomes when a plugin changes or removes pytest's standard terminal summary, and documented how to isolate output-changing plugins.

  • #​13431: Exposed pytest.ParameterSet as the type of the return value of pytest.param().
    This can be used in type annotations and isinstance checks.

  • #​13564: Issue a warning when fixtures are wrapped with a decorator that prevents
    correct discovery, including @classmethod above @pytest.fixture and
    @staticmethod above @pytest.fixture. Put @pytest.fixture above
    those decorators on test classes.

  • #​14164: Exposed pytest.Approx as the type of the return value of pytest.approx().
    This can be used in type annotations and isinstance checks.

  • #​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-summary now only applies directly to pytest's own summary.

    The flag no longer skips the pytest_terminal_summary hook, so third-party
    plugins (for example coverage) can still write their terminal summaries.

  • #​14751: parser.addini <pytest.Parser.addini> now also accepts type expressions for its type argument, in addition to the existing string tags: the plain Python types str, bool, int, float, a Literal of strings, and unions of these (for example int | str or int | Literal["auto"]).

  • #​14754: pytest.approx() now rejects infinite relative tolerances for datetime.timedelta values with a clear ValueError instead of raising OverflowError.

  • #​14791: The junit_family, junit_logging, junit_duration_report, console_output_style, empty_parameter_set_mark, assertion_text_diff_style and tmp_path_retention_policy configuration 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, and pytest --help lists the accepted values.

    config.getini <pytest.Config.getini> now raises pytest.UsageError instead of TypeError or ValueError when 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 raises ValueError.

  • #​15006: pytest.approx now emits pytest.PytestApproxDecimalToleranceWarning when a rel or abs tolerance is given as a float that cannot be represented exactly for a ~decimal.Decimal comparison, 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_indent and faulthandler_timeout configuration options now accept native integer (and, for log_auto_indent, boolean) values in TOML configuration files, while still accepting strings for backward compatibility.
    log_file_mode now reports invalid values as a usage error.

  • #​15254: tmp_path and TempPathFactory.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.Mark in node.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_configure hooks.

  • #​10210: pytest.approx now raises a TypeError for any nested container, not
    only for one of the same type as its parent. Previously approx([{"k": 1}])
    and approx({"k": [1]}) were accepted and then compared unequal to every
    value, silently ignoring the tolerance, while approx([[1]]) correctly
    reported 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.path for such filenames, as the standard traceback module does.

  • #​11502: The rootdir is 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.warns no longer re-emits unmatched warnings with module="warnings", which caused module-based warning filters to be applied to the wrong warnings. Since warnings.WarningMessage does not record the module a warning was emitted with, re-emitted warnings now use the standard warnings.warn_explicit default of deriving the module from the warning's filename.

  • #​12175: ExceptionInfo.exconly(tryshort=True) <pytest.ExceptionInfo.exconly> now strips the AssertionError: prefix of failed assert statements for ~pytest.ExceptionInfo objects created by pytest.raises, and failures inside unittest.TestCase.subTest report the same short crash line as regular tests.

  • #​12223: The message attribute of <failure> and <error> elements in --junitxml reports 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

[!IMPORTANT]
✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM, only on Monday (* 0-3 * * 1)
  • Automerge
    • At any time (no schedule defined)

🚦 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.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch from 41c92b0 to 2381c1c Compare November 9, 2026 18:53
@JohnVillalovos
JohnVillalovos merged commit a4053bf into main Nov 9, 2026
20 checks passed
@JohnVillalovos
JohnVillalovos deleted the renovate/all-minor-patch branch November 9, 2026 19:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant