Repository navigation
chore(deps): update all dependencies - #18798
Open
renovate-bot wants to merge 1 commit into
Open
renovate-bot wants to merge 1 commit into
renovate-bot wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request updates the SQLAlchemy dependency in packages/sqlalchemy-spanner/requirements.txt from version 2.1.5 to 2.1.6, along with updating its associated cryptographic hashes. There are no review comments to address, and I have no additional feedback to provide.
renovate-bot
force-pushed
the
renovate/all
branch
from
October 22, 2026 03:06
93cf9bc to
d309076
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 22, 2026 04:42
d309076 to
9663400
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 22, 2026 15:48
9663400 to
25b2bfe
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 22, 2026 20:11
25b2bfe to
ce1ee6d
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 22, 2026 20:14
ce1ee6d to
e476421
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 23, 2026 00:12
e476421 to
d7701d7
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 25, 2026 01:22
1458b39 to
45968ed
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 25, 2026 12:43
45968ed to
168b4af
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 25, 2026 17:07
168b4af to
a83995b
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 25, 2026 21:29
a83995b to
f95742e
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 26, 2026 08:23
f95742e to
dd1645c
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 26, 2026 15:29
dd1645c to
ded01d5
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 26, 2026 15:36
ded01d5 to
9163186
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 27, 2026 06:15
9163186 to
050da62
Compare
renovate-bot
force-pushed
the
renovate/all
branch
from
October 27, 2026 08:08
050da62 to
f5cb40b
Compare
This branch has not been deployed
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:
==2.1.5→==2.1.65fda3b9→6d4fd22==1.20.0→==1.20.1==0.15.1→==0.15.2==0.15.1→==0.15.2==2026.10.19→==2026.10.23==1.8.0→==1.9.0==4.2.4→==4.2.5==2.42.0→==2.43.2==3.46.2→==3.47.0==3.46.2→==3.47.0==1.75.5→==1.76.0==0.14.5→==0.14.6==1.84.0→==1.85.1==1.84.0→==1.85.1==9.17.1→==9.18.03.14→3.15==7.1.0→==7.2.1==3.0.6→==3.1.0==4.13.5→==4.14.0==0.6.4→==0.6.5==3.11→==3.12==9.1.1→==9.2.0==1.4.0→==1.4.1==2.9.0.post0→==3.0.0==1.6.4→==1.7.0==2026.5→==2026.6==0.17.1→==0.17.3==2.5.1→==2.5.2Release Notes
googleapis/google-cloud-python (bigquery-magics)
v0.15.2: bigquery-magics: v0.15.2Compare Source
Features
Bug Fixes
certifi/python-certifi (certifi)
v2026.10.23Compare Source
tox-dev/filelock (filelock)
v4.2.5Compare Source
Bug fixes
acquireandacquireraiseTypeErrorfor a blocking that is not abool, as the constructor and theblockingsetter already do. A truthy value such as the string"false"used to count asTrue, so a call meant as a single attempt waited for the instance'stimeout, and without a limit at the default-1(#870) by @simpleqt and @gaborbernat.SoftFileLockacquisition whose first read of its new marker's identity failed reads it again before rolling back. On Windows the rollback could otherwise not recognize the marker it had created, and the empty marker it left blocked the path for every later acquisition, since no contender breaks an empty marker (#869) by @simpleqt and @gaborbernat.fork()child of a process holding aSoftFileLeasestarts from an unheld claim. It used to inherit the parent's token, last compromise and heartbeat, sotokenandcompromisereported a claim the child never held whileis_lockedreported it unheld (#868) by @dxbjavid and @gaborbernat.FileLockorSoftFileLockno longer creates the lock file's parent directory. After a rename of that directory during the hold, the nested acquire recreated the old name, and when a file had taken the name it raisedFileExistsErrorand left the hold's recursion count incremented (#878) by @0x5t4l1n and @gaborbernat.ReadWriteLockfailing every acquire with "link directory ... was replaced while opening" in a group-writable directory whose inherited ACL, such as an NFSv4 one on ZFS, opens the link directory to the group. The lock now closes the empty link directory to its owner, and where the filesystem refuses that, such as ZFS withaclmode=restricted, it names the directory to make writable by its owner only (#898) by @gaborbernat.SoftFileLock,MarkerSoftFileLockandSoftFileLeaseraisingOverflowErrorout ofacquire(), or never reclaiming a dead holder's lock, when a stranded restore claim beside the lock names a process number outside1..2**31-1or spells it in non-ASCII digits. Such a claim is now ignored, as no filelock writes one (#871) by @dxbjavid and @gaborbernat.subprocess.Popenafterwait()ormultiprocessing.Processafterjoin(). Acquiring such a lock with the defaulttimeout=-1waited forever (#874) by @nk-batman21.chdirbetween the refusedO_RDWRopen and the reopen made the acquisition wait on a file that is not there, or probe one in another directory. The reopen now uses the path the acquisition pinned (#889) by @dxbjavid and @gaborbernat.EMLINK, the error FreeBSD reports when a no-follow open refuses a symlink, in a soft reader/writer lock's protocol tree, so heartbeat reports lost ownership there rather than a transient refresh error (#866) by @pacocartones and @gaborbernat.ReadWriteLockorAsyncReadWriteLockraises theImportErrorwhen a module other than Python'ssqlite3is missing, as in a frozen application that left out a filelock submodule. The names areNoneonly without SQLite (#880) by @pintu544 and @gaborbernat.Documentation
blocking=Falseinstead of a tinytimeout(#873) by @tongwentao and @gaborbernat.Packaging
New Contributors
PyPI release
Full Changelog
googleapis/google-cloud-python (google-cloud-bigquery)
v3.47.0Compare Source
Features
Bug Fixes
ipython/ipython (ipython)
v9.18.0Compare Source
aio-libs/multidict (multidict)
v7.2.1Compare Source
=====
(2026-10-24)
Bug fixes
Fixed a regression in 7.2.0 where a subclass of
:class:
~multidict.MultiDictProxyor :class:~multidict.CIMultiDictProxythat converted its argument in its own
__init__()raised:exc:
TypeErrorbefore that__init__()ran; such a subclass got anempty multidict until its
__init__()set the proxied one-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1824, :issue:1825.v7.2.0Compare Source
=====
(2026-10-23)
7.2.0 drops Python 3.10, fixes a crash in a proxy built without
__init__()and a :exc:MemoryErrorfrom a huge__length_hint__(),and is otherwise a performance release for the C extension: lookups,
adds, updates and deletes each needed a few percent fewer instructions.
Bug fixes
Stopped a huge
__length_hint__()from raising :exc:MemoryErrorin:meth:
~multidict.MultiDict.extend, :meth:~multidict.MultiDict.updateand :meth:
~multidict.MultiDict.merge; the C extension capped the roomit reserved for the hint at the largest table the constructor allocates
up front -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1767.Fixed a segmentation fault when using a :class:
~multidict.MultiDictProxyor :class:
~multidict.CIMultiDictProxybuilt by__new__()without__init__();__new__()started requiring the proxied multidict, thesame argument as the constructor -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1782.Features
Sped up reading a multidict in the C extension.
md[key],:meth:
~multidict.MultiDict.getand :meth:~multidict.MultiDict.getonebecame up to 7% faster by returning the lookup's result by value instead
of through a pointer to the caller's local, which had made
-fstack-protector-strongadd a stack canary to every call. On the GILbuild a :meth:
~multidict.MultiDict.getmiss became 5% faster andkey in mdinlined its hash table lookup. On the free-threaded build:meth:
~multidict.MultiDict.getallstopped taking the multidict's lockfor a multidict without repeated keys, the way
:meth:
~multidict.MultiDict.getalready avoided it.len(md.keys())and iterating over the keys of a multidict that holds a key more than
once became 4% to 13% faster -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1775, :issue:1776, :issue:1781, :issue:1800, :issue:1817.Sped up building and updating a multidict in the C extension. On the GIL
build, constructing a multidict from a sequence of pairs needed 8% to 10%
fewer instructions and :meth:
~multidict.MultiDict.update3.5% to 4.5%fewer. On the free-threaded build, building a
:class:
~multidict.MultiDictbecame up to 14% faster, since a table thatis both full and unable to hold the new key in its compact form was grown
and moved in one rebuild, and :meth:
~multidict.MultiDict.add,md[key] = valuefor a new key and:meth:
~multidict.MultiDict.setdefaultneeded 2% to 3% fewerinstructions, about 1% fewer on the GIL build. Updating a multidict with
existing keys needed 1.5% to 2.9% fewer instructions, while adding a new
key needed about 0.5% more on the GIL build -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1763, :issue:1774, :issue:1780, :issue:1785, :issue:1802.Sped up replacing and removing items in the C extension.
:meth:
~multidict.MultiDict.add, :meth:~multidict.MultiDict.getall,md[key] = valueanddel md[key]stopped computing the identityof a key that, or whose :class:
~multidict.istrcanonical form, alreadyserves as one, as
md[key]did, and checked a:class:
~multidict.CIMultiDictkey holding uppercase letters only once.On the GIL build
del md[key]needed 4% to 5% fewer instructions,md[key] = valueabout 2% fewer and :meth:~multidict.MultiDict.pop1% fewer. Replacing a key that had duplicates needed 0.8% to 1.7% fewer
instructions, and :meth:
~multidict.MultiDict.clearbecame 6% faster onthe free-threaded build -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1769, :issue:1770, :issue:1779, :issue:1796, :issue:1809.Removals and backward incompatible breaking changes
Dropped support for Python 3.10 as it has reached end of life
-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1777.Improved documentation
Refreshed the instruction-count tables in the benchmarking reference
against the current tree -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1816, :issue:1818.Packaging updates and notes for downstreams
Added the CPython 3.15 trove classifier and started testing the
GIL and free-threaded 3.15 builds in CI -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1766.Contributor-facing changes
Split the release publishing and signing across four parallel jobs, so
that each one finishes well within the lifetime of its short-lived PyPI
upload token -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1768, :issue:1822.Changed the
clear()benchmarks to clear a thousand prebuiltmultidicts of 0 to 99 items each, copied outside the measured region,
since the copy inside the timed loop and the single small table it
measured made the result swing by up to 19% between runs of the same
commit -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1784.Pinned Hypothesis in the MyPy pre-commit hooks and dropped a
type: ignorecomment from the Hypothesis tests that became unusedonce Hypothesis annotated
run_state_machine_as_test(), which failedthe MyPy lint job -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1820.Fixed a test of a huge
__length_hint__()failing on 32-bit builds,where its
2**40hint did not fit aPy_ssize_t-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1821.Miscellaneous internal changes
Split the C extension's helpers per table kind, so that the lookup
loops of
pop(),popall(), item replacement andupdate(), thetable rebuild and the deferred delete of an entry call the helper for
their own kind instead of testing it again, and moved the choice between
overwriting and dropping each entry of a repeated key into the per-kind
loops of
update(). Folded helpers with a single caller into thatcaller: choosing the kind of a new table, reading a compact entry's
identity and hash, filling a new entry, replacing a key's values,
deleting a key and looking up the first value of a key that needs a
computed identity. Merged the two per-kind checks for a deleted entry
into one, and removed the separate watched copies of delete, pop and
replace, folding the add that follows a missed replace into the replace
itself -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1771, :issue:1772, :issue:1773, :issue:1786, :issue:1788,:issue:
1789, :issue:1790, :issue:1792, :issue:1804, :issue:1805,:issue:
1810, :issue:1811.Removed duplicated code from the C extension: the
(key, default)methods shared their argument parsing and missing-key result, and one
macro each replaced the copies of the lock-free compact entry match on
the free-threaded build and of the per-kind dispatch of a single key
lookup. Turned the watcher record, flush and pending check helpers and
_growth_rate()into macros, so that a multidict without watchersskipped evaluating the event arguments, renamed the lowercase
function-like macros to upper case, and dropped the leading underscore
from the watcher functions that the macros call from other headers
-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1793, :issue:1794, :issue:1795, :issue:1806, :issue:1807,:issue:
1808, :issue:1812.Adjusted how the C extension spends GCC's inlining budget: marked most
checks that lead to a raised exception as unlikely, so the compiler
moves the error paths out of the hot code, kept the event name lookup of
a failing watcher callback report and the cleanup of a dropped watcher
event log out of line, and dropped the
inlinehint from the helpersthat compute a table's size and that rebuild, build or free a table's
keys -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1783, :issue:1791, :issue:1801, :issue:1815.Moved the C extension's
repr()of multidicts, proxies and views andits equality comparison out of the hash table header, each into a header
of its own -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1778, :issue:1787.pandas-dev/pandas (pandas)
v3.1.0: pandas 3.1.0Compare Source
We are pleased to announce the release of pandas 3.1.0.
This release includes some new features, bug fixes, and performance improvements. We recommend that all users upgrade to this version.
Highlights include:
DataFrame.select()and updatedDataFrame.filter()methodpd.read_csv(), with parallel reads of large filesSee the detailed release notes for a list of all the changes.
The release can be installed from PyPI:
Or from conda-forge
Please report any issues with the release on the pandas issue tracker.
Thanks to all the contributors who made this release possible.
tox-dev/platformdirs (platformdirs)
v4.14.0Compare Source
Features
ensure_existsin the module-level media directory functions, such asuser_documents_path, to create a directory set throughXDG_*_DIRoruser-dirs.dirs(#656) by @darrenhuai and @gaborbernat.Bug fixes
use_site_for_root, ignoring the invoking user'sXDG_*_DIR,user-dirs.dirsandXDG_DATA_HOME, and create no inherited media directory underensure_exists(#661) by @gaborbernat.ValueErrorfromsite_data_dirandsite_config_dirundermultipath=Truewhenappnameorversioncontainsos.pathsep, rather than returning a string that splits into a directory outside the site base (#662) by @gaborbernat.user-dirs.dirsvalue with a long run of blanks in linear time, rather than in time quadratic in the run's length on every Unix media directory lookup (#663) by @gaborbernat.HOMEas unset on Unix, macOS and iOS, taking the home from the password database or raisingRuntimeError, rather than resolving user directories against the working directory (#664) by @gaborbernat.XDG_RUNTIME_DIRinuser_runtime_dirwhen the value ends with/or/., which made the check follow the link (#665) by @gaborbernat.user_*_dircalls withuse_site_for_root=Truewhen the effective uid is 0, so a setuid-root process gets the site directories, and name and check the runtime directory by the effective uid (#666) by @gaborbernat.XDG_RUNTIME_DIRcheck of the Unixuser_runtime_dirto the macOS one, so it no longer uses a directory that is a symlink, owned by another user or not mode0700(#667) by @gaborbernat.XDG_RUNTIME_DIRbelow a parent that another user can replace, such as their own entry in/tmp, instead of creating the runtime directory through it (#668) by @gaborbernat.ensure_existsandplace_runtime_filecreate it before checking it, andfind_runtime_filechecks it again after a hit (#669) by @gaborbernat.PermissionErroron macOS whenensure_existswould create the site cache through a/Library/Caches/$appnamethat is a symlink, not a directory, or owned by a user other than root and the current one (#670) by @gaborbernat.ensure_exists, raiseFileExistsErrorwhen a configured media directory such asuser_documents_diris a regular file or a symlink to one, instead of returning the file's path. Dangling symlinks are still returned unchanged (#672) by @rupayon123 and @gaborbernat.New Contributors
PyPI release
Full Changelog
v4.13.7Compare Source
Bug fixes
user-dirs.dirsexists but cannot be read, rather than raisingPermissionErrororIsADirectoryError(#632) by @Debasishhh and @gaborbernat.USERPROFILEwhenHOMEis empty, rather than raisingRuntimeError(#635) by @pabszero and @gaborbernat.$HOMEentries inuser-dirs.dirsto/Documentsinstead of//Documentswhen the home directory is/(#636) by @darrenhuai and @gaborbernat.python -m platformdirswhen the home directory is unknown, rather than stopping withRuntimeError(#638) by @tongwentao and @gaborbernat.FileNotFoundErrorfrom theplace_*_filemethods when the user directory is on a missing Windows drive or network share, rather than recursing untilRecursionError(#639) by @nk-batman21 and @gaborbernat.iter_*_pathsmethod infind_*_fileandfind_*_files, rather than the base class ones (#640) by @KennyMcSimpson and @gaborbernat.isolated_dirspaths under a relative root after the working directory changes, and yield the root as an absolute path (#643) by @0x5t4l1n and @gaborbernat.\\server, instead of treating the application name as the share (#647) by @RedCat888 and @gaborbernat.Documentation
/opt/homebrewfrom a macOS source comment. Homebrew replaces it with a placeholder when bottling on Apple Silicon but not on Linux, so formulae that bundle platformdirs could not share one bottle across both (#644) by @Moisan and @gaborbernat.New Contributors
PyPI release
Full Changelog
v4.13.6Compare Source
Packaging
🐍 PyPI release
📜 Full Changelog
pyasn1/pyasn1 (pyasn1)
v0.6.5Compare Source
instead of repeatedly shifting a growing integer and slicing the
remaining bytes (thanks for reporting, manus-use, manus-pi, ucsurf,
adriank31)
in linear time while preserving their decoded bit values, including
intermediate fragment padding (thanks for reporting, manus-use)
character-string fragments and indefinite-length ANY content in
linear time. Nested constructed OCTET STRING fragments now contribute
their decoded octets (thanks for reporting, alimony, manus-pi, adriank31)
after two distinct tag sets to prevent quadratic CPU use from
colliding long tag IDs (thanks for reporting, droideck)
eliben/pycparser (pycparser)
v3.12Compare 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 ofConfiguration
📅 Schedule: (UTC)
🚦 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.