fix(deps): update all non-major dependencies

This MR contains the following updates:

Package Type Update Change
Authlib dependencies minor 1.3.1 -> 1.6.3
Jinja2 (changelog) dependencies patch 3.1.4 -> 3.1.6
Markdown (changelog) dependencies minor 3.7 -> 3.9
SQLAlchemy (changelog) dependencies patch 1.4.53 -> 1.4.54
Werkzeug (changelog) dependencies minor 3.0.3 -> 3.1.3
alembic (changelog) dependencies minor 1.13.2 -> 1.16.5
asgiref (changelog) dependencies minor 3.8.1 -> 3.9.1
bcrypt dependencies minor 4.2.0 -> 4.3.0
bleach dependencies minor 6.1.0 -> 6.2.0
coverage dev-dependencies minor 7.6.1 -> 7.10.6
email-validator dependencies minor 2.2.0 -> 2.3.0
fakeredis dependencies minor 2.23.5 -> 2.31.1
filelock dependencies minor 3.15.4 -> 3.19.1
grafana/grafana minor 11.1.3 -> 11.6.5
grafana/tempo minor 2.5.0 -> 2.8.2
greenlet (changelog) dependencies minor 3.1.1 -> 3.2.4
httpx (changelog) dependencies minor ^0.27.0 -> ^0.28.0
lxml (source, changelog) dependencies minor 5.3.0 -> 5.4.0
mysqlclient dependencies patch 2.2.4 -> 2.2.7
opentelemetry-api dependencies minor 1.26.0 -> 1.36.0
opentelemetry-exporter-otlp-proto-http dependencies minor 1.26.0 -> 1.36.0
opentelemetry-sdk dependencies minor 1.26.0 -> 1.36.0
orjson (changelog) dependencies minor 3.10.7 -> 3.11.3
paginate dependencies patch 0.5.6 -> 0.5.7
posix-ipc dependencies minor 1.1.1 -> 1.3.0
prometheus-fastapi-instrumentator dependencies minor 7.0.0 -> 7.1.0
pygit2 (changelog) dependencies minor 1.17.0 -> 1.18.2
pytest (changelog) dev-dependencies minor 8.3.2 -> 8.4.2
pytest-asyncio (changelog) dev-dependencies minor ^0.23.0 -> ^0.26.0
pytest-tap dev-dependencies minor 3.4 -> 3.5
pytest-xdist (changelog) dependencies minor 3.6.1 -> 3.8.0
python-multipart (changelog) dependencies patch 0.0.19 -> 0.0.20
redis (changelog) dependencies minor 5.0.8 -> 5.3.1
requests (source, changelog) dependencies patch 2.32.3 -> 2.32.5
tomlkit dependencies patch 0.13.2 -> 0.13.3
uvicorn (changelog) dependencies minor ^0.30.0 -> ^0.35.0
watchfiles (changelog) dev-dependencies minor 1.0.4 -> 1.1.0

Release Notes

authlib/authlib (Authlib)

v1.6.3: Version 1.6.3

Compare Source

What's Changed

Full Changelog: https://github.com/authlib/authlib/compare/v1.6.2...v1.6.3

v1.6.2: Version 1.6.2

Compare Source

What's Changed

Full Changelog: https://github.com/authlib/authlib/compare/v1.6.1...v1.6.2

v1.6.1: Version 1.6.1

Compare Source

  • Filter key set with additional "alg" and "use" parameters.

v1.6.0: Version 1.6.0

Compare Source

v1.5.2: Version 1.5.2

Compare Source

Released on Apr 1, 2025

  • Forbid fragments in redirect_uris. #​714
  • Fix invalid characters in error_description. #​720
  • Add claims_cls parameter for client's parse_id_token method. #​725

v1.5.1: Version 1.5.1

Compare Source

Released on Feb 28, 2025

  • Fix RFC9207 iss parameter. #​715

v1.5.0: Version 1.5.0

Compare Source

  • Fix token introspection auth method for clients. #​662
  • Optional typ claim in JWT tokens. #​696
  • JWT validation leeway. #​689
  • Implement server-side RFC9207. #​700 #​701
  • generate_id_token can take a kid parameter. #​702
  • More detailed InvalidClientError. #​706
  • OpenID Connect Dynamic Client Registration implementation. #​707

v1.4.1: Version 1.4.1

Compare Source

  • Improve garbage collection on OAuth clients. #​698
  • Fix client parameters for httpx. #​694

v1.4.0: Version 1.4.0

Compare Source

Bugfixes

  • Fix id_token decoding when kid is null. #​659
  • Support for Python 3.13. #​682
  • Force login if the prompt parameter value is login. #​637
  • Support for httpx 0.28. #​695

Breaking changes

  • Stop support for Python 3.8. #​682

v1.3.2: Version 1.3.2

Compare Source

  • Prevent ever-growing session size for OAuth clients.
  • Revert quote client id and secret.
  • unquote basic auth header for authorization server.
pallets/jinja (Jinja2)

v3.1.6

Compare Source

Released 2025-03-05

  • The |attr filter does not bypass the environment's attribute lookup, allowing the sandbox to apply its checks. :ghsa:cpwx-vrp4-4pq7

v3.1.5

Compare Source

