Update all dependencies by renovate[bot] · Pull Request #284 · DiamondLightSource/python-zocalo
v2.17.0
Happy 2025! This release is being made from FOSDEM 2025, in Brussels, Belgium.
Thank you to all contributors, new and old,
and here's to another great year of internationalization and localization!
Features
* CLDR: Babel now uses CLDR 46, by @​tomasr8 in :gh:`1145`
* Dates: Allow specifying an explicit format in parse_date/parse_time by @​tomasr8 in :gh:`1131`
* Dates: More alternate characters are now supported by `format_skeleton`. By @​tomasr8 in :gh:`1122`
* Dates: Support short and narrow formats for format_timedelta when using `add_direction`, by @​akx in :gh:`1163`
* Messages: .po files now enclose white spaces in filenames like GNU gettext does. By @​Dunedan in :gh:`1105`, and @​tomasr8 in :gh:`1120`
* Messages: Initial support for `Message.python_brace_format`, by @​tomasr8 in :gh:`1169`
* Numbers: LC_MONETARY is now preferred when formatting currencies, by @​akx in :gh:`1173`
Bugfixes
- Dates: Make seconds optional in
parse_timetime formats by @tomasr8 in :gh:1141 - Dates: Replace
str.indexwithstr.findby @tomasr8 in :gh:1130 - Dates: Strip extra leading slashes in
/etc/localtimeby @akx in :gh:1165 - Dates: Week numbering and formatting of dates with week numbers was repaired by @jun66j5 in :gh:
1179 - General: Improve handling for
locale=Noneby @akx in :gh:1164 - General: Remove redundant assignment in
Catalog.__setitem__by @tomasr8 in :gh:1167 - Messages: Fix extracted lineno with nested calls, by @dylankiss in :gh:
1126 - Messages: Fix of list index out of range when translations is empty, by @gabe-sherman in :gh:
1135 - Messages: Fix the way obsolete messages are stored by @tomasr8 in :gh:
1132 - Messages: Simplify
read_mologic regardingcatalog.charsetby @tomasr8 in :gh:1148 - Messages: Use the first matching method & options, rather than first matching method & last options, by @jpmckinney in :gh:
1121
Deprecation and compatibility
* Dates: Fix deprecation warnings for `datetime.utcnow()` by @​tomasr8 in :gh:`1119`
* Docs: Adjust docs/conf.py to add compatibility with sphinx 8 by @​hrnciar in :gh:`1155`
* General: Import `Literal` from the typing module by @​tomasr8 in :gh:`1175`
* General: Replace `OrderedDict` with just `dict` by @​tomasr8 in :gh:`1149`
* Messages: Mark `wraptext` deprecated; use `TextWrapper` directly in `write_po` by @​akx in :gh:`1140`
Infrastructure
~~~~~~~~~~~~~~
* Add tzdata as dev dependency and sync with tox.ini by @​wandrew004 in :gh:`1159`
* Duplicate test code was deleted by @​mattdiaz007 in :gh:`1138`
* Increase test coverage of the `python_format` checker by @​tomasr8 in :gh:`1176`
* Small cleanups by @​akx in :gh:`1160`, :gh:`1166`, :gh:`1170` and :gh:`1172`
* Update CI to use python 3.13 and Ubuntu 24.04 by @​tomasr8 in :gh:`1153`
Version 2.16.0
--------------
Features
~~~~~~~~
* CLDR: Upgrade to CLDR 45 by @​tomasr8 in :gh:`1077`
* Lists: Support list format fallbacks by @​akx in :gh:`1099`
* Messages: Initial support for reading mapping configuration as TOML by @​akx in :gh:`1108`
Bugfixes
~~~~~~~~
* CLDR: Do not allow substituting alternates or drafts in derived locales by @​akx in :gh:`1113`
* Core: Allow falling back to modifier-less locale data by @​akx in :gh:`1104`
* Core: Allow use of importlib.metadata for finding entrypoints by @​akx in :gh:`1102`
* Dates: Avoid crashing on importing localtime when TZ is malformed by @​akx in :gh:`1100`
* Messages: Allow parsing .po files that have an extant but empty Language header by @​akx in :gh:`1101`
* Messages: Fix ``--ignore-dirs`` being incorrectly read (#​1094) by @​john-psina and @​Edwin18 in :gh:`1052` and :gh:`1095`
* Messages: Make pgettext search plurals when translation is not found by @​tomasr8 in :gh:`1085`
Infrastructure
~~~~~~~~~~~~~~
* Replace deprecated `ast.Str` with `ast.Constant` by @​tomasr8 in :gh:`1083`
* CI fixes by @​akx in :gh:`1080`, :gh:`1097`, :gh:`1103`, :gh:`1107`
* Test on Python 3.13 beta releases by @​akx in
* Normalize package name to lower-case in setup.py by @​akx in :gh:`1110`
Documentation
~~~~~~~~~~~~~
* Add a mention to the docs that `format_skeleton(..., fuzzy=True)` may raise by @​tomasr8 in :gh:`1106`
* Two hyperlinks (to CLDR) and some typos by @​buhtz in :gh:`1115`
Version 2.15.0
--------------
Python version support
~~~~~~~~~~~~~~~~~~~~~~
* Babel 2.15.0 will require Python 3.8 or newer. (:gh:`1048`)
Features
~~~~~~~~
* CLDR: Upgrade to CLDR 44 (:gh:`1071`) (@​akx)
* Dates: Support for the "fall back to short format" logic for time delta formatting (:gh:`1075`) (@​akx)
* Message: More versatile .po IO functions (:gh:`1068`) (@​akx)
* Numbers: Improved support for alternate spaces when parsing numbers (:gh:`1007`) (@​ronnix's first contribution)
Infrastructure
~~~~~~~~~~~~~~
* Upgrade GitHub Actions (:gh:`1054`) (@​cclauss's first contribution)
* The Unicode license is now included in `locale-data` and in the documentation (:gh:`1074`) (@​akx)
Version 2.14.0
--------------
Upcoming deprecation
~~~~~~~~~~~~~~~~~~~~
* This version, Babel 2.14, is the last version of Babel to support Python 3.7.
Babel 2.15 will require Python 3.8 or newer.
* We had previously announced Babel 2.13 to have been the last version to support
Python 3.7, but being able to use CLDR 43 with Python 3.7 was deemed important
enough to keep supporting the EOL Python version for one more release.
Possibly backwards incompatible changes
Locale.number_symbolswill now have first-level keys for each numbering system.
Since the implicit default numbering system still is"latn", what had previously
been e.g.Locale.number_symbols['decimal']is nowLocale.number_symbols['latn']['decimal'].- Babel no longer directly depends on either
distutilsorsetuptools; if you had been
using the Babel setuptools command extensions, you would need to explicitly depend onsetuptools–
though given you're runningsetup.pyyou probably already do.
Features
* CLDR/Numbers: Add support of local numbering systems for number symbols by @​kajte in :gh:`1036`
* CLDR: Upgrade to CLDR 43 by @​rix0rrr in :gh:`1043`
* Frontend: Allow last_translator to be passed as an option to extract_message by @​AivGitHub in :gh:`1044`
* Frontend: Decouple `pybabel` CLI frontend from distutils/setuptools by @​akx in :gh:`1041`
* Numbers: Improve parsing of malformed decimals by @​Olunusib and @​akx in :gh:`1042`
Infrastructure
v7.12.0
-
The HTML report now shows separate coverage totals for statements and
branches, as well as the usual combined coverage percentage. Thanks to Ryuta
Otsuka for thediscussion <issue 2081_>_ and theimplementation <pull 2085_>_. -
The JSON report now includes separate coverage totals for statements and
branches, thanks toRyuta Otsuka <pull 2090_>_. -
Fix:
except*clauses were not handled properly under the "sysmon"
measurement core, causing KeyError exceptions as described inissue 2086_.
This is now fixed. -
Fix: we now defend against aggressive mocking of
open()that could cause
errors inside coverage.py. An example of a failure is inissue 2083_. -
Fix: in unusual cases where a test suite intentionally exhausts the system's
file descriptors to test handling errors inopen(), coverage.py would
fail when trying to open source files, as described inissue 2091_. This
is now fixed. -
A small tweak to the HTML report: file paths now use thin spaces around
slashes to make them easier to read.
.. _issue 2081: #2081
.. _issue 2083: #2083
.. _pull 2085: #2085
.. _issue 2086: #2086
.. _pull 2090: #2090
.. _issue 2091: #2091
.. _changes_7-11-3:
v7.11.3
-
Fix: the 7.11.1 changes meant that conflicts between a requested measurement
core and other settings would raise an error. This was a breaking change from
previous behavior, as reported inissue 2076_ andissue 2078_.The previous behavior has been restored: when the requested core conflicts
with other settings, another core is used instead, and a warning is issued. -
For contributors: the repo has moved from Ned's
nedbat GitHub account_ to
thecoveragepy GitHub organization_. The default branch has changed from
master to main.
.. _issue 2076: #2076
.. _issue 2078: #2078
.. _nedbat GitHub account: https://github.com/nedbat
.. _coveragepy GitHub organization: https://github.com/coveragepy
.. _changes_7-11-2:
v7.11.2
-
Fix: using the "sysmon" measurement core in 7.11.1, if Python code was
claimed to come from a non-Python file, aNotPythonexception could be
raised. This could happen for example with Jinja templates compiled to
Python, as reported inissue 2077_. This is now fixed. -
Doc: corrected the first entry in the 7.11.1 changelog.
.. _issue 2077: #2077
.. _changes_7-11-1:
v7.11.1
-
Fix: some chanages to details of how the measurement core is chosen, and how
conflicting settings are handled. The "sysmon" core cannot be used with some
conurrency settings, with dynamic context, and in Python 3.12/3.13, with
branch measurement.-
If the core is not specified and defaults to "sysmon" (Python 3.14+), but
other settings conflict with sysmon, then the "ctrace" core will be used
instead with no warning. For concurrency conflicts, this used to produce an
error, as described inissue 2064_. -
If the "sysmon" core is explicitly requested in your configuration, but
other settings conflict, an error is now raised. This used to produce a
warning.
-
-
Fix: some multi-line case clauses or for loops (and probably other
constructs) could cause incorrect claims of missing branches with the
sys.monitoring core, as described inissue 2070_. This is now fixed. -
Fix: when running in pytest under coverage, a
breakpoint()would stop in
the wrong frame, one level down from where it should, as described inissue 1420_. This was due to a coverage change in v6.4.1 that seemed to give a
slight performance improvement, but I couldn't reproduce the performance
gain, so it's been reverted, fixing the debugger problem. -
A new debug option
--debug=coreshows which core is in use and why. -
Split
sqlitedebugging information out of thesys:ref:coverage debug <cmd_debug>and :ref:cmd_run_debugoptions since it's bulky and not
very useful. -
Updated the :ref:
howitworkspage to better describe the three different
measurement cores.
.. _issue 1420: #1420
.. _issue 2064: #2064
.. _issue 2070: #2070
.. _changes_7-11-0:
v7.11.0
- Dropped support for Python 3.9, declared support for Python 3.15 alpha.
.. _changes_7-10-7:
v7.10.7
-
Performance: with branch coverage in large files, generating HTML, JSON, or
LCOV reports could take far too long due to some quadratic behavior when
creating the function and class index pages. This is now fixed, closing
issue 2048_. Thanks to Daniel Diniz for help diagnosing the problem. -
Most warnings and a few errors now have links to a page in the docs
explaining the specific message. Closesissue 1921_.
.. _issue 1921: #1921
.. _issue 2048: #2048
.. _changes_7-10-6:
v7.10.6
-
Fix:
sourcedirectories were not properly communicated to subprocesses
that ran in different directories, as reported inissue 1499_. This is now
fixed. -
Performance:
Alex Gaynor continues fine-tuning <pull 2038_>_ the speed of
combination, especially with many contexts.
.. _issue 1499: #1499
.. _pull 2038: #2038
.. _changes_7-10-5:
v7.10.5
- Big speed improvements for
coverage combine: it's now about twice as
fast! Huge thanks to Alex Gaynor for pull requests2032 <pull 2032_>,
2033 <pull 2033_>, and2034 <pull 2034_>_.
.. _pull 2032: #2032
.. _pull 2033: #2033
.. _pull 2034: #2034
.. _changes_7-10-4:
v7.10.4
-
Added
patch = forkfor times when the built-in forking support is
insufficient. -
Fix:
patch = execvalso inherits the entire coverage configuration now.
.. _changes_7-10-3:
v7.10.3
-
Fixes for
patch = subprocess:-
If subprocesses spawned yet more subprocesses simultaneously, some coverage
could be missed. This is now fixed, closingissue 2024_. -
If subprocesses were created in other directories, their data files were
stranded there and not combined into the totals, as described inissue 2025_. This is now fixed. -
On Windows (or maybe only some Windows?) the patch would fail with a
ModuleNotFounderror trying to import coverage. This is now fixed,
closingissue 2022_. -
Originally only options set in the coverage configuration file would apply
to subprocesses. Options set on thecoverage runcommand line (such as
--branch) wouldn't be communicated to the subprocesses. This could
lead to combining failures, as described inissue 2021_. Now the entire
configuration is used in subprocesses, regardless of its origin. -
Added
debug=patchto help diagnose problems.
-
-
Fix: really close all SQLite databases, even in-memory ones. Closes
issue 2017_.
.. _issue 2017: #2017
.. _issue 2021: #2021
.. _issue 2022: #2022
.. _issue 2024: #2024
.. _issue 2025: #2025
.. _changes_7-10-2:
v7.10.2
- Fix: some code with NOP bytecodes could report missing branches that are
actually executed. This is now fixed, closingissue 1999_. Python 3.9
still shows the problem.
.. _issue 1999: #1999
.. _changes_7-10-1:
v7.10.1
-
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. Improvesissue 831_. -
Fix: changed where .pth files are written for
patch = subprocess, closing
issue 2006_.
.. _issue 2006: #2006
.. _changes_7-10-0:
v7.10.0
-
A new configuration option: ":ref:
config_run_patch" specifies named patches
to work around some limitations in coverage measurement. These patches are
available:-
patch = _exitlets coverage save its data even when :func:os._exit() <python:os._exit>is used to abruptly end the process. This closes
long-standingissue 310_ as well as its duplicates:issue 312,issue 1673,issue 1845, andissue 1941. -
patch = subprocessmeasures 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 oldissue 367, its duplicateissue 378and old
issue 689_. -
patch = execvadjusts 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. Closesissue 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. Closesissue 1308_. -
Two new exclusion patterns are part of the defaults:
...is automatically
excluded as a line andif TYPE_CHECKING:is excluded as a branch. Closes
issue 831_. -
A new command-line option:
--save-signal=USR1specifies 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_outputand
: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. Closesissue 2001_. -
In the very unusual situation of not having a current frame, coverage no
longer crashes when using the sysmon core, fixingissue 2005_.
.. _issue 43: #43
.. _issue 310: #310
.. _issue 312: #312
.. _issue 367: #367
.. _issue 378: #378
.. _issue 689: #689
.. _issue 831: #831
.. _issue 1308: #1308
.. _issue 1673: #1673
.. _issue 1845: #1845
.. _issue 1941: #1941
.. _pull 1998: #1998
.. _issue 2001: #2001
.. _issue 2005: #2005
.. _changes_7-9-2:
v7.9.2
-
Fix: complex conditionals within a line might cause a KeyError when using
sys.monitoring, as reported inissue 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: #1984
.. _issue 1991: #1991
.. _changes_7-9-1:
v7.9.1
-
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
-
Added a
[run] coreconfiguration setting to specify the measurement core,
which was previously only available through the COVERAGE_CORE environment
variable. Finishesissue 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, closingissue 1977. Thanks,Adam Turner <pull 1978_>_. -
Fixed a "ValueError: min() arg is an empty sequence" error caused by strange
empty modules, found byoss-fuzz_.
.. _issue 1746: #1746
.. _issue 1977: #1977
.. _pull 1978: #1978
.. _issue 1980: #1980
.. _PEP 489: https://peps.python.org/pep-0489
.. _oss-fuzz: https://google.github.io/oss-fuzz/
.. _changes_7-8-2:
v7.8.2
- Wheels are provided for Windows ARM64 on Python 3.11, 3.12, and 3.13.
Thanks,Finn Womack <pull 1972_>_.
.. _issue 1971: #1971
.. _pull 1972: #1972
.. _changes_7-8-1:
v7.8.1
-
A number of EncodingWarnings were fixed that could appear if you've enabled
PYTHONWARNDEFAULTENCODING, fixingissue 1966. Thanks,Henry Schreiner <pull 1967_>. -
Fixed a race condition when using sys.monitoring with free-threading Python,
closingissue 1970_.
.. _issue 1966: #1966
.. _pull 1967: #1967
.. _issue 1970: #1970
.. _changes_7-8-0:
v7.8.0
-
Added a new
source_dirssetting for symmetry with the existing
source_pkgssetting. It's preferable to the existingsourcesetting,
because you'll get a clear error when directories don't exist. Fixesissue 1942. Thanks,Jeremy Fleischman <pull 1943_>. -
Fix: the PYTHONSAFEPATH environment variable new in Python 3.11 is properly
supported, closingissue 1696. Thanks,Philipp A. <pull 1700_>. This
works properly except for a detail when using thecoveragecommand on
Windows. There you can usepython -m coverageinstead if you need exact
emulation.
.. _issue 1696: #1696
.. _pull 1700: #1700
.. _issue 1942: #1942
.. _pull 1943: #1943
.. _changes_7-7-1:
v7.7.1
- A few small tweaks to the sys.monitoring support for Python 3.14. Please
test!
.. _changes_7-7-0:
v7.7.0
-
The Coverage object has a new method, :meth:
.Coverage.branch_statsfor
getting simple branch information for a module. Closesissue 1888_. -
The :class:
Coverage constructor<.Coverage>now has apluginsparameter
for passing in plugin objects directly, thanks toAlex Gaynor <pull 1919_>_. -
Many constant tests in if statements are now recognized as being optimized
away. For example, previouslyif 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=sysmonto try it out. -
Confirmed support for PyPy 3.11. Thanks Michał Górny.
.. _issue 1888: #1888
.. _pull 1919: #1919
.. _changes_7-6-12:
v7.6.12
- Fix: some aarch64 distributions were missing (
issue 1927_). These are now
building reliably.
.. _issue 1927: #1927
.. _changes_7-6-11:
v7.6.11
-
Fix: a memory leak in CTracer has been fixed. The details are in
issue 1924_ andpytest-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: #1914
.. _issue 1924: #1924
.. _pytest-dev 676: pytest-dev/pytest-cov#676
.. _changes_7-6-10:
v7.6.10
-
Fix: some descriptions of missing branches in HTML and LCOV reports were
incorrect when multi-line statements were involved (issue 1874_ andissue 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 inissue 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, butgit bisecthelped find it,
and now it's fixed. -
Docs: re-wrote the :ref:
subprocesspage to put multiprocessing first and to
highlight the correct use of :class:multiprocessing.Pool <python:multiprocessing.pool.Pool>.
.. _issue 1874: #1874
.. _issue 1875: #1875
.. _issue 1902: #1902
.. _issue 1908: #1908
.. _pep649: https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-deferred-annotations
.. _changes_7-6-9:
v7.6.9
- 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: #1901
.. _changes_7-6-8:
v7.6.8
-
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.
Fixesissue 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 inissue 1896_.
.. _issue 1896: #1896
.. _changes_7-6-7:
v7.6.7
- 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
- One of the new asserts from 7.6.5 caused problems in real projects, as
reported inissue 1891_. The assert has been removed.
.. _issue 1891: #1891
.. _changes_7-6-5:
v7.6.5
-
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 forissue 1880_. -
Fix: isolate our code more from mocking in the os module that in rare cases
can causebizarre 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: pytest-dev/pytest-cov#666
.. _changes_7-6-4:
📅 Schedule: Branch creation - "after 7am and before 4pm on monday" in timezone Europe/London, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.