Released 2024-12-21

  • The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument. :ghsa:q2x7-8rv6-6q7h
  • Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax. :issue:1792, :ghsa:gmj6-6f8f-6699
  • Sandbox does not allow clear and pop on known mutable sequence types. :issue:2032
  • Calling sync render for an async template uses asyncio.run. 🇵🇷1952
  • Avoid unclosed auto_aiter warnings. 🇵🇷1960
  • Return an aclose-able AsyncGenerator from Template.generate_async. 🇵🇷1960
  • Avoid leaving root_render_func() unclosed in Template.generate_async. 🇵🇷1960
  • Avoid leaving async generators unclosed in blocks, includes and extends. 🇵🇷1960
  • The runtime uses the correct concat function for the current environment when calling block references. :issue:1701
  • Make |unique async-aware, allowing it to be used after another async-aware filter. :issue:1781
  • |int filter handles OverflowError from scientific notation. :issue:1921
  • Make compiling deterministic for tuple unpacking in a {% set ... %} call. :issue:2021
  • Fix dunder protocol (copy/pickle/etc) interaction with Undefined objects. :issue:2025
  • Fix copy/pickle support for the internal missing object. :issue:2027
  • Environment.overlay(enable_async) is applied correctly. 🇵🇷2061
  • The error message from FileSystemLoader includes the paths that were searched. :issue:1661
  • PackageLoader shows a clearer error message when the package does not contain the templates directory. :issue:1705
  • Improve annotations for methods returning copies. 🇵🇷1880
  • urlize does not add mailto: to values like @a@b. 🇵🇷1870
  • Tests decorated with @pass_context`` can be used with the ``|select`` filter. :issue:1624`
  • Using set for multiple assignment (a, b = 1, 2) does not fail when the target is a namespace attribute. :issue:1413
  • Using set in all branches of {% if %}{% elif %}{% else %} blocks does not cause the variable to be considered initially undefined. :issue:1253
Python-Markdown/markdown (Markdown)

v3.9

Compare Source

v3.8.2

Compare Source

Fixed
  • Fix codecs deprecation in Python 3.14.
  • Fix issue with unclosed comment parsing in Python 3.14.
  • Fix issue with unclosed declarations in Python 3.14.
  • Fix issue with unclosed HTML tag <foo and Python 3.14.

v3.8.1

Compare Source

Fixed
  • Ensure incomplete markup declaration in raw HTML doesn't crash parser (#​1534).
  • Fixed dropped content in md_in_html (#​1526).
  • Fixed HTML handling corner case that prevented some content from not being rendered (#​1528).

v3.8

Compare Source

Changed
  • DRY fix in abbr extension by introducing method create_element (#​1483).
  • Clean up test directory by removing some redundant tests and port non-redundant cases to the newer test framework.
  • Improved performance of the raw HTML post-processor (#​1510).
Fixed
  • Backslash Unescape IDs set via attr_list on toc (#​1493).
  • Ensure md_in_html processes content inside "markdown" blocks as they are parsed outside of "markdown" blocks to keep things more consistent for third-party extensions (#​1503).
  • md_in_html handle tags within inline code blocks better (#​1075).
  • md_in_html fix handling of one-liner block HTML handling (#​1074).
  • Ensure <center> is treated like a block-level element (#​1481).
  • Ensure that abbr extension respects AtomicString and does not process perceived abbreviations in these strings (#​1512).
  • Ensure smarty extension correctly renders nested closing quotes (#​1514).
django/asgiref (asgiref)

v3.9.1

Compare Source

  • Fixed deletion of Local values affecting other contexts. (#​523)

  • Skip CPython specific garbage collection test on pypy. (#​521)

v3.9.0

Compare Source

  • Adds support for Python 3.13.

  • Drops support for (end-of-life) Python 3.8.

  • Fixes an error with conflicting kwargs between AsyncToSync and the wrapped function. (#​471)

  • Fixes Local isolation between asyncio Tasks. (#​478)

  • Fixes a reference cycle in Local (#​508)

  • Fixes a deadlock in CurrentThreadExecutor with nested async_to_sync → sync_to_async → async_to_sync → create_task calls. (#​494)

  • The ApplicationCommunicator testing utility will now return the task result if it's already completed on send_input and receive_nothing. You may need to catch (e.g.) the asyncio.exceptions.CancelledError if sending messages to already finished consumers in your tests. (#​505)

mozilla/bleach (bleach)

v6.2.0

Compare Source

Backwards incompatible changes

  • Dropped support for Python 3.8. (#​737)

Security fixes

None

Bug fixes

  • Add support for Python 3.13. (#​736)
  • Remove six depdenncy. (#​618)
  • Update known-good versions for tinycss2. (#​732)
  • Fix additional < followed by characters and EOF issues. (#​728)
nedbat/coveragepy (coverage)

v7.10.6

Compare Source

  • Fix: source directories were not properly communicated to subprocesses that ran in different directories, as reported in issue 1499_. This is now fixed.

  • Performance: Alex Gaynor continues fine-tuning <pull 2038_>_ the speed of combination, especially with many contexts.

.. _issue 1499: https://github.com/nedbat/coveragepy/issues/1499 .. _pull 2038: https://github.com/nedbat/coveragepy/pull/2038

.. _changes_7-10-5:

v7.10.5

Compare Source

  • Big speed improvements for coverage combine: it's now about twice as fast! Huge thanks to Alex Gaynor for pull requests 2032 <pull 2032_>, 2033 <pull 2033_>, and 2034 <pull 2034_>_.

.. _pull 2032: https://github.com/nedbat/coveragepy/pull/2032 .. _pull 2033: https://github.com/nedbat/coveragepy/pull/2033 .. _pull 2034: https://github.com/nedbat/coveragepy/pull/2034

.. _changes_7-10-4:

v7.10.4

Compare Source

  • Added patch = fork for times when the built-in forking support is insufficient.

  • Fix: patch = execv also inherits the entire coverage configuration now.

.. _changes_7-10-3:

v7.10.3

Compare Source

  • Fixes for patch = subprocess:

    • If subprocesses spawned yet more subprocesses simultaneously, some coverage could be missed. This is now fixed, closing issue 2024_.

    • If subprocesses were created in other directories, their data files were stranded there and not combined into the totals, as described in issue 2025_. This is now fixed.

    • On Windows (or maybe only some Windows?) the patch would fail with a ModuleNotFound error trying to import coverage. This is now fixed, closing issue 2022_.

    • Originally only options set in the coverage configuration file would apply to subprocesses. Options set on the coverage run command line (such as --branch) wouldn't be communicated to the subprocesses. This could lead to combining failures, as described in issue 2021_. Now the entire configuration is used in subprocesses, regardless of its origin.

    • Added debug=patch to help diagnose problems.

  • Fix: really close all SQLite databases, even in-memory ones. Closes issue 2017_.

.. _issue 2017: https://github.com/nedbat/coveragepy/issues/2017 .. _issue 2021: https://github.com/nedbat/coveragepy/issues/2021 .. _issue 2022: https://github.com/nedbat/coveragepy/issues/2022 .. _issue 2024: https://github.com/nedbat/coveragepy/issues/2024 .. _issue 2025: https://github.com/nedbat/coveragepy/issues/2025

.. _changes_7-10-2:

v7.10.2

Compare Source

  • Fix: some code with NOP bytecodes could report missing branches that are actually executed. This is now fixed, closing issue 1999_. Python 3.9 still shows the problem.

.. _issue 1999: https://github.com/nedbat/coveragepy/issues/1999

.. _changes_7-10-1:

v7.10.1

Compare Source

  • Fix: the exclusion for if TYPE_CHECKING: was wrong: it marked the branch as partial, but it should have been a line exclusion so the entire clause would be excluded. Improves issue 831_.

  • Fix: changed where .pth files are written for patch = subprocess, closing issue 2006_.

.. _issue 2006: https://github.com/nedbat/coveragepy/issues/2006

.. _changes_7-10-0:

v7.10.0

Compare Source

  • A new configuration option: ":ref:config_run_patch" specifies named patches to work around some limitations in coverage measurement. These patches are available:

    • patch = _exit lets coverage save its data even when :func:os._exit() <python:os._exit> is used to abruptly end the process. This closes long-standing issue 310_ as well as its duplicates: issue 312, issue 1673, issue 1845, and issue 1941.

    • patch = subprocess measures coverage in Python subprocesses created with :mod:subprocess, :func:os.system, or one of the :func:execv <python:os.execl> or :func:spawnv <python:os.spawnl> family of functions. Closes old issue 367, its duplicate issue 378 and old issue 689_.

    • patch = execv adjusts the :func:execv <python:os.execl> family of functions to save coverage data before ending the current program and starting the next. Not available on Windows. Closes issue 43_ after 15 years!

  • The HTML report now dimly colors subsequent lines in multi-line statements. They used to have no color. This gives a better indication of the amount of code missing in the report. Closes issue 1308_.

  • Two new exclusion patterns are part of the defaults: ... is automatically excluded as a line and if TYPE_CHECKING: is excluded as a branch. Closes issue 831_.

  • A new command-line option: --save-signal=USR1 specifies a signal that coverage.py will listen for. When the signal is sent, the coverage data will be saved. This makes it possible to save data from within long-running processes. Thanks, Arkady Gilinsky <pull 1998_>_.

  • A new configuration option: ":ref:config_report_partial_also" is a list of regexes to add as pragmas for partial branches. This parallels the ":ref:config_report_exclude_also" setting for adding line exclusion patterns.

  • A few file path configuration settings didn't allow for tilde expansion: :ref:config_json_output, :ref:config_lcov_output and :ref:config_run_debug_file. This is now fixed.

  • Wheels are included for 3.14 now that 3.14 rc1 is available.

  • We no longer ship a PyPy-specific wheel. PyPy will install the pure-Python wheel. Closes issue 2001_.

  • In the very unusual situation of not having a current frame, coverage no longer crashes when using the sysmon core, fixing issue 2005_.

.. _issue 43: https://github.com/nedbat/coveragepy/issues/43 .. _issue 310: https://github.com/nedbat/coveragepy/issues/310 .. _issue 312: https://github.com/nedbat/coveragepy/issues/312 .. _issue 367: https://github.com/nedbat/coveragepy/issues/367 .. _issue 378: https://github.com/nedbat/coveragepy/issues/378 .. _issue 689: https://github.com/nedbat/coveragepy/issues/689 .. _issue 831: https://github.com/nedbat/coveragepy/issues/831 .. _issue 1308: https://github.com/nedbat/coveragepy/issues/1308 .. _issue 1673: https://github.com/nedbat/coveragepy/issues/1673 .. _issue 1845: https://github.com/nedbat/coveragepy/issues/1845 .. _issue 1941: https://github.com/nedbat/coveragepy/issues/1941 .. _pull 1998: https://github.com/nedbat/coveragepy/pull/1998 .. _issue 2001: https://github.com/nedbat/coveragepy/issues/2001 .. _issue 2005: https://github.com/nedbat/coveragepy/issues/2005

.. _changes_7-9-2:

v7.9.2

Compare Source

  • Fix: complex conditionals within a line might cause a KeyError when using sys.monitoring, as reported in issue 1991_. This is now fixed.

  • Fix: we can now measure coverage for code in Python archive (.par) files. Thanks, Itamer Oren <pull 1984_>_.

.. _pull 1984: https://github.com/nedbat/coveragepy/pull/1984 .. _issue 1991: https://github.com/nedbat/coveragepy/issues/1991

.. _changes_7-9-1:

v7.9.1

Compare Source

  • The "no-ctracer" warning is not issued for Python pre-release versions. Coverage doesn't ship compiled wheels for those versions, so this was far too noisy.

  • On Python 3.14+, the "sysmon" core is now the default if it's supported for your configuration. Plugins and dynamic contexts are still not supported with it.

.. _changes_7-9-0:

v7.9.0

Compare Source

  • Added a [run] core configuration setting to specify the measurement core, which was previously only available through the COVERAGE_CORE environment variable. Finishes issue 1746_.

  • Fixed incorrect rendering of f-strings with doubled braces, closing issue 1980_.

  • If the C tracer core can't be imported, a warning ("no-ctracer") is issued with the reason.

  • The C tracer core extension module now conforms to PEP 489, closing issue 1977. Thanks, Adam Turner <pull 1978_>_.

  • Fixed a "ValueError: min() arg is an empty sequence" error caused by strange empty modules, found by oss-fuzz_.

.. _issue 1746: https://github.com/nedbat/coveragepy/issues/1746 .. _issue 1977: https://github.com/nedbat/coveragepy/issues/1977 .. _pull 1978: https://github.com/nedbat/coveragepy/pull/1978 .. _issue 1980: https://github.com/nedbat/coveragepy/issues/1980 .. _PEP 489: https://peps.python.org/pep-0489 .. _oss-fuzz: https://google.github.io/oss-fuzz/

.. _changes_7-8-2:

v7.8.2

Compare Source

  • Wheels are provided for Windows ARM64 on Python 3.11, 3.12, and 3.13. Thanks, Finn Womack <pull 1972_>_.

.. _issue 1971: https://github.com/nedbat/coveragepy/pull/1971 .. _pull 1972: https://github.com/nedbat/coveragepy/pull/1972

.. _changes_7-8-1:

v7.8.1

Compare Source

  • A number of EncodingWarnings were fixed that could appear if you've enabled PYTHONWARNDEFAULTENCODING, fixing issue 1966. Thanks, Henry Schreiner <pull 1967_>.

  • Fixed a race condition when using sys.monitoring with free-threading Python, closing issue 1970_.

.. _issue 1966: https://github.com/nedbat/coveragepy/issues/1966 .. _pull 1967: https://github.com/nedbat/coveragepy/pull/1967 .. _issue 1970: https://github.com/nedbat/coveragepy/issues/1970

.. _changes_7-8-0:

v7.8.0

Compare Source

  • Added a new source_dirs setting for symmetry with the existing source_pkgs setting. It's preferable to the existing source setting, because you'll get a clear error when directories don't exist. Fixes issue 1942. Thanks, Jeremy Fleischman <pull 1943_>.

  • Fix: the PYTHONSAFEPATH environment variable new in Python 3.11 is properly supported, closing issue 1696. Thanks, Philipp A. <pull 1700_>. This works properly except for a detail when using the coverage command on Windows. There you can use python -m coverage instead if you need exact emulation.

.. _issue 1696: https://github.com/nedbat/coveragepy/issues/1696 .. _pull 1700: https://github.com/nedbat/coveragepy/pull/1700 .. _issue 1942: https://github.com/nedbat/coveragepy/issues/1942 .. _pull 1943: https://github.com/nedbat/coveragepy/pull/1943

.. _changes_7-7-1:

v7.7.1

Compare Source

  • A few small tweaks to the sys.monitoring support for Python 3.14. Please test!

.. _changes_7-7-0:

v7.7.0

Compare Source

  • The Coverage object has a new method, :meth:.Coverage.branch_stats for getting simple branch information for a module. Closes issue 1888_.

  • The :class:Coverage constructor<.Coverage> now has a plugins parameter for passing in plugin objects directly, thanks to Alex Gaynor <pull 1919_>_.

  • Many constant tests in if statements are now recognized as being optimized away. For example, previously if 13: would have been considered a branch with one path not taken. Now it is understood as always true and no coverage is missing.

  • The experimental sys.monitoring support now works for branch coverage if you are using Python 3.14.0 alpha 6 or newer. This should reduce the overhead coverage.py imposes on your test suite. Set the environment variable COVERAGE_CORE=sysmon to try it out.

  • Confirmed support for PyPy 3.11. Thanks Michał Górny.

.. _issue 1888: https://github.com/nedbat/coveragepy/issues/1888 .. _pull 1919: https://github.com/nedbat/coveragepy/pull/1919

.. _changes_7-6-12:

v7.6.12

Compare Source

  • Fix: some aarch64 distributions were missing (issue 1927_). These are now building reliably.

.. _issue 1927: https://github.com/nedbat/coveragepy/issues/1927

.. _changes_7-6-11:

v7.6.11

Compare Source

  • Fix: a memory leak in CTracer has been fixed. The details are in issue 1924_ and pytest-dev 676_. This should reduce the memory footprint for everyone even if it hadn't caused a problem before.

  • We now ship a py3-none-any.whl wheel file. Thanks, Russell Keith-Magee <pull 1914_>_.

.. _pull 1914: https://github.com/nedbat/coveragepy/pull/1914 .. _issue 1924: https://github.com/nedbat/coveragepy/issues/1924 .. _pytest-dev 676: https://github.com/pytest-dev/pytest-cov/issues/676

.. _changes_7-6-10:

v7.6.10

Compare Source

  • Fix: some descriptions of missing branches in HTML and LCOV reports were incorrect when multi-line statements were involved (issue 1874_ and issue 1875_). These are now fixed.

  • Fix: Python 3.14 defers evaluation of annotations <pep649_>_ by moving them into separate code objects. That code is rarely executed, so coverage.py would mark them as missing, as reported in issue 1908_. Now they are ignored by coverage automatically.

  • Fixed an obscure and mysterious problem on PyPy 3.10 seemingly involving mocks, imports, and trace functions: issue 1902_. To be honest, I don't understand the problem or the solution, but git bisect helped find it, and now it's fixed.

  • Docs: re-wrote the :ref:subprocess page to put multiprocessing first and to highlight the correct use of :class:multiprocessing.Pool <python:multiprocessing.pool.Pool>.

.. _issue 1874: https://github.com/nedbat/coveragepy/issues/1874 .. _issue 1875: https://github.com/nedbat/coveragepy/issues/1875 .. _issue 1902: https://github.com/nedbat/coveragepy/issues/1902 .. _issue 1908: https://github.com/nedbat/coveragepy/issues/1908 .. _pep649: https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-pep649

.. _changes_7-6-9:

v7.6.9

Compare Source

  • Fix: Tomas Uribe fixed <pull 1901_>_ a performance problem in the XML report. Large code bases should produce XML reports much faster now.

.. _pull 1901: https://github.com/nedbat/coveragepy/pull/1901

.. _changes_7-6-8:

v7.6.8

Compare Source

  • Fix: the LCOV report code assumed that a branch line that took no branches meant that the entire line was unexecuted. This isn't true in a few cases: the line might always raise an exception, or might have been optimized away. Fixes issue 1896_.

  • Fix: similarly, the HTML report will now explain that a line that jumps to none of its expected destinations must have always raised an exception. Previously, it would say something nonsensical like, "line 4 didn't jump to line 5 because line 4 was never true, and it didn't jump to line 7 because line 4 was always true." This was also shown in issue 1896_.

.. _issue 1896: https://github.com/nedbat/coveragepy/issues/1896

.. _changes_7-6-7:

v7.6.7

Compare Source

  • Fix: ugh, the other assert from 7.6.5 can also be encountered in the wild, so it's been restored to a conditional. Sorry for the churn.

.. _changes_7-6-6:

v7.6.6

Compare Source

  • One of the new asserts from 7.6.5 caused problems in real projects, as reported in issue 1891_. The assert has been removed.

.. _issue 1891: https://github.com/nedbat/coveragepy/issues/1891

.. _changes_7-6-5:

v7.6.5

Compare Source

  • Fix: fine-tuned the exact Python version (3.12.6) when exiting from with statements changed how they traced. This affected whether people saw the fix for issue 1880_.

  • Fix: isolate our code more from mocking in the os module that in rare cases can cause bizarre behavior <pytest-cov-666_>_.

  • Refactor: some code unreachable code paths in parser.py were changed to asserts. If you encounter any of these, please let me know!

.. _pytest-cov-666: https://github.com/pytest-dev/pytest-cov/issues/666

.. _changes_7-6-4:

v7.6.4

Compare Source

  • Fix: multi-line with statements could cause contained branches to be incorrectly marked as missing (issue 1880_). This is now fixed.

.. _issue 1880: https://github.com/nedbat/coveragepy/issues/1880

.. _changes_7-6-3:

v7.6.3

Compare Source

  • Fix: nested context managers could incorrectly be analyzed to flag a missing branch on the last context manager, as described in issue 1876_. This is now fixed.

  • Fix: the missing branch message about not exiting a module had an extra "didn't," as described in issue 1873_. This is now fixed.

.. _issue 1873: https://github.com/nedbat/coveragepy/issues/1873 .. _issue 1876: https://github.com/nedbat/coveragepy/issues/1876

.. _changes_7-6-2:

v7.6.2

Compare Source

  • Dropped support for Python 3.8 and PyPy 3.8.

  • Fix: a final wildcard match/case clause assigning to a name (case _ as value) was incorrectly marked as a missing branch. This is now fixed, closing issue 1860_.

  • Fewer things are considered branches now. Lambdas, comprehensions, and generator expressions are no longer marked as missing branches if they don't complete execution. Closes issue 1852_.

  • Fix: the HTML report didn't properly show multi-line f-strings that end with a backslash continuation. This is now fixed, closing issue 1836, thanks to LiuYinCarl and Marco Ricci <pull 1838_>.

  • Fix: the LCOV report now has correct line numbers (fixing issue 1846) and better branch descriptions for BRDA records (fixing issue 1850). There are other changes to lcov also, including a new configuration option :ref:line_checksums <config_lcov_line_checksums> to control whether line checksums are included in the lcov report. The default is false. To keep checksums set it to true. All this work is thanks to Zack Weinberg (pull 1849_ and pull 1851_).

  • Fixed the docs for multi-line regex exclusions, closing issue 1863_.

  • Fixed a potential crash in the C tracer, closing issue 1835, thanks to Jan Kühle <pull 1843_>.

.. _issue 1835: https://github.com/nedbat/coveragepy/issues/1835 .. _issue 1836: https://github.com/nedbat/coveragepy/issues/1836 .. _pull 1838: https://github.com/nedbat/coveragepy/pull/1838 .. _pull 1843: https://github.com/nedbat/coveragepy/pull/1843 .. _issue 1846: https://github.com/nedbat/coveragepy/issues/1846 .. _pull 1849: https://github.com/nedbat/coveragepy/pull/1849 .. _issue 1850: https://github.com/nedbat/coveragepy/issues/1850 .. _pull 1851: https://github.com/nedbat/coveragepy/pull/1851 .. _issue 1852: https://github.com/nedbat/coveragepy/issues/1852 .. _issue 1860: https://github.com/nedbat/coveragepy/issues/1860 .. _issue 1863: https://github.com/nedbat/coveragepy/issues/1863

.. _changes_7-6-1:

JoshData/python-email-validator (email-validator)

v2.3.0

Compare Source

  • The package name is changed from using an underscore (email_validator) to a dash (email-validator) to match PyPi's normalized package name.
  • The library no longer checks that the local part is at most 64 characters because a more careful reading of RFC 5321 indicates the limit is optional and such email addresses have been found in the wild. However the check can be restored using a new strict=True parameter, and the overall 254 character email address length limit is still in place.
  • New EmailSyntaxError messages are used for some exiting syntax errors related to @​-sign homoglyphs and invalid characters in internationalized domains.
  • When using allow_display_name=True, display names are now returned with Unicode NFC normalization.
  • TypeError is now raised if something other than str (or bytes) is passed as the email address.
cunla/fakeredis-py (fakeredis)

v2.31.1: 🌈

Compare Source

🐛 Bug Fixes
  • Sending lib_name and lib_version only when relevant #​408
  • TcpFakeServer: Closing threads on server close #​409
  • TcpFakeServer: Register Lock scripts #​406
🧰 Maintenance
  • Improve documentation of using TcpFakeServer #​409
  • Support TcpFakeServer for Python 3.9 (#​411)

Contributors

We'd like to thank all the contributors who worked on this release!

@​mgorny and @​phi-friday

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.31.0...v2.31.1

v2.31.0: 🌈

Compare Source

🚀 Features
🐛 Bug Fixes
  • version init argument typing #​401
  • include lib_name and lib_version in FakeBaseConnectionMixin
  • when using FakeValkey, raise valkey.ResponseError instead of redis.ResponseError #​402
  • fix issue with pytest-asyncio #​404 @​seifertm

New Contributors

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.30.3...v2.31.0

v2.30.3

Compare Source

🐛 Bug Fixes
  • Import Callable from typing to support python 3.8 #​398
  • FakeValkey init arguments #​400

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.30.2...v2.30.3

v2.30.2: 🌈

Compare Source

🐛 Bug Fixes
  • Import Callable from typing to support python 3.8 #​398
🧰 Maintenance
  • Refactor tests
  • FakeValkey uses valkey-py instead of redis-py

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.30.1...v2.30.2

v2.30.1: 🌈

Compare Source

🐛 Bug Fixes
  • Move LICENSE file to fakeredis/ on build #​395
  • Show warning for deprecated parameter only if parameter is included in instantiation #​384
🧰 Maintenance

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.30.0...v2.30.1

v2.30.0: 🌈

Compare Source

Changes

🚀 Features
🐛 Bug Fixes
  • aio.FakeRedis: Using inspect to get __init__ paramaters #​384
  • Discrepancy when using xread with resp3 #​393

Contributors

We'd like to thank all the contributors who worked on this release!

@​ajhetherington

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.29.0...v2.30.0

v2.29.0: 🌈

Compare Source

🚀 Features
  • Implement support for NOVALUES for HSCAN
  • Implement support for CLIENT LIST #​376
🐛 Bug Fixes
  • Fix json.set nx arg behavior #​372
  • Fix issue with hset not resetting expiration over field
  • Fix inconsistent 'pending' field in return from XINFO GROUPS #​374
  • Fix TDIGEST.QUANTILE to match redis behavior on a TDigest with one value #​377
  • Fix HINCRBY/hincrbyfloat commands now don't remove ttl from hash key @​M1ha-Shvn #​381

New Contributors

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.28.1...v2.29.0

v2.28.1

Compare Source

🐛 Bug Fixes
  • Open commands.json with encoding specified #​367
  • Fix xadd to use last timestamp if the current system timestamp is lower than the last timestamp #​368

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.28.0...v2.28.1

v2.28.0

Compare Source

🚀 Features
  • implement support for WITHSCORE in ZRANK and ZREVRANK #​357
  • implement support for Connection commands HELLO, CLIENT SETNAME, CLIENT GETNAME, CLIENT ID, CLIENT INFO #​361
  • implement support for HGETEX, HSETEX, HGETDEL #​365
🐛 Bug Fixes
🧰 Maintenance
  • Refactor hypothesis tests (#​366)

Contributors

We'd like to thank all the contributors who worked on this release!

@​mgorny and @​wakonig

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.27.0...v2.28.0

v2.27.0: 🌈

Compare Source

Changes

🚀 Features
  • ACL commands support #​338
    • ACL LOAD, ACL SAVE, ACL LIST, ACL USERS, ACL GETUSER, ACL SETUSER, ACL DELUSER, ACL CAT, ACL LOG, ACL HELP, ACL WHOAMI, ACL GENPASS, ACL AUTH, ACL LOG_RESET, ACL LOG_COUNT, ACL LOG_GET, ACL LOG_HELP, ACL LOG_RESET, ACL LOG_COUNT, ACL LOG_GET, ACL LOG_HELP
  • Add support disable_decoding in async read_response #​349
  • Implement support for SADDEX, using a new set implementation with support for expiring members #​350
🧰 Maintenance
  • Remove end of life python 3.8 from test matrix
  • Add python 3.13 to test matrix
  • Improve documentation for Dragonfly/Valkey support

Contributors

We'd like to thank all the contributors who worked on this release!

@​Redoubts

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.26.2...v2.27.0

v2.26.2: 🌈

Compare Source

🐛 Bug Fixes
  • Fix bug in xreadgroup when stream length is less than COUNT with BLOCK #​344
🧰 Maintenance
  • Implement test for SADDEX (Dragonfly specific command) #​348
  • Update dependencies

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.26.1...v2.26.2

v2.26.1: 🌈

Compare Source

🧰 Maintenance

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.26.0...v2.26.1

v2.26.0: 🌈

Compare Source

🚀 Features
  • Support for server-type specific commands #​340
  • Support for Dragonfly SADDEX command #​340
🐛 Bug Fixes

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.25.1...v2.26.0

v2.25.1: 🌈

Compare Source

🐛 Bug Fixes
  • Fix missing default values for version/server_type in FakeBaseConnectionMixin #​334

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.25.0...v2.25.1

v2.25.0: 🌈

Compare Source

🚀 Features

  • Implement support for hash expiration related commands @​j00bar #​328 HEXPIRE, HEXPIREAT, HEXPIRETIME, HPERSIST, HPEXPIRE, HPEXPIREAT, HPEXPIRETIME, HPTTL, HTTL,
  • Implement support for SORT_RO #​325, EXPIRETIME #​323, and PEXPIRETIME #​324
  • Support for creating a tcp server listening to multiple clients
  • Testing against valkey 8.0 #​333
  • Improve documentation #​332

🐛 Bug Fixes

Replace typing_extensions dependency with typing-extensions #​330

Contributors

We'd like to thank all the contributors who worked on this release!

@​cunla and @​j00bar

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.24.1...v2.25.0

v2.24.1: 🌈

Compare Source

Changes

🐛 Bug Fixes
  • Fix license file added to site-packages #​320

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.24.0...v2.24.1

v2.24.0: 🌈

Compare Source

🚀 Features
  • Support for TIME SERIES commands (no support for align arguments on some commands) #​310
🐛 Bug Fixes
🧰 Maintenance
  • Update all dependencies, particularly pytest to v8
  • Add tests against Dragonfly server #​318
  • Implement decocator unsupported_server_types to enable excluding tests from running against certain server types #​318

Contributors

We'd like to thank all the contributors who worked on this release!

@​hurlenko

Full Changelog: https://github.com/cunla/fakeredis-py/compare/v2.23.5...v2.24.0

tox-dev/py-filelock (filelock)

v3.19.1

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.19.0...3.19.1

v3.18.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.17.0...3.18.0

v3.17.0: Drop 3.8

Compare Source

Full Changelog: https://github.com/tox-dev/filelock/compare/3.16.1...3.17.0

v3.16.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.16.0...3.16.1

v3.16.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.15.4...3.16.0

grafana/grafana (grafana/grafana)

v11.6.5

Compare Source

Features and enhancements

v11.6.4

Compare Source

Features and enhancements
Bug fixes

v11.6.3

Compare Source

Features and enhancements
Bug fixes
  • FlameGraph: Fix bug for function names that conflict with JavaScript object prototype properties #​106624, @​simonswine
  • Security: Fixed CVE-2025-6023
  • Security: Fixed CVE-2025-6197

v11.6.2

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415

v11.6.1

Compare Source

Bug fixes
  • Security: Fix CVE-2025-4123

v11.6.0

Compare Source

Bug fixes
  • Security: Fix CVE-2025-3454
  • Security: Fix CVE-2025-2703
  • Security: Fix CVE-2025-3260

v11.5.8

Compare Source

Features and enhancements

v11.5.7

Compare Source

Features and enhancements
Bug fixes

v11.5.6

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-6023
  • Security: Fixed CVE-2025-6197

v11.5.5

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415

v11.5.4

Compare Source

Bug fixes
  • Security: Fix CVE-2025-4123

v11.5.3

Compare Source

Features and enhancements
Bug fixes

v11.5.2

Compare Source

Features and enhancements
Bug fixes

v11.5.1

Compare Source

Bug fixes

v11.5.0

Compare Source

Features and enhancements
Bug fixes
Breaking changes
Plugin development fixes & changes

v11.4.8

Compare Source

Features and enhancements
Bug fixes

v11.4.7

Compare Source

Features and enhancements
Bug fixes

v11.4.6

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-6023
  • Security: Fixed CVE-2025-6197

v11.4.5

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415
Bug fixes
  • Security: Fixed CVE-2025-3415

v11.4.4

Compare Source

Bug fixes
  • Security: Fix CVE-2025-4123

v11.4.3

Compare Source

Features and enhancements
Bug fixes
  • Alerting: Fix token-based Slack image upload to work with channel names #​101072, @​JacobsonMT
  • InfluxDB: Improve handling of template variables contained in regular expressions (InfluxQL) #​100987, @​aangelisc
  • Service Accounts: Do not show error pop-ups for Service Account and Renderer UI flows #​101790, @​IevaVasiljeva
  • Security: Fix CVE-2025-3454
  • Security: Fix CVE-2025-2703

v11.4.2

Compare Source

Features and enhancements
Bug fixes

v11.4.1

Compare Source

Features and enhancements
  • Security: Update to Go 1.23.5 - Backport to v11.4.x #​99123, @​Proximyst
  • Security: Update to Go 1.23.5 - Backport to v11.4.x (Enterprise)
Bug fixes
Plugin development fixes & changes

v11.4.0

Compare Source

Features and enhancements
  • Cloudwatch: OpenSearch PPL and SQL support in Logs Insights

v11.3.9

Compare Source

Features and enhancements
Bug fixes

v11.3.8

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-6023
  • Security: Fixed CVE-2025-6197

v11.3.7

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415

v11.3.6

Compare Source

Bug fixes
  • Security: Fix CVE-2025-4123

v11.3.5

Compare Source

Features and enhancements
Bug fixes
  • Alerting: Fix token-based Slack image upload to work with channel names #​101488, @​moustafab
  • Service Accounts: Do not show error pop-ups for Service Account and Renderer UI flows #​101791, @​IevaVasiljeva
  • Security: Fix CVE-2025-3454
  • Security: Fix CVE-2025-2703

v11.3.4

Compare Source

Features and enhancements
Bug fixes

v11.3.3

Compare Source

Features and enhancements
  • Azure Monitor: Add a feature flag to toggle user auth for Azure Monitor only #​97576, @​adamyeats
  • Security: Update to Go 1.23.5 - Backport to v11.3.x #​99124, @​Proximyst
  • Security: Update to Go 1.23.5 - Backport to v11.3.x (Enterprise)
Bug fixes
Plugin development fixes & changes

v11.3.2

Compare Source

Features and enhancements
  • Backport: Announcement Banners: Enable feature for all cloud tiers (Enterprise)
Bug fixes

v11.3.1

Compare Source

Features and enhancements
Bug fixes

v11.3.0

Compare Source

Bug fixes
  • MigrationAssistant: Fix Migration Assistant issue [CVE-2024-9476]

v11.2.10

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415

v11.2.9

Compare Source

Bug fixes
  • Security: Fix CVE-2025-4123

v11.2.8

Compare Source

Features and enhancements
  • Chore: Bump Go version to 1.23.7 #​101294, @​macabu
  • Chore: Bump Go version to 1.23.7 (Enterprise)
Bug fixes

v11.2.7

Compare Source

Features and enhancements
Bug fixes

v11.2.6

Compare Source

Features and enhancements
  • Azure Monitor: Add a feature flag to toggle user auth for Azure Monitor only #​97565, @​adamyeats
  • Security: Update to Go 1.22.11 - Backport to v11.2.x #​99125, @​Proximyst
  • Security: Update to Go 1.22.11 - Backport to v11.2.x (Enterprise)
Bug fixes

v11.2.5

Compare Source

Bug fixes

v11.2.4

Compare Source

Features and enhancements
Bug fixes

v11.2.3

Compare Source

  • MigrationAssistant: Fix Migration Assistant issue [CVE-2024-9476]

v11.2.2

Compare Source

Bug fixes
  • SQL Expressions: Fixes CVE-2024-9264

v11.2.1

Compare Source

Bug fixes
  • Security: Fixed CVE-2025-3415

v11.2.0

Compare Source

Features and enhancements
Bug fixes
Breaking changes
Plugin development fixes & changes

v11.1.13

Compare Source

Features and enhancements

v11.1.12

Compare Source

Features and enhancements
Bug fixes

v11.1.11

Compare Source

Features and enhancements
  • Security: Update to Go 1.22.11 - Backport to v11.1.x #​99126, @​Proximyst
  • Security: Update to Go 1.22.11 - Backport to v11.1.x (Enterprise)
Bug fixes

v11.1.10

Compare Source

Bug fixes

v11.1.9

Compare Source

Features and enhancements
Bug fixes

v11.1.8

Compare Source

Bug fixes

v11.1.7

Compare Source

Bug fixes
  • SQL Expressions: Fixes CVE-2024-9264

v11.1.6

Compare Source

Bug fixes
  • SQL Expressions: Fixes CVE-2024-9264

v11.1.5

Compare Source

Bug fixes
  • Alerting: Fix permissions for prometheus rule endpoints #​91414, @​yuri-tceretian
  • Alerting: Fix persisting result fingerprint that is used by recovery threshold #​91290, @​yuri-tceretian
  • Auditing: Fix a possible crash when audit logger parses responses for failed requests (Enterprise)
  • RBAC: Fix an issue with server admins not being able to manage users in orgs that they don't belong to #​92273, @​IevaVasiljeva
  • RBAC: Fix an issue with server admins not being able to manage users in orgs that they dont belong to (Enterprise)
  • RBAC: Fix seeder failures when inserting duplicated permissions (Enterprise)
  • Snapshots: Fix panic when snapshot_remove_expired is true #​91232, @​ryantxu
  • VizTooltip: Fix positioning at bottom and right edges on mobile #​92137, @​leeoniya
Plugin development fixes & changes

v11.1.4

Compare Source

Bug fixes
  • Swagger: Fixed CVE-2024-6837.
encode/httpx (httpx)

v0.28.1

Compare Source

  • Fix SSL case where verify=False together with client side certificates.

v0.28.0

Compare Source

Be aware that the default JSON request bodies now use a more compact representation. This is generally considered a prefered style, tho may require updates to test suites.

The 0.28 release includes a limited set of deprecations...

Deprecations:

We are working towards a simplified SSL configuration API.

For users of the standard verify=True or verify=False cases, or verify=<ssl_context> case this should require no changes. The following cases have been deprecated...

  • The verify argument as a string argument is now deprecated and will raise warnings.
  • The cert argument is now deprecated and will raise warnings.

Our revised SSL documentation covers how to implement the same behaviour with a more constrained API.

The following changes are also included:

  • The deprecated proxies argument has now been removed.
  • The deprecated app argument has now been removed.
  • JSON request bodies use a compact representation. (#​3363)
  • Review URL percent escape sets, based on WHATWG spec. (#​3371, #​3373)
  • Ensure certifi and httpcore are only imported if required. (#​3377)
  • Treat socks5h as a valid proxy scheme. (#​3178)
  • Cleanup Request() method signature in line with client.request() and httpx.request(). (#​3378)
  • Bugfix: When passing params={}, always strictly update rather than merge with an existing querystring. (#​3364)

v0.27.2

Compare Source

Fixed
  • Reintroduced supposedly-private URLTypes shortcut. (#​2673)

v0.27.1

Compare Source

Added
  • Support for zstd content decoding using the python zstandard package is added. Installable using httpx[zstd]. (#​3139)
Fixed
  • Improved error messaging for InvalidURL exceptions. (#​3250)
  • Fix app type signature in ASGITransport. (#​3109)
lxml/lxml (lxml)

v5.4.0

Compare Source

==================

Bugs fixed

  • LP#2107279: Binary wheels use libxml2 2.13.8 and libxslt 1.1.43 to resolve several CVEs. (Binary wheels for Windows continue to use a patched libxml2 2.11.9 and libxslt 1.1.39.) Issue found by Anatoly Katyushin.

v5.3.2

Compare Source

==================

This release resolves CVE-2025-24928 as described in https://gitlab.gnome.org/GNOME/libxml2/-/issues/847

Bugs fixed

  • Binary wheels use libxml2 2.12.10 and libxslt 1.1.42.

  • Binary wheels for Windows use a patched libxml2 2.11.9 and libxslt 1.1.39.

v5.3.1

Compare Source

==================

Bugs fixed

  • GH#440: Some tests were adapted for libxml2 2.14.0. Patch by Nick Wellnhofer.

  • LP#2097175: DTD(external_id="…") erroneously required a byte string as ID value.

  • GH#450: iterparse() internally triggered the `DeprecationWarning`` added in lxml 5.3.0 when parsing HTML.

Other changes

  • GH#442: Binary wheels for macOS no longer use the linker flag -flat_namespace.
PyMySQL/mysqlclient (mysqlclient)

v2.2.7

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/PyMySQL/mysqlclient/compare/v2.2.6...v2.2.7

v2.2.6

Compare Source

What's Changed

  • MariaDB Connector/C 3.4 and MairaDB 11.4 had enabled SSL and CA verification by default. It affected 2.2.5 windows wheels. This release disables SSL and CA verification by default for backward compatibility. (#​731)

  • Add server_public_key_path option. It is needed to connect MySQL server with sha256_password or caching_sha2_password authentication plugin without secure connection. (#​744)

Full Changelog: https://github.com/PyMySQL/mysqlclient/compare/v2.2.5...v2.2.6

v2.2.5

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/PyMySQL/mysqlclient/compare/v2.2.4...v2.2.5

open-telemetry/opentelemetry-python (opentelemetry-api)

v1.36.0

Compare Source

  • Add missing Prometheus exporter documentation (#​4485)

  • Overwrite logging.config.fileConfig and logging.config.dictConfig to ensure the OTLP LogHandler remains attached to the root logger. Fix a bug that can cause a deadlock to occur over logging._lock in some cases (#​4636).

  • otlp-http-exporter: set default value for param timeout_sec in _export method (#​4691)

  • Update OTLP gRPC/HTTP exporters: calling shutdown will now interrupt exporters that are sleeping before a retry attempt, and cause them to return failure immediately. Update BatchSpan/LogRecordProcessors: shutdown will now complete after 30 seconds of trying to finish exporting any buffered telemetry, instead of continuing to export until all telemetry was exported. (#​4638).

v1.35.0

Compare Source

  • Update OTLP proto to v1.7 #​4645.
  • Add event_name as a top level field in the LogRecord. Events are now simply logs with the event_name field set, the logs SDK should be used to emit events (#​4652).
  • Update OTLP gRPC/HTTP exporters: the export timeout is now inclusive of all retries and backoffs. A +/-20% jitter was added to all backoffs. A pointless 32 second sleep that occurred after all retries had completed/failed was removed. (#​4564).
  • Update ConsoleLogExporter.export to handle LogRecord's containing bytes type in the body (#​4614).
  • opentelemetry-sdk: Fix invalid type: ignore that causes mypy to ignore the whole file (#​4618)
  • Add span_exporter property back to BatchSpanProcessor class (#​4621)
  • Fix license field in pyproject.toml files (#​4625)
  • Update logger level to NOTSET in logs example (#​4637)
  • Logging API accepts optional context; deprecates trace_id, span_id, trace_flags. (#​4597) and (#​4668)
  • sdk: use context instead of trace_id,span_id for initializing LogRecord (#​4653)
  • Rename LogRecordProcessor.emit to on_emit (#​4648)
  • Logging API hide std_to_otel function to convert python logging severity to otel severity (#​4649)
  • proto: relax protobuf version requirement to support v6 (#​4620)
  • Bump semantic-conventions to 1.36.0 (#​4669)
  • Set expected User-Agent in HTTP headers for grpc OTLP exporter (#​4658)

v1.34.1: Version 1.34.1/0.55b1

Compare Source

This is a patch release on the previous 1.34.0/0.55b0 release, fixing the issue(s) below.

  • opentelemetry-sdk: Fix invalid type: ignore that causes mypy to ignore the whole file (#​4618)
  • Add span_exporter property back to BatchSpanProcessor class (#​4621)

v1.34.0

Compare Source

  • typecheck: add sdk/resources and drop mypy (#​4578)
  • Use PEP702 for marking deprecations (#​4522)
  • Refactor BatchLogRecordProcessor and BatchSpanProcessor to simplify code and make the control flow more clear (#​4562 #​4535, and #​4580).
  • Remove log messages from BatchLogRecordProcessor.emit, this caused the program to crash at shutdown with a max recursion error (#​4586).
  • Configurable max retry timeout for grpc exporter (#​4333)
  • opentelemetry-api: allow importlib-metadata 8.7.0 (#​4593)
  • opentelemetry-test-utils: assert explicit bucket boundaries in histogram metrics (#​4595)
  • Bump semantic conventions to 1.34.0 (#​4599)
  • Drop support for Python 3.8 (#​4520)

v1.33.1: Version 1.33.1/0.54b1

Compare Source

This is a patch release on the previous 1.33.0/0.54b0 release, fixing the issue(s) below.

  • Remove log messages from BatchLogRecordProcessor.emit, this caused the program to crash at shutdown with a max recursion error (#​4586).

v1.33.0

Compare Source

  • Fix intermittent Connection aborted error when using otlp/http exporters (#​4477)
  • opentelemetry-sdk: use stable code attributes: code.function -> code.function.name, code.lineno -> code.line.number, code.filepath -> code.file.path (#​4508)
  • Fix serialization of extended attributes for logs signal (#​4342)
  • Handle OTEL_PROPAGATORS contains None (#​4553)
  • docs: updated and added to the metrics and log examples (#​4559)
  • Bump semantic conventions to 1.33.0 (#​4567)

v1.32.1: Version 1.32.1/0.53b1

Compare Source

This is a patch release on the previous 1.32.0/0.53b0 release, fixing the issue(s) below.

v1.32.0

Compare Source

  • Fix user agent in OTLP HTTP metrics exporter (#​4475)
  • Improve performance of baggage operations (#​4466)
  • sdk: remove duplicated constant definitions for environment_variables (#​4491)
  • api: Revert record BaseException change in trace_api.use_span() (#​4494)
  • Improve CI by cancelling stale runs and setting timeouts (#​4498)
  • Patch logging.basicConfig so OTel logs don't cause console logs to disappear (#​4436)
  • Bump semantic conventions to 1.32.0 (#​4530)
  • Fix ExplicitBucketHistogramAggregation to handle multiple explicit bucket boundaries advisories (#​4521)
  • opentelemetry-sdk: Fix serialization of objects in log handler (#​4528)

v1.31.1: Version 1.31.1/0.52b1

Compare Source

This is a patch release on the previous 1.31.0/0.52b0 release, fixing the issue(s) below.

  • api: Revert record BaseException change in trace_api.use_span() (#​4494)

v1.31.0

Compare Source

  • semantic-conventions: Bump to 1.31.0 (#​4471)
  • Add type annotations to context's attach & detach (#​4346)
  • Fix OTLP encoders missing instrumentation scope schema url and attributes (#​4359)
  • prometheus-exporter: fix labels out of place for data points with different attribute sets (#​4413)
  • Type indent parameter in to_json (#​4402)
  • Tolerates exceptions when loading resource detectors via OTEL_EXPERIMENTAL_RESOURCE_DETECTORS (#​4373)
  • Disconnect gRPC client stub when shutting down OTLPSpanExporter (#​4370)
  • opentelemetry-sdk: fix OTLP exporting of Histograms with explicit buckets advisory (#​4434)
  • opentelemetry-exporter-otlp-proto-grpc: better dependency version range for Python 3.13 (#​4444)
  • opentelemetry-exporter-opencensus: better dependency version range for Python 3.13 (#​4444)
  • Updated tracecontext-integration-test gitref to d782773b2cf2fa4afd6a80a93b289d8a74ca894d (#​4448)
  • Make trace_api.use_span() record BaseException as well as Exception (#​4406)
  • Fix env var error message for TraceLimits/SpanLimits (#​4458)
  • pylint-ci updated python version to 3.13 (#​4450)
  • Fix memory leak in Log & Trace exporter (#​4449)

v1.30.0

Compare Source

  • Always setup logs sdk, OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED only controls python logging module handler setup (#​4340)
  • Add attributes field in metrics.get_meter wrapper function (#​4364)
  • Add Python 3.13 support (#​4353)
  • sdk: don't log or print warnings when the SDK has been disabled (#​4371)
  • Fix span context manager typing by using ParamSpec from typing_extensions (#​4389)
  • Fix serialization of None values in logs body to match 1.31.0+ data model (#​4400)
  • [BREAKING] semantic-conventions: Remove opentelemetry.semconv.attributes.network_attributes.NETWORK_INTERFACE_NAME introduced by mistake in the wrong module. (#​4391)
  • Add support for explicit bucket boundaries advisory for Histograms (#​4361)
  • semantic-conventions: Bump to 1.30.0 (#​4337)

v1.29.0

Compare Source

  • Fix crash exporting a log record with None body (#​4276)
  • Fix metrics export with exemplar and no context and filtering observable instruments (#​4251)
  • Fix recursion error with sdk disabled and handler added to root logger (#​4259)
  • sdk: setup EventLogger when OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED is set (#​4270)
  • api: fix logging of duplicate EventLogger setup warning (#​4299)
  • sdk: fix setting of process owner in ProcessResourceDetector (#​4311)
  • sdk: fix serialization of logs severity_number field to int (#​4324)
  • Remove TestBase.assertEqualSpanInstrumentationInfo method, use assertEqualSpanInstrumentationScope instead (#​4310)
  • sdk: instantiate lazily ExemplarBuckets in ExemplarReservoirs (#​4260)
  • semantic-conventions: Bump to 1.29.0 (#​4337)

v1.28.2: Version 1.28.2/0.49b2

Compare Source

This is a patch release on the previous 1.28.1/0.49b1 release, fixing the issue(s) below.

  • Fix crash exporting a log record with None body (#​4276)
  • sdk: setup EventLogger when OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED is set (#​4270)

v1.28.1: Version 1.28.1/0.49b1

Compare Source

This is a patch release on the previous 1.28.0/0.49b0 release, fixing the issue(s) below.

  • Fix metrics export with exemplar and no context and filtering observable instruments (#​4251)
  • Fix recursion error with sdk disabled and handler added to root logger (#​4259)

v1.28.0

Compare Source

  • Removed superfluous py.typed markers and added them where they were missing (#​4172)
  • Include metric info in encoding exceptions (#​4154)
  • sdk: Add support for log formatting (#​4137)
  • sdk: Add Host resource detector (#​4182)
  • sdk: Implementation of exemplars (#​4094)
  • Implement events sdk (#​4176)
  • Update semantic conventions to version 1.28.0 (#​4218)
  • Add support to protobuf 5+ and drop support to protobuf 3 and 4 (#​4206)
  • Update environment variable descriptions to match signal (#​4222)
  • Record logger name as the instrumentation scope name (#​4208)
  • Fix memory leak in exporter and reader (#​4224)
  • Drop OTEL_PYTHON_EXPERIMENTAL_DISABLE_PROMETHEUS_UNIT_NORMALIZATION environment variable (#​4217)
  • Improve compatibility with other logging libraries that override LogRecord.getMessage() in order to customize message formatting (#​4216)

v1.27.0

Compare Source

  • Implementation of Events API (#​4054)
  • Make log sdk add exception.message to logRecord for exceptions whose argument is an exception not a string message (#​4122)
  • Fix use of link.attributes.dropped, which may not exist (#​4119)
  • Running mypy on SDK resources (#​4053)
  • Added py.typed file to top-level module (#​4084)
  • Drop Final annotation from Enum in semantic conventions (#​4085)
  • Update log export example to not use root logger (#​4090)
  • sdk: Add OS resource detector (#​3992)
  • sdk: Accept non URL-encoded headers in OTEL_EXPORTER_OTLP_*HEADERS to match other languages SDKs (#​4103)
  • Update semantic conventions to version 1.27.0 (#​4104)
  • Add support to type bytes for OTLP AnyValue (#​4128)
  • Export ExponentialHistogram and ExponentialHistogramDataPoint (#​4134)
  • Implement Client Key and Certificate File Support for All OTLP Exporters (#​4116)
  • Remove _start_time_unix_nano attribute from _ViewInstrumentMatch in favor of using time_ns() at the moment when the aggregation object is created (#​4137)
ijl/orjson (orjson)

v3.11.3

Compare Source

Fixed
  • Fix PyPI project metadata when using maturin 1.9.2 or later.

v3.11.2

Compare Source

Fixed
  • Fix build using Rust 1.89 on amd64.
Changed
  • Build now depends on Rust 1.85 or later instead of 1.82.

v3.11.1

Compare Source

Changed
  • Publish PyPI wheels for CPython 3.14.
Fixed
  • Fix str on big-endian architectures. This was introduced in 3.11.0.

v3.11.0

Compare Source

Changed
  • Use a deserialization buffer allocated per request instead of a shared buffer allocated on import.
  • ABI compatibility with CPython 3.14 beta 4.

v3.10.18

Compare Source

Fixed
  • Fix incorrect escaping of the vertical tabulation character. This was introduced in 3.10.17.

v3.10.17

Compare Source

Changed
  • Publish PyPI Windows aarch64/arm64 wheels.
  • ABI compatibility with CPython 3.14 alpha 7.
  • Fix incompatibility running on Python 3.13 using WASM.

v3.10.16

Compare Source

Changed
  • Improve performance of serialization on amd64 machines with AVX-512.
  • ABI compatibility with CPython 3.14 alpha 6.
  • Drop support for Python 3.8.
  • Publish additional PyPI wheels for macOS that target only aarch64, macOS 15, and recent Python.

v3.10.15

Compare Source

Changed
  • Publish PyPI manylinux aarch64 wheels built and tested on aarch64.
  • Publish PyPI musllinux aarch64 and arm7l wheels built and tested on aarch64.
  • Publish PyPI manylinux Python 3.13 wheels for i686, arm7l, ppc64le, and s390x.

v3.10.14

Compare Source

Changed
  • Specify build system dependency on maturin>=1,<2 again.
  • Allocate memory using PyMem_Malloc() and similar APIs for integration with pymalloc, mimalloc, and tracemalloc.
  • Source distribution does not ship compressed test documents and relevant tests skip if fixtures are not present.
  • Build now depends on Rust 1.82 or later instead of 1.72.

v3.10.13

Compare Source

Changed
  • Fix compatibility with maturin introducing a breaking change in 1.8.0 and specify a fixed version of maturin. Projects relying on any previous version being buildable from source by end users (via PEP 517) must upgrade to at least this version.

v3.10.12

Compare Source

Changed
  • Publish PyPI manylinux i686 wheels.
  • Publish PyPI musllinux i686 and arm7l wheels.
  • Publish PyPI macOS wheels for Python 3.10 or later built on macOS 15.
  • Publish PyPI Windows wheels using trusted publishing.

v3.10.11

Compare Source

Changed
  • Improve performance of UUIDs.
  • Publish PyPI wheels with trusted publishing and PEP 740 attestations.
  • Include text of licenses for vendored dependencies.

v3.10.10

Compare Source

Fixed
  • Fix int serialization on s390x. This was introduced in 3.10.8.
Changed
  • Publish aarch64 manylinux_2_17 wheel for 3.13 to PyPI.

v3.10.9

Compare Source

Fixed
  • Fix int serialization on 32-bit Python 3.8, 3.9, 3.10. This was introduced in 3.10.8.

v3.10.8

Compare Source

Changed
  • int serialization no longer chains OverflowError to the the __cause__ attribute of orjson.JSONEncodeError when range exceeded.
  • Compatibility with CPython 3.14 alpha 1.
  • Improve performance.
Signum/paginate (paginate)

v0.5.7

Compare Source

Changes:

  • Fixed metadata for pypi
  • Added a wheel release
  • Fixed tests for python 3.12
trallnag/prometheus-fastapi-instrumentator (prometheus-fastapi-instrumentator)

v7.1.0

Compare Source

Added
  • Included metrics closure creators have new optional parameter custom_labels to set additional custom static labels. Parameter has not been added to the Instrumentator() constructor. Thanks to @​iocentos for requesting this in #​279 and @​martian711 in #​287 as well as @​Budlee in #​326 for implementing it.

v7.0.2

Compare Source

Fixed
  • Replaced incorrect license identifier in pyproject.toml. Problem introduced with the migration to Poetry 2.0 in the last patch release.

v7.0.1

Compare Source

Changed
  • Migrated pyproject.toml to support PEP 621. This comes with a migration to Poetry 2.0. Thanks to @​alexted bringing this up in #​323.
libgit2/pygit2 (pygit2)

v1.18.2

Compare Source

Deprecations:

  • Remote.ls_remotes(...) is deprecated, use Remote.list_heads(...):

Before

  for head in remote.ls_remotes():
      head['name']
      head['oid']
      head['loid']  # None when local is False
      head['local']
      head['symref_target']

Now

  for head in remote.list_heads():
      head.name
      head.oid
      head.loid  # The zero oid when local is False
      head.local
      head.symref_target

v1.18.1

Compare Source

Deprecations:

  • Update your code:

Before

  contents = Repository.merge_file_from_index(...)

Now

  result = Repository.merge_file_from_index(..., use_deprecated=False)
  contents = result.contents

At some point in the future use_deprecated=False will be the default.

v1.18.0

Compare Source

  • Upgrade Linux Glibc wheels to manylinux_2_28

  • Add RemoteCallbacks.push_transfer_progress(...) callback #​1345

  • New bool(oid) #​1347

  • Now Repository.merge(...) accepts a commit or reference object #​1348

  • New threads optional argument in Remote.push(...) #​1352

  • New proxy optional argument in clone_repository(...) #​1354

  • New optional arguments context_lines and interhunk_lines in Blob.diff(...) ; and now Repository.diff(...) honors these two arguments when the objects diffed are blobs. #​1360

  • Now Tree.diff_to_workdir(...) accepts keyword arguments, not just positional.

  • Fix when a reference name has non UTF-8 chars #​1329

  • Fix condition check in Repository.remotes.rename(...) #​1342

  • Add codespell workflow, fix a number of typos #​1344

  • Documentation and typing #​1343 #​1347 #​1356

  • CI: Use ARM runner for tests and wheels #​1346

  • Build and CI updates #​1363 #​1365

Deprecations:

  • Passing str to Repository.merge(...) is deprecated, instead pass an oid object (or a commit, or a reference) #​1349

Breaking changes:

  • Keyword argument flag has been renamed to flags in Blob.diff(...) and Blob.diff_to_buffer(...)
pytest-dev/pytest (pytest)

v8.4.2

Compare Source

pytest 8.4.2 (2025-09-03)

Bug fixes

  • #​13478: Fixed a crash when using console_output_style{.interpreted-text role="confval"} with times and a module is skipped.

  • #​13530: Fixed a crash when using pytest.approx{.interpreted-text role="func"} and decimal.Decimal{.interpreted-text role="class"} instances with the decimal.FloatOperation{.interpreted-text role="class"} trap set.

  • #​13549: No longer evaluate type annotations in Python 3.14 when inspecting function signatures.

    This prevents crashes during module collection when modules do not explicitly use from __future__ import annotations and import types for annotations within a if TYPE_CHECKING: block.

  • #​13559: Added missing [int]{.title-ref} and [float]{.title-ref} variants to the [Literal]{.title-ref} type annotation of the [type]{.title-ref} parameter in pytest.Parser.addini{.interpreted-text role="meth"}.

  • #​13563: pytest.approx{.interpreted-text role="func"} now only imports numpy if NumPy is already in sys.modules. This fixes unconditional import behavior introduced in [8.4.0]{.title-ref}.

Improved documentation

  • #​13577: Clarify that pytest_generate_tests is discovered in test modules/classes; other hooks must be in conftest.py or plugins.

Contributor-facing changes

  • #​13480: Self-testing: fixed a few test failures when run with -Wdefault or a similar override.
  • #​13547: Self-testing: corrected expected message for test_doctest_unexpected_exception in Python 3.14.
  • #​13684: Make pytest's own testsuite insensitive to the presence of the CI environment variable -- by ogrisel{.interpreted-text role="user"}.

v8.4.1

Compare Source

pytest 8.4.1 (2025-06-17)

Bug fixes

  • #​13461: Corrected _pytest.terminal.TerminalReporter.isatty to support being called as a method. Before it was just a boolean which could break correct code when using -o log_cli=true).

  • #​13477: Reintroduced pytest.PytestReturnNotNoneWarning{.interpreted-text role="class"} which was removed by accident in pytest [8.4]{.title-ref}.

    This warning is raised when a test functions returns a value other than None, which is often a mistake made by beginners.

    See return-not-none{.interpreted-text role="ref"} for more information.

  • #​13497: Fixed compatibility with Twisted 25+.

Improved documentation

  • #​13492: Fixed outdated warning about faulthandler not working on Windows.

v8.4.0

Compare Source

pytest 8.4.0 (2025-06-02)

Removals and backward incompatible breaking changes

  • #​11372: Async tests will now fail, instead of warning+skipping, if you don't have any suitable plugin installed.

  • #​12346: Tests will now fail, instead of raising a warning, if they return any value other than None.

  • #​12874: We dropped support for Python 3.8 following its end of life (2024-10-07).

  • #​12960: Test functions containing a yield now cause an explicit error. They have not been run since pytest 4.0, and were previously marked as an expected failure and deprecation warning.

    See the docs <yield tests deprecated>{.interpreted-text role="ref"} for more information.

Deprecations (removal in next major release)

  • #​10839: Requesting an asynchronous fixture without a [pytest_fixture_setup]{.title-ref} hook that resolves it will now give a DeprecationWarning. This most commonly happens if a sync test requests an async fixture. This should have no effect on a majority of users with async tests or fixtures using async pytest plugins, but may affect non-standard hook setups or autouse=True. For guidance on how to work around this warning see sync-test-async-fixture{.interpreted-text role="ref"}.

New features

  • #​11538: Added pytest.RaisesGroup{.interpreted-text role="class"} as an equivalent to pytest.raises{.interpreted-text role="func"} for expecting ExceptionGroup{.interpreted-text role="exc"}. Also adds pytest.RaisesExc{.interpreted-text role="class"} which is now the logic behind pytest.raises{.interpreted-text role="func"} and used as parameter to pytest.RaisesGroup{.interpreted-text role="class"}. RaisesGroup includes the ability to specify multiple different expected exceptions, the structure of nested exception groups, and flags for emulating except* <except_star>{.interpreted-text role="ref"}. See assert-matching-exception-groups{.interpreted-text role="ref"} and docstrings for more information.

  • #​12081: Added capteesys{.interpreted-text role="fixture"} to capture AND pass output to next handler set by --capture=.

  • #​12504: pytest.mark.xfail{.interpreted-text role="func"} now accepts pytest.RaisesGroup{.interpreted-text role="class"} for the raises parameter when you expect an exception group. You can also pass a pytest.RaisesExc{.interpreted-text role="class"} if you e.g. want to make use of the check parameter.

  • #​12713: New [--force-short-summary]{.title-ref} option to force condensed summary output regardless of verbosity level.

    This lets users still see condensed summary output of failures for quick reference in log files from job outputs, being especially useful if non-condensed output is very verbose.

  • #​12749: pytest traditionally collects classes/functions in the test module namespace even if they are imported from another file.

    For example:

contents of src/domain.py

class Testament: ...

contents of tests/test_testament.py

from domain import Testament

def test_testament(): ...
```

In this scenario with the default options, pytest will collect the class [Testament]{.title-ref} from [tests/test_testament.py]{.title-ref} because it starts with [Test]{.title-ref}, even though in this case it is a production class being imported in the test module namespace.

This behavior can now be prevented by setting the new `collect_imported_tests`{.interpreted-text role="confval"} configuration option to `false`, which will make pytest collect classes/functions from test files **only** if they are defined in that file.

\-- by `FreerGit`{.interpreted-text role="user"}
  • #​12765: Thresholds to trigger snippet truncation can now be set with truncation_limit_lines{.interpreted-text role="confval"} and truncation_limit_chars{.interpreted-text role="confval"}.

    See truncation-params{.interpreted-text role="ref"} for more information.

  • #​13125: console_output_style{.interpreted-text role="confval"} now supports times to show execution time of each test.

  • #​13192: pytest.raises{.interpreted-text role="func"} will now raise a warning when passing an empty string to match, as this will match against any value. Use match="^$" if you want to check that an exception has no message.

  • #​13192: pytest.raises{.interpreted-text role="func"} will now print a helpful string diff if matching fails and the match parameter has ^ and $ and is otherwise escaped.

  • #​13192: You can now pass with pytest.raises(check=fn): <pytest.raises>{.interpreted-text role="func"}, where fn is a function which takes a raised exception and returns a boolean. The raises fails if no exception was raised (as usual), passes if an exception is raised and fn returns True (as well as match and the type matching, if specified, which are checked before), and propagates the exception if fn returns False (which likely also fails the test).

  • #​13228: hidden-param{.interpreted-text role="ref"} can now be used in id of pytest.param{.interpreted-text role="func"} or in ids of Metafunc.parametrize <pytest.Metafunc.parametrize>{.interpreted-text role="py:func"}. It hides the parameter set from the test name.

  • #​13253: New flag: --disable-plugin-autoload <disable_plugin_autoload>{.interpreted-text role="ref"} which works as an alternative to PYTEST_DISABLE_PLUGIN_AUTOLOAD{.interpreted-text role="envvar"} when setting environment variables is inconvenient; and allows setting it in config files with addopts{.interpreted-text role="confval"}.

Improvements in existing functionality

  • #​10224: pytest's short and long traceback styles (how-to-modifying-python-tb-printing{.interpreted-text role="ref"}) now have partial 657{.interpreted-text role="pep"} support and will show specific code segments in the traceback.

    ================================= FAILURES =================================
    _______________________ test_gets_correct_tracebacks _______________________
    
    test_tracebacks.py:12: in test_gets_correct_tracebacks
        assert manhattan_distance(p1, p2) == 1
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
    test_tracebacks.py:6: in manhattan_distance
        return abs(point_1.x - point_2.x) + abs(point_1.y - point_2.y)
                               ^^^^^^^^^
    E   AttributeError: 'NoneType' object has no attribute 'x'

    -- by ammaraskar{.interpreted-text role="user"}

  • #​11118: Now pythonpath{.interpreted-text role="confval"} configures [$PYTHONPATH]{.title-ref} earlier than before during the initialization process, which now also affects plugins loaded via the [-p]{.title-ref} command-line option.

    -- by millerdev{.interpreted-text role="user"}

  • #​11381: The type parameter of the parser.addini method now accepts ["int"]{.title-ref} and "float" parameters, facilitating the parsing of configuration values in the configuration file.

    Example:

    def pytest_addoption(parser):
        parser.addini("int_value", type="int", default=2, help="my int value")
        parser.addini("float_value", type="float", default=4.2, help="my float value")

    The [pytest.ini]{.title-ref} file:

    [pytest]
    int_value = 3
    float_value = 5.4
  • #​11525: Fixtures are now clearly represented in the output as a "fixture object", not as a normal function as before, making it easy for beginners to catch mistakes such as referencing a fixture declared in the same module but not requested in the test function.

    -- by the-compiler{.interpreted-text role="user"} and glyphack{.interpreted-text role="user"}

  • #​12426: A warning is now issued when pytest.mark.usefixtures ref{.interpreted-text role="ref"} is used without specifying any fixtures. Previously, empty usefixtures markers were silently ignored.

  • #​12707: Exception chains can be navigated when dropped into Pdb in Python 3.13+.

  • #​12736: Added a new attribute [name]{.title-ref} with the fixed value ["pytest tests"]{.title-ref} to the root tag [testsuites]{.title-ref} of the junit-xml generated by pytest.

    This attribute is part of many junit-xml specifications and is even part of the [junit-10.xsd]{.title-ref} specification that pytest's implementation is based on.

  • #​12943: If a test fails with an exceptiongroup with a single exception, the contained exception will now be displayed in the short test summary info.

  • #​12958: A number of unraisable <unraisable>{.interpreted-text role="ref"} enhancements:

    • Set the unraisable hook as early as possible and unset it as late as possible, to collect the most possible number of unraisable exceptions.
    • Call the garbage collector just before unsetting the unraisable hook, to collect any straggling exceptions.
    • Collect multiple unraisable exceptions per test phase.
    • Report the tracemalloc{.interpreted-text role="mod"} allocation traceback (if available).
    • Avoid using a generator based hook to allow handling StopIteration{.interpreted-text role="class"} in test failures.
    • Report the unraisable exception as the cause of the pytest.PytestUnraisableExceptionWarning{.interpreted-text role="class"} exception if raised.
    • Compute the repr of the unraisable object in the unraisable hook so you get the latest information if available, and should help with resurrection of the object.
  • #​13010: pytest.approx{.interpreted-text role="func"} now can compare collections that contain numbers and non-numbers mixed.

  • #​13016: A number of threadexception <unraisable>{.interpreted-text role="ref"} enhancements:

    • Set the excepthook as early as possible and unset it as late as possible, to collect the most possible number of unhandled exceptions from threads.
    • Collect multiple thread exceptions per test phase.
    • Report the tracemalloc{.interpreted-text role="mod"} allocation traceback (if available).
    • Avoid using a generator based hook to allow handling StopIteration{.interpreted-text role="class"} in test failures.
    • Report the thread exception as the cause of the pytest.PytestUnhandledThreadExceptionWarning{.interpreted-text role="class"} exception if raised.
    • Extract the name of the thread object in the excepthook which should help with resurrection of the thread.
  • #​13031: An empty parameter set as in pytest.mark.parametrize([], ids=idfunc) will no longer trigger a call to idfunc with internal objects.

  • #​13115: Allows supplying ExceptionGroup[Exception] and BaseExceptionGroup[BaseException] to pytest.raises to keep full typing on ExceptionInfo <pytest.ExceptionInfo>{.interpreted-text role="class"}:

    with pytest.raises(ExceptionGroup[Exception]) as exc_info:
        some_function()

    Parametrizing with other exception types remains an error - we do not check the types of child exceptions and thus do not permit code that might look like we do.

  • #​13122: The --stepwise mode received a number of improvements:

    • It no longer forgets the last failed test in case pytest is executed later without the flag.

      This enables the following workflow:

      1. Execute pytest with --stepwise, pytest then stops at the first failing test;
      2. Iteratively update the code and run the test in isolation, without the --stepwise flag (for example in an IDE), until it is fixed.
      3. Execute pytest with --stepwise again and pytest will continue from the previously failed test, and if it passes, continue on to the next tests.

      Previously, at step 3, pytest would start from the beginning, forgetting the previously failed test.

      This change however might cause issues if the --stepwise mode is used far apart in time, as the state might get stale, so the internal state will be reset automatically in case the test suite changes (for now only the number of tests are considered for this, we might change/improve this on the future).

    • New --stepwise-reset/--sw-reset flag, allowing the user to explicitly reset the stepwise state and restart the workflow from the beginning.

  • #​13308: Added official support for Python 3.14.

  • #​13380: Fix ExceptionGroup{.interpreted-text role="class"} traceback filtering to exclude pytest internals.

  • #​13415: The author metadata of the BibTex example is now correctly formatted with last names following first names. An example of BibLaTex has been added. BibTex and BibLaTex examples now clearly indicate that what is cited is software.

    -- by willynilly{.interpreted-text role="user"}

  • #​13420: Improved test collection performance by optimizing path resolution used in FSCollector.

  • #​13457: The error message about duplicate parametrization no longer displays an internal stack trace.

  • #​4112: Using pytest.mark.usefixtures <pytest.mark.usefixtures ref>{.interpreted-text role="ref"} on pytest.param{.interpreted-text role="func"} now produces an error instead of silently doing nothing.

  • #​5473: Replace [:]{.title-ref} with [;]{.title-ref} in the assertion rewrite warning message so it can be filtered using standard Python warning filters before calling pytest.main{.interpreted-text role="func"}.

[#&#8203;6985](https://github.com/pytest-dev/pytest/issues/6985): Improved `pytest.approx`{.interpreted-text role="func"} to enhance the readability of value ranges and tolerances between 0.001 and 1000.

:   -   The [repr]{.title-ref} method now provides clearer output for values within those ranges, making it easier to interpret the results.

    -   Previously, the output for those ranges of values and tolerances was displayed in scientific notation (e.g., [42 ± 1.0e+00]{.title-ref}). The updated method now presents the tolerance as a decimal for better readability (e.g., [42 ± 1]{.title-ref}).

        Example:

        **Previous Output:**

        ``` console
        >>> pytest.approx(42, abs=1)
        42 ± 1.0e+00
        ```

        **Current Output:**

        ``` console
        >>> pytest.approx(42, abs=1)
        42 ± 1
        ```

    \-- by `fazeelghafoor`{.interpreted-text role="user"}
  • #​7683: The formerly optional pygments dependency is now required, causing output always to be source-highlighted (unless disabled via the --code-highlight=no CLI option).

Bug fixes

  • #​10404: Apply filterwarnings from config/cli as soon as possible, and revert them as late as possible so that warnings as errors are collected throughout the pytest run and before the unraisable and threadexcept hooks are removed.

    This allows very late warnings and unraisable/threadexcept exceptions to fail the test suite.

    This also changes the warning that the lsof plugin issues from PytestWarning to the new warning PytestFDWarning so it can be more easily filtered.

  • #​11067: The test report is now consistent regardless if the test xfailed via pytest.mark.xfail <pytest.mark.xfail ref>{.interpreted-text role="ref"} or pytest.fail{.interpreted-text role="func"}.

    Previously, xfailed tests via the marker would have the string "reason: " prefixed to the message, while those xfailed via the function did not. The prefix has been removed.

  • #​12008: In 11220{.interpreted-text role="pr"}, an unintended change in reordering was introduced by changing the way indices were assigned to direct params. More specifically, before that change, the indices of direct params to metafunc's callspecs were assigned after all parametrizations took place. Now, that change is reverted.

  • #​12863: Fix applying markers, including pytest.mark.parametrize <pytest.mark.parametrize ref>{.interpreted-text role="ref"} when placed above [@​staticmethod]{.title-ref} or [@​classmethod]{.title-ref}.

  • #​12929: Handle StopIteration from test cases, setup and teardown correctly.

  • #​12938: Fixed --durations-min argument not respected if -vv is used.

  • #​12946: Fixed missing help for pdb{.interpreted-text role="mod"} commands wrapped by pytest -- by adamchainz{.interpreted-text role="user"}.

  • #​12981: Prevent exceptions in pytest.Config.add_cleanup{.interpreted-text role="func"} callbacks preventing further cleanups.

  • #​13047: Restore pytest.approx{.interpreted-text role="func"} handling of equality checks between [bool]{.title-ref} and [numpy.bool_]{.title-ref} types.

    Comparing [bool]{.title-ref} and [numpy.bool_]{.title-ref} using pytest.approx{.interpreted-text role="func"} accidentally changed in version [8.3.4]{.title-ref} and [8.3.5]{.title-ref} to no longer match:

    >>> import numpy as np
    >>> from pytest import approx
    >>> [np.True_, np.True_] == pytest.approx([True, True])
    False

    This has now been fixed:

    >>> [np.True_, np.True_] == pytest.approx([True, True])
    True
  • #​13119: Improved handling of invalid regex patterns for filter warnings by providing a clear error message.

  • #​13175: The diff is now also highlighted correctly when comparing two strings.

  • #​13248: Fixed an issue where passing a scope in Metafunc.parametrize <pytest.Metafunc.parametrize>{.interpreted-text role="py:func"} with indirect=True could result in other fixtures being unable to depend on the parametrized fixture.

  • #​13291: Fixed repr of attrs objects in assertion failure messages when using attrs>=25.2.

  • #​13312: Fixed a possible KeyError crash on PyPy during collection of tests involving higher-scoped parameters.

  • #​13345: Fix type hints for pytest.TestReport.when{.interpreted-text role="attr"} and pytest.TestReport.location{.interpreted-text role="attr"}.

  • #​13377: Fixed handling of test methods with positional-only parameter syntax.

    Now, methods are supported that formally define self as positional-only and/or fixture parameters as keyword-only, e.g.:

    class TestClass:
    
        def test_method(self, /, *, fixture): ...

    Before, this caused an internal error in pytest.

  • #​13384: Fixed an issue where pytest could report negative durations.

  • #​13420: Added lru_cache to nodes._check_initialpaths_for_relpath.

  • #​9037: Honor disable_test_id_escaping_and_forfeit_all_rights_to_community_support{.interpreted-text role="confval"} when escaping ids in parametrized tests.

Improved documentation

  • #​12535: [This example]{.title-ref}<https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures> showed print statements that do not exactly reflect what the different branches actually do. The fix makes the example more precise.

  • #​13218: Pointed out in the pytest.approx{.interpreted-text role="func"} documentation that it considers booleans unequal to numeric zero or one.

  • #​13221: Improved grouping of CLI options in the --help output.

  • #​6649: Added ~pytest.TerminalReporter{.interpreted-text role="class"} to the api-reference{.interpreted-text role="ref"} documentation page.

  • #​8612: Add a recipe for handling abstract test classes in the documentation.

    A new example has been added to the documentation to demonstrate how to use a mixin class to handle abstract test classes without manually setting the __test__ attribute for subclasses. This ensures that subclasses of abstract test classes are automatically collected by pytest.

Packaging updates and notes for downstreams

  • #​13317: Specified minimum allowed versions of colorama, iniconfig, and packaging; and bumped the minimum allowed version of exceptiongroup for python_version<'3.11' from a release candidate to a full release.

Contributor-facing changes

  • #​12017: Mixed internal improvements:

    • Migrate formatting to f-strings in some tests.
    • Use type-safe constructs in JUnitXML tests.
    • MovedMockTiming into _pytest.timing.

    -- by RonnyPfannschmidt{.interpreted-text role="user"}

  • #​12647: Fixed running the test suite with the hypothesis pytest plugin.

Miscellaneous internal changes

  • #​6649: Added ~pytest.TerminalReporter{.interpreted-text role="class"} to the public pytest API, as it is part of the signature of the pytest_terminal_summary{.interpreted-text role="hook"} hook.

v8.3.5

Compare Source

pytest 8.3.5 (2025-03-02)

Bug fixes

  • #​11777: Fixed issue where sequences were still being shortened even with -vv verbosity.
  • #​12888: Fixed broken input when using Python 3.13+ and a libedit build of Python, such as on macOS or with uv-managed Python binaries from the python-build-standalone project. This could manifest e.g. by a broken prompt when using Pdb, or seeing empty inputs with manual usage of input() and suspended capturing.
  • #​13026: Fixed AttributeError{.interpreted-text role="class"} crash when using --import-mode=importlib when top-level directory same name as another module of the standard library.
  • #​13053: Fixed a regression in pytest 8.3.4 where, when using --import-mode=importlib, a directory containing py file with the same name would cause an ImportError
  • #​13083: Fixed issue where pytest could crash if one of the collected directories got removed during collection.

Improved documentation

  • #​12842: Added dedicated page about using types with pytest.

    See types{.interpreted-text role="ref"} for detailed usage.

Contributor-facing changes

  • #​13112: Fixed selftest failures in test_terminal.py with Pygments >= 2.19.0
  • #​13256: Support for Towncrier versions released in 2024 has been re-enabled when building Sphinx docs -- by webknjaz{.interpreted-text role="user"}.

v8.3.4

Compare Source

pytest 8.3.4 (2024-12-01)

Bug fixes

  • #​12592: Fixed KeyError{.interpreted-text role="class"} crash when using --import-mode=importlib in a directory layout where a directory contains a child directory with the same name.

  • #​12818: Assertion rewriting now preserves the source ranges of the original instructions, making it play well with tools that deal with the AST, like executing.

  • #​12849: ANSI escape codes for colored output now handled correctly in pytest.fail{.interpreted-text role="func"} with [pytrace=False]{.title-ref}.

  • #​9353: pytest.approx{.interpreted-text role="func"} now uses strict equality when given booleans.

Improved documentation

  • #​10558: Fix ambiguous docstring of pytest.Config.getoption{.interpreted-text role="func"}.

  • #​10829: Improve documentation on the current handling of the --basetemp option and its lack of retention functionality (temporary directory location and retention{.interpreted-text role="ref"}).

  • #​12866: Improved cross-references concerning the recwarn{.interpreted-text role="fixture"} fixture.

  • #​12966: Clarify filterwarnings{.interpreted-text role="ref"} docs on filter precedence/order when using multiple @pytest.mark.filterwarnings <pytest.mark.filterwarnings ref>{.interpreted-text role="ref"} marks.

Contributor-facing changes

  • #​12497: Fixed two failing pdb-related tests on Python 3.13.

v8.3.3

Compare Source

pytest 8.3.3 (2024-09-09)

Bug fixes

  • #​12446: Avoid calling @property (and other instance descriptors) during fixture discovery -- by asottile{.interpreted-text role="user"}

  • #​12659: Fixed the issue of not displaying assertion failure differences when using the parameter --import-mode=importlib in pytest>=8.1.

  • #​12667: Fixed a regression where type change in [ExceptionInfo.errisinstance]{.title-ref} caused [mypy]{.title-ref} to fail.

  • #​12744: Fixed typing compatibility with Python 3.9 or less -- replaced [typing.Self]{.title-ref} with [typing_extensions.Self]{.title-ref} -- by Avasam{.interpreted-text role="user"}

  • #​12745: Fixed an issue with backslashes being incorrectly converted in nodeid paths on Windows, ensuring consistent path handling across environments.

  • #​6682: Fixed bug where the verbosity levels where not being respected when printing the "msg" part of failed assertion (as in assert condition, msg).

  • #​9422: Fix bug where disabling the terminal plugin via -p no:terminal would cause crashes related to missing the verbose option.

    -- by GTowers1{.interpreted-text role="user"}

Improved documentation

  • #​12663: Clarify that the [pytest_deselected]{.title-ref} hook should be called from [pytest_collection_modifyitems]{.title-ref} hook implementations when items are deselected.
  • #​12678: Remove erroneous quotes from [tmp_path_retention_policy]{.title-ref} example in docs.

Miscellaneous internal changes

  • #​12769: Fix typos discovered by codespell and add codespell to pre-commit hooks.
pytest-dev/pytest-asyncio (pytest-asyncio)

v0.26.0: pytest-asyncio 0.26.0

Compare Source

  • Adds configuration option that sets default event loop scope for all tests #​793
  • Improved type annotations for pytest_asyncio.fixture #​1045
  • Added typing-extensions as additional dependency for Python <3.10 #​1045

v0.25.3: pytest-asyncio 0.25.3

Compare Source

  • Avoid errors in cleanup of async generators when event loop is already closed #​1040

v0.25.2: pytest-asyncio 0.25.2

Compare Source

  • Call loop.shutdown_asyncgens() before closing the event loop to ensure async generators are closed in the same manner as asyncio.run does #​1034

v0.25.1: pytest-asyncio 0.25.1

Compare Source

  • Fixes an issue that caused a broken event loop when a function-scoped test was executed in between two tests with wider loop scope #​950
  • Improves test collection speed in auto mode #​1020
  • Corrects the warning that is emitted upon redefining the event_loop fixture

v0.25.0: pytest-asyncio 0.25.0

Compare Source

0.25.0 (2024-12-13)

  • Deprecated: Added warning when asyncio test requests async @pytest.fixture in strict mode. This will become an error in a future version of flake8-asyncio. #​979
  • Updates the error message about pytest.mark.asyncio's scope keyword argument to say loop_scope instead. #​1004
  • Verbose log displays correct parameter name: asyncio_default_fixture_loop_scope #​990
  • Propagates contextvars set in async fixtures to other fixtures and tests on Python 3.11 and above. #​1008

v0.24.0: pytest-asyncio 0.24.0

Compare Source

0.24.0 (2024-08-22)

  • BREAKING: Updated minimum supported pytest version to v8.2.0
  • Adds an optional loop_scope keyword argument to pytest.mark.asyncio. This argument controls which event loop is used to run the marked async test. #​706, #​871
  • Deprecates the optional scope keyword argument to pytest.mark.asyncio for API consistency with pytest_asyncio.fixture. Users are encouraged to use the loop_scope keyword argument, which does exactly the same.
  • Raises an error when passing scope or loop_scope as a positional argument to @pytest.mark.asyncio. #​812
  • Fixes a bug that caused module-scoped async fixtures to fail when reused in other modules #​862 #​668
pytest-dev/pytest-xdist (pytest-xdist)

v3.8.0

Compare Source

===============================

Features

  • #&#8203;1083 <https://github.com/pytest-dev/pytest-xdist/issues/1083>_: Add --no-loadscope-reorder and --loadscope-reorder option to control whether to automatically reorder tests in loadscope for tests where relative ordering matters. This only applies when using loadscope.

    For example, [test_file_1, test_file_2, ..., test_file_n] are given as input test files, if --no-loadscope-reorder is used, for either worker, the test_file_a will be executed before test_file_b only if a < b.

    The default behavior is to reorder the tests to maximize the number of tests that can be executed in parallel.

v3.7.0

Compare Source

===============================

Features

  • #&#8203;1142 <https://github.com/pytest-dev/pytest-xdist/issues/1142>_: Added support for Python 3.13.

  • #&#8203;1144 <https://github.com/pytest-dev/pytest-xdist/issues/1144>_: The internal steal command is now atomic - it unschedules either all requested tests or none.

    This is a prerequisite for group/scope support in the worksteal scheduler, so test groups won't be broken up incorrectly.

  • #&#8203;1170 <https://github.com/pytest-dev/pytest-xdist/issues/1170>_: Add the --px arg to create proxy gateways.

    Proxy gateways are passed to additional gateways using the via keyword. They can serve as a way to run multiple workers on remote machines.

  • #&#8203;1200 <https://github.com/pytest-dev/pytest-xdist/issues/1200>_: Now multiple xdist_group markers are considered when assigning tests to groups (order does not matter).

    Previously, only the last marker would assign a test to a group, but now if a test has multiple xdist_group marks applied (for example via parametrization or via fixtures), they are merged to make a new group.

Removals

  • #&#8203;1162 <https://github.com/pytest-dev/pytest-xdist/issues/1162>_: Dropped support for EOL Python 3.8.

Trivial Changes

  • #&#8203;1092 <https://github.com/pytest-dev/pytest-xdist/issues/1092>_: Update an error message to better indicate where users should go for more information.

  • #&#8203;1190 <https://github.com/pytest-dev/pytest-xdist/issues/1190>_: Switched to using a SPDX license identifier introduced in PEP 639.

Kludex/python-multipart (python-multipart)

v0.0.20

Compare Source

  • Handle messages containing only end boundary #​142.
redis/redis-py (redis)

v5.3.1: 5.3.1

Compare Source

Changes

🧰 Maintenance

  • Allow newer PyJWT versions for branch 5.3 (#​3682)

We'd like to thank all the contributors who worked on this release! @​bcmills

v5.3.0: 5.3.0

Compare Source

Changes

🚀 New Features

Token-based authentication:

  • Added StreamingCredentialProvider interface (#​3445)
  • Extended CredentialProvider class with get_credentials_async method (#​3445)
  • Added event-driven entities (Dispatcher, Listener, Events) (#​3445)

New StreamingCredentialProvider interface was added with an idea to integrate redis-py with credential providers that stream an events that should be handled by given listeners.

Check the documentation for the quick start guide.

CredentialProvider instance creation interface was enhanced. Feel free to check the updated documentation

Other features:

  • Exponential with jitter backoff (#​3550)
  • Adding load balancing strategy configuration to cluster clients(replacement for 'read_from_replicas' config) (#​3563)

⚠️ Deprecations

  • Deprecating unused arguments in connection pools's get_connection functions(#​3517 #​3625)
  • Adding load balancing strategy configuration to cluster clients(replacement for 'read_from_replicas' config) (#​3563)

🐛 Bug Fixes

  • When SlotNotCoveredError is raised, the cluster topology should be reinitialized as part of error handling and retrying of the commands. (#​3621)
  • Fixed Token-based authentication documentation
  • Fixed bug with missing PyJWT dependency (#​3462)
  • Fixed flacky TokenManager test (#​3468)
  • Fix incorrect attribute reuse in redis.connection.CacheProxyConnection (#​3456)
  • Moved self._lock initialisation to Pool constructor (#​3473)
  • Remove decreasing of created connections count when releasing not owned by connection pool connection(fixes issue #​2832). (#​3514)

🧰 Maintenance

  • Updated CredentialProvider test infrastructure (#​3502)
  • Expand type for EncodedT (#​3472)
  • DOC-4423: add TCEs for various command pages (#​3476)
  • DOC-4345 added testable JSON search examples for home page (#​3407)
  • DOC-4796 fixed capped lists example (#​3493)
  • Added unit test fix to improve compatibility with MacOS (#​3486)
  • Added missing type hints (#​3494 #​3495 #​3496 #​3357)
  • Replacing the redis and redis-stack-server images with redis-libs-tests image in test infrastructure (#​3505)

Contributors

We'd like to thank all the contributors who worked on this release!

@​uglide @​woutdenolf @​vladvildanov @​hauntsaninja @​dwdougherty @​patrick91 @​Vulwsztyn @​JimNero009 @​andy-stark-redis @​petyaslavova

v5.2.1: 5.2.1

Compare Source

Changes

🐛 Bug Fixes

  • Fixed unsecured tempfile.mktemp() command usage (#​3446)
  • Fixed bug with SLOWLOG GET response parsing on Redis Software (#​3441)
  • Fixed issue with invoking _close() on closed event loop (#​3438)

🧰 Maintenance

  • Migrate test infrastructure to new custom docker images (#​3415)
  • Fixed flacky test with HEXPIREAT command (#​3437)

Contributors

We'd like to thank all the contributors who worked on this release!

@​IlianIliev @​uglide @​vladvildanov @​teodorfn @​akx

v5.2.0: 5.2.0

Compare Source

Changes

🚀 New Features

  • Extend AggregateRequest with scorer argument (#​3409)

🧰 Maintenance

  • Pin pytest-profiling version due to the bug (#​3417)

Contributors

We'd like to thank all the contributors who worked on this release!

@​uglide @​rbs333 @​vladvildanov @​dwdougherty

v5.1.1: 5.1.1

Compare Source

Changes

5.1.1

🐛 Bug Fixes
  • Fixed return type for Redis Set commands to be Set instead of List (#​3399)
  • Fixed bug with partial Hiredis availability (#​3400)
  • Fixed bug with async pipeline and cluster fails with some commands (#​3402)

5.1.0

🚀 New Features
How to start with Client-side caching?
  1. Install redis-py 5.1.0
  2. Use the following code snippet:
r = Redis(protocol=3, cache_config=CacheConfig())

cache = r.get_cache()
r.set("foo", "bar")

### get key from redis and save in local cache
print(r.get("foo"))

### get key from local cache
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)

### change key in redis (cause invalidation)
r.set("foo", "barbar")

### Retrieves a new value from server and cache it
print(r.get("foo"))

### Make sure that new value was cached
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)

Check documentation to get more examples

🔥 Breaking Changes
  • Timeseries insertion filters for close samples (#​3228)
  • Enhanced classes string representation (#​3001)
  • Partial clean up of Python 3.7 compatibility (#​2928)
  • Handle Redis Set data type as Python list to avoid a limitations with nested dictionaries (#​3324)

Contributors

We'd like to thank all the contributors who worked on this release!

@​vladvildanov @​dmaier-redislabs @​vineethvkumar @​ramchandra-st @​RafalBielickiIM @​jules-ch

v5.1.0: 5.1.0

Compare Source

Changes

🚀 New Features

How to start with Client-side caching?
  1. Install redis-py 5.1.0
  2. Use the following code snippet:
r = Redis(protocol=3, cache_config=CacheConfig())

cache = r.get_cache()
r.set("foo", "bar")

### get key from redis and save in local cache
print(r.get("foo"))

### get key from local cache
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)

### change key in redis (cause invalidation)
r.set("foo", "barbar")

### Retrieves a new value from server and cache it
print(r.get("foo"))

### Make sure that new value was cached
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)

Check documentation to get more examples

🔥 Breaking Changes

  • Timeseries insertion filters for close samples (#​3228)
  • Enhanced classes string representation (#​3001)
  • Partial clean up of Python 3.7 compatibility (#​2928)
  • Handle RESP3 sets as Python lists (#​3324)

🐛 Bug Fixes

  • Handle RESP3 sets as Python lists (#​3324)
  • Prevent async ClusterPipeline instances from becoming "false-y" (#​3068)
  • Add hostname field to _parse_node_line (#​3343)
  • More docs fixes (#​3326)
  • Delete the first-defined (and thus "duplicate") Script class (#​3333)
  • Catch a known DeprecationWarning when calling .close() (#​3335)
  • Add missed redismod at test_commands.py (#​3369)

🧰 Maintenance

Contributors

We'd like to thank all the contributors who worked on this release!

@​AYMENJD, @​AniketP04, @​BackflipPenguin, @​ING-XIAOJIAN, @​MrDenkoV, @​Pedram-Parsian, @​TheBlusky, @​TomerHekmati, @​Wh1isper, @​Zaczero, @​ahmedabdou14, @​akx, @​andy-stark-redis, @​catap, @​chayim, @​d184230, @​danielzhangau, @​daveisfera, @​dependabot, @​dependabot[bot], @​dkuser, @​dmaier-redislabs, @​dmkulazhenko, @​dudizimber, @​dvora-h, @​dwdougherty, @​enjoy-binbin, @​gerzse, @​hongqn, @​jakob-keller, @​kristjanvalur, @​kurtmckee, @​matrey, @​mattwang44, @​max-muoto, @​parmenashp, @​poiuj, @​r0ro, @​sjpotter, @​tbbream, @​trkwyk, @​uglide, @​vladvildanov, @​w-miller, @​wKollendorf, @​willfrey, @​willianmrs, @​zakaf, @​zware and @​zxjlm

psf/requests (requests)

v2.32.5

Compare Source

Bugfixes

  • The SSLContext caching feature originally introduced in 2.32.0 has created a new class of issues in Requests that have had negative impact across a number of use cases. The Requests team has decided to revert this feature as long term maintenance of it is proving to be unsustainable in its current iteration.

Deprecations

  • Added support for Python 3.14.
  • Dropped support for Python 3.8 following its end of support.

v2.32.4

Compare Source

Security

  • CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted environment will retrieve credentials for the wrong hostname/machine from a netrc file.

Improvements

  • Numerous documentation improvements

Deprecations

  • Added support for pypy 3.11 for Linux and macOS.
  • Dropped support for pypy 3.9 following its end of support.
sdispater/tomlkit (tomlkit)

v0.13.3

Compare Source

Added
  • Add .item() method to array and tables to retrieve an item by key. (#​390)
Fixed
  • Fix missing newline when parsing a separated array of tables without trailing new line. (#​381)
  • Fix non-existing key error when deleting an item from an out-of-order table. (#​383)
  • Ensure newline is added between the plain values and the first table. (#​387)
  • Fix repeated whitespace when removing an array item. (#​405)
  • Fix invalid serialization after removing array item if the comma is on its own line. (#​408)
  • Fix serialization of a nested dotted key table. (#​411)
  • Refine the error message when use non-string as single key. (#​412)
  • Fix invalid serialization after overwriting a key of a out-of-order table. (#​414)
encode/uvicorn (uvicorn)

v0.35.0: Version 0.35.0

Compare Source

Added

Changed

New Contributors

Full Changelog: https://github.com/encode/uvicorn/compare/0.34.3...0.35.0

v0.34.3: Version 0.34.3

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/encode/uvicorn/compare/0.34.2...0.34.3

v0.34.2: Version 0.34.2

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/encode/uvicorn/compare/0.34.1...0.34.2

v0.34.1: Version 0.34.1

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/encode/uvicorn/compare/0.34.0...0.34.1

v0.34.0: Version 0.34.0

Compare Source

What's Changed


Full Changelog: https://github.com/encode/uvicorn/compare/0.33.0...0.34.0

v0.33.0: Version 0.33.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/encode/uvicorn/compare/0.32.1...0.33.0

v0.32.1: Version 0.32.1

Compare Source

What's Changed


Full Changelog: https://github.com/encode/uvicorn/compare/0.32.0...0.32.1

v0.32.0: Version 0.32.0

Compare Source

Added

  • Officially support Python 3.13 (#​2482)
  • Warn when max_request_limit is exceeded (#​2430)

Full Changelog: https://github.com/encode/uvicorn/compare/0.31.1...0.32.0

v0.31.1: Version 0.31.1

Compare Source

Fixed

  • Support WebSockets 0.13.1 #​2471
  • Restore support for [*] in trusted hosts #​2480
  • Add PathLike[str] type hint for ssl_keyfile #​2481

Full Changelog: https://github.com/encode/uvicorn/compare/0.31.0...0.31.1

v0.31.0: Version 0.31.0

Compare Source

Added

Improve ProxyHeadersMiddleware (#​2468) and (#​2231):

  • Fix the host for requests from clients running on the proxy server itself.
  • Fallback to host that was already set for empty x-forwarded-for headers.
  • Also allow specifying IP Networks as trusted hosts. This greatly simplifies deployments on docker swarm/Kubernetes, where the reverse proxy might have a dynamic IP.
    • This includes support for IPv6 Address/Networks.

Full Changelog: https://github.com/encode/uvicorn/compare/0.30.6...0.31.0

samuelcolvin/watchfiles (watchfiles)

v1.1.0: 2025-06-15

Compare Source

What's Changed

Full Changelog: https://github.com/samuelcolvin/watchfiles/compare/v1.0.5...v1.1.0

v1.0.5: 2025-04-08

Compare Source

What's Changed

Full Changelog: https://github.com/samuelcolvin/watchfiles/compare/v1.0.4...v1.0.5


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻️ Rebasing: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This MR will be recreated if closed unmerged. Get config help if that's undesired.


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

This MR has been generated by Renovate Bot.

Edited by renovate

Merge request reports

Loading