Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relative paths duplicates paths on Windows #1752

Closed
henryiii opened this issue Feb 22, 2024 · 9 comments
Closed

Relative paths duplicates paths on Windows #1752

henryiii opened this issue Feb 22, 2024 · 9 comments
Labels
bug Something isn't working needs triage

Comments

@henryiii
Copy link

henryiii commented Feb 22, 2024

Describe the bug

I've been working on issues with nox's test suite. We weren't correctly including runs from all three OS's, and we have just been fixing that. We seem to have a 50% chance of failure with D:\a\nox\nox\__init__.py showing up with "no source for file". I'm pretty sure this started showing up for the first time without this fix roughly 1-2 days ago, but the issue is more reliable if we properly make sure coverage files don't overwrite each other. We are using editable installs and relative paths, so I'm not sure why it's getting stored that way (even in the succeeding 50%). If I look at the report on Windows, every file is listed twice. If I look at the .coverage.win32* files, I see that every file is present twice in files, once as a relative path, and once as an absolute path. The other OS's are just fine, it's only Windows that is doing this.

This is with a hatchling editable install of nox, inside a nox runner. Using pytest-cov.

To Reproduce
How can we reproduce the problem? Please be specific. Don't link to a failing CI job. Answer the questions below:

  1. What version of Python are you using? 3.7-3.12.
  2. What version of coverage.py shows the problem? The output of coverage debug sys is helpful. 7.4.2 and 7.2.7
  3. What versions of what packages do you have installed? The output of pip freeze is helpful. all latest supported
  4. What code shows the problem? Give us a specific commit of a specific repo that we can check out. If you've already worked around the problem, please provide a commit before that fix. wntrblm/nox@3b8e026 passed at one point, and now is failing. wntrblm/nox@1c998d1 is probably better, though, since that's with the OS naming fix.
  5. What commands should we run to reproduce the problem? Be specific. Include everything, even git clone, pip install, and so on. Explain like we're five! _I've only done it in CI, since I don't have easy access to a Windows machine right now, but it should be possible to run pipx run nox -s 'tests(python="3.12", tox_version="latest")'` (AFAICT it happens on all of them).

Expected behavior
There should not be two copies of files on Windows. SELECT * FROM file; reports:

1|D:\a\nox\nox\nox\__init__.py
2|D:\a\nox\nox\nox\_options.py
3|D:\a\nox\nox\nox\_option_set.py
4|D:\a\nox\nox\nox\tasks.py
5|D:\a\nox\nox\nox\registry.py
6|D:\a\nox\nox\nox\_decorators.py
7|D:\a\nox\nox\nox\_typing.py
8|D:\a\nox\nox\nox\_version.py
9|D:\a\nox\nox\nox\logger.py
10|D:\a\nox\nox\nox\manifest.py
11|D:\a\nox\nox\nox\sessions.py
12|D:\a\nox\nox\nox\command.py
13|D:\a\nox\nox\nox\popen.py
14|D:\a\nox\nox\nox\virtualenv.py
15|D:\a\nox\nox\nox\_parametrize.py
16|D:\a\nox\nox\nox\tox_to_nox.py
17|D:\a\nox\nox\nox\workflow.py
18|D:\a\nox\nox\nox\__main__.py
19|nox\__init__.py
20|nox\_options.py
21|nox\_option_set.py
22|nox\tasks.py
23|nox\registry.py
24|nox\_decorators.py
25|nox\_version.py
26|nox\logger.py
27|nox\manifest.py
28|nox\sessions.py
29|nox\command.py
30|nox\popen.py
31|nox\virtualenv.py
32|nox\_parametrize.py
33|nox\__main__.py
34|nox\workflow.py
35|nox\tox_to_nox.py

And the coverage report looks like this:

---------- coverage: platform win32, python 3.8.10-final-0 -----------
Name                  Stmts   Miss Branch BrPart  Cover
-------------------------------------------------------
nox\__init__.py           8      0      0      0   100%
nox\__init__.py           8      0      0      0   100%
nox\__main__.py          20      0      4      0   100%
nox\__main__.py          20      0      4      0   100%
nox\_decorators.py       52      0      6      0   100%
nox\_decorators.py       52      0      6      0   100%
nox\_option_set.py      108      0     38      0   100%
nox\_option_set.py      108      0     38      0   100%
nox\_options.py          78      0     32      0   100%
nox\_options.py          78      0     32      0   100%
nox\_parametrize.py      75      0     36      0   100%
nox\_parametrize.py      75      0     36      0   100%
nox\_typing.py            4      4      0      0     0%
nox\_version.py          42      1     14      1    96%
nox\_version.py          42      1     14      1    96%
nox\command.py           68      1     34      2    97%
nox\command.py           68      1     34      2    97%
nox\logger.py            47      0     16      1    98%
nox\logger.py            47      0     16      1    98%
nox\manifest.py         150      0     84      0   100%
nox\manifest.py         150      0     84      0   100%
nox\popen.py             38      7      8      1    83%
nox\popen.py             38      7      8      1    83%
nox\registry.py          23      0      6      0   100%
nox\registry.py          23      0      6      0   100%
nox\sessions.py         303      0     96      0   100%
nox\sessions.py         303      0     96      0   100%
nox\tasks.py            152      0     56      0   100%
nox\tasks.py            152      0     56      0   100%
nox\tox_to_nox.py        64     30     28      2    43%
nox\tox_to_nox.py        64     30     28      2    43%
nox\virtualenv.py       211      3     70      5    97%
nox\virtualenv.py       211      3     70      5    97%
nox\workflow.py          18      1      6      1    92%
nox\workflow.py          18      1      6      1    92%
-------------------------------------------------------
TOTAL                  2918     90   1068     26    96%

Linux and macOS jobs do not show duplicate copies.

Additional context

I think I have finally been able to work around it by avoiding relative paths and using source_pgks and avoiding the editable install (I get an issue with macOS paths if I include it, though the duplicated paths issue is still fine). I'm pretty sure that any time I specify relative paths, this is going to be duplicated, and if I don't, it's fine. I've been trying a few dozen things, across several PRs if any of the other combinations are useful.

I think I can work around it by post-processing the data files to remove the D:\ files (I also swap \ for / - if I do that locally, I can view the files without the duplicate lines).

This is my working workaround in wntrblm/nox#778:

if sys.platform.startswith("win"):
    with contextlib.closing(sqlite3.connect(coverage_file)) as con, con:
        con.execute("UPDATE file SET path = REPLACE(path, '\\', '/')")
        con.execute("DELETE FROM file WHERE SUBSTR(path, 2, 1) == ':'")
@henryiii henryiii added bug Something isn't working needs triage labels Feb 22, 2024
@nedbat
Copy link
Owner

nedbat commented Mar 5, 2024

wntrblm/nox@1c998d1 is probably better, though, since that's with the OS naming fix.

I created a branch from that commit, and am having trouble finding and examining the coverage data files: https://github.com/nedbat/nox/actions/runs/8161334625 Can you help me understand how it's supposed to be working? Without my changes, I see that the "Save coverage report" step is finding files to upload, so I'm confused.

@nedbat
Copy link
Owner

nedbat commented Mar 6, 2024

I did some experiments in an Azure virtual machine. It looks to me like the data attributed to nox\something.py is collected in the main process, and the data attributed to D:\a\nox\nox\nox\something.py is being collected in subprocesses. Is there something unusual about how nox or its test suite manages subprocesses?

@nedbat
Copy link
Owner

nedbat commented Mar 6, 2024

I'm also wondering if you can run this scenario with coverage.py directly instead of using pytest-cov, just to remove one factor.

@henryiii
Copy link
Author

henryiii commented Mar 7, 2024

I can try. My baby daughter came home from the hospital yesterday so won't have much time for a bit, but I'll try without pytest-cov at some point in the near(ish) future!

Repository owner deleted a comment from BruDriguezz Mar 9, 2024
@nedbat
Copy link
Owner

nedbat commented Mar 9, 2024

I have found the heart of the problem:

When combining data files, paths get remapped. With relative_files=true, a mapping rule is auto-generated when a relative path name is seen. That rule can also apply to absolute paths. Here's an excerpt from the debug log (with debug=pathmap):

Aliases (relative=True):
Generating rule: '*/nox' -> 'nox\\' using regex '^(.*[\\\\/])?nox[\\\\/]'
Matched path 'nox\\__init__.py' to rule '*/nox' -> 'nox\\', producing 'nox\\__init__.py'
... many lines skipped
Matched path 'C:\\Users\\nedbat\\nox\\nox\\__init__.py' to rule '*/nox' -> 'nox\\', producing 'nox\\__init__.py'

If the first file combined has absolute paths, we see this instead:

Aliases (relative=True):
No rules match, path 'C:\\Users\\nedbat\\nox\\nox\\__init__.py' is unchanged

The bug was happening only sometimes because sometimes the first file combined at absolute paths. Then there hadn;t been a remapping rule generated, so the absolute paths remained unchanged. If the first file to be combined had relative paths, then the rule would be generated, and when the absolute paths were encountered, they would be remapped.

The order of the files being combined depended on the file name, which includes a process id, that's the source of the randomness. If the first file (ordered by process id) had absolute paths, then there were duplicates in the result. if the first file had relative paths, then there weren't duplicates because the mapping rule was autogenerated and absolute paths were mapped to relative.

Why is this only happening on Windows? I'm not sure why, but there are more sub-processes spawned on Windows than on Mac. The data files with the absolute path names are created by those extra subprocesses.

@nedbat
Copy link
Owner

nedbat commented Mar 9, 2024

@BruDriguezz let me know if you need more info

BruDriguezz added a commit to BruDriguezz/coveragepy that referenced this issue Mar 14, 2024
nedbat added a commit that referenced this issue Mar 14, 2024
If two data files are combined, one with absolute paths, and one with relative,
with relative_files=True in effect, the results depended on the order of
combining.

If the absolute files were seen first, they were added as absolute paths.  If
the relative files were seen first, a mapping rule was generated that would then
remap the absolute paths when they were seen.

This fix ensures that absolute paths are remapped even if they are seen first.
nedbat added a commit that referenced this issue Mar 14, 2024
If two data files are combined, one with absolute paths, and one with relative,
with relative_files=True in effect, the results depended on the order of
combining.

If the absolute files were seen first, they were added as absolute paths.  If
the relative files were seen first, a mapping rule was generated that would then
remap the absolute paths when they were seen.

This fix ensures that absolute paths are remapped even if they are seen first.
nedbat added a commit that referenced this issue Mar 14, 2024
If two data files are combined, one with absolute paths, and one with relative,
with relative_files=True in effect, the results depended on the order of
combining.

If the absolute files were seen first, they were added as absolute paths.  If
the relative files were seen first, a mapping rule was generated that would then
remap the absolute paths when they were seen.

This fix ensures that absolute paths are remapped even if they are seen first.
@nedbat
Copy link
Owner

nedbat commented Mar 14, 2024

This is fixed in 1b19799.

@nedbat nedbat closed this as completed Mar 14, 2024
@nedbat
Copy link
Owner

nedbat commented Mar 14, 2024

This is now released as part of coverage 7.4.4.

@jab
Copy link

jab commented Mar 15, 2024

Just saw the latest release notes and found my way here, since it reminded me of an issue I opened a few months ago (#1674). I am no longer affected by that issue (new job), but figured I'd link to it from here in case the fix for this fixes #1674 too.

renovate bot added a commit to allenporter/flux-local that referenced this issue Mar 15, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [coverage](https://togithub.com/nedbat/coveragepy) | `==7.4.3` ->
`==7.4.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.4.3/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.4.3/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.4.4`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-744--2024-03-14)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.3...7.4.4)

- Fix: in some cases, even with `[run] relative_files=True`, a data file
could be created with absolute path names. When combined with other
relative
data files, it was random whether the absolute file names would be made
relative or not. If they weren't, then a file would be listed twice in
reports, as detailed in `issue 1752`\_. This is now fixed: absolute file
names are always made relative when combining. Thanks to Bruno Rodrigues
dos
    Santos for support.

- Fix: the last case of a match/case statement had an incorrect message
if the
branch was missed. It said the pattern never matched, when actually the
    branch is missed if the last case always matched.

- Fix: clicking a line number in the HTML report now positions more
accurately.

- Fix: the `report:format` setting was defined as a boolean, but should
be a
string. Thanks, `Tanaydin Sirin <pull 1754_>`\_. It is also now
documented
    on the :ref:`configuration page <config_report_format>`.

.. \_issue
1752:[nedbat/coveragepy#1752
.. \_pull
1754[nedbat/coveragepy#1754

.. \_changes\_7-4-3:

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
AlexWaygood added a commit to AlexWaygood/typeshed-stats that referenced this issue Mar 16, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change | Age | Adoption | Passing |
Confidence |
|---|---|---|---|---|---|---|---|
|
[astral-sh/ruff-pre-commit](https://togithub.com/astral-sh/ruff-pre-commit)
| repository | minor | `v0.2.1` -> `v0.3.3` |
[![age](https://developer.mend.io/api/mc/badges/age/github-tags/astral-sh%2fruff-pre-commit/v0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/github-tags/astral-sh%2fruff-pre-commit/v0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/github-tags/astral-sh%2fruff-pre-commit/v0.2.1/v0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/astral-sh%2fruff-pre-commit/v0.2.1/v0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/MarkDown](https://togithub.com/Python-Markdown/markdown)
([changelog](https://python-markdown.github.io/changelog/)) |
project.optional-dependencies | minor | `==3.5.2` -> `==3.6` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/docs%2fMarkDown/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/docs%2fMarkDown/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/docs%2fMarkDown/3.5.2/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/docs%2fMarkDown/3.5.2/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/mkdocs-material](https://togithub.com/squidfunk/mkdocs-material)
| project.optional-dependencies | patch | `==9.5.8` -> `==9.5.13` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/docs%2fmkdocs-material/9.5.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/docs%2fmkdocs-material/9.5.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/docs%2fmkdocs-material/9.5.8/9.5.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/docs%2fmkdocs-material/9.5.8/9.5.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/mkdocstrings](https://togithub.com/mkdocstrings/mkdocstrings)
([changelog](https://mkdocstrings.github.io/changelog)) |
project.optional-dependencies | patch | `==0.24.0` -> `==0.24.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/docs%2fmkdocstrings/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/docs%2fmkdocstrings/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/docs%2fmkdocstrings/0.24.0/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/docs%2fmkdocstrings/0.24.0/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [docs/mkdocstrings-python](https://togithub.com/mkdocstrings/python)
([changelog](https://mkdocstrings.github.io/python/changelog)) |
project.optional-dependencies | minor | `==1.8.0` -> `==1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/docs%2fmkdocstrings-python/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/docs%2fmkdocstrings-python/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/docs%2fmkdocstrings-python/1.8.0/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/docs%2fmkdocstrings-python/1.8.0/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [misc-lint/ruff](https://docs.astral.sh/ruff)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| project.optional-dependencies | minor | `==0.2.1` -> `==0.3.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/misc-lint%2fruff/0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/misc-lint%2fruff/0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/misc-lint%2fruff/0.2.1/0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/misc-lint%2fruff/0.2.1/0.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest/coverage](https://togithub.com/nedbat/coveragepy) |
project.optional-dependencies | patch | `==7.4.1` -> `==7.4.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest%2fcoverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest%2fcoverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest%2fcoverage/7.4.1/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest%2fcoverage/7.4.1/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest/pytest](https://togithub.com/pytest-dev/pytest)
([changelog](https://docs.pytest.org/en/stable/changelog.html)) |
project.optional-dependencies | minor | `==8.0.0` -> `==8.1.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest%2fpytest/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest%2fpytest/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest%2fpytest/8.0.0/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest%2fpytest/8.0.0/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[pytest/pytest-asyncio](https://togithub.com/pytest-dev/pytest-asyncio)
([changelog](https://pytest-asyncio.readthedocs.io/en/latest/reference/changelog.html))
| project.optional-dependencies | patch | `==0.23.5` -> `==0.23.5.post1`
|
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest%2fpytest-asyncio/0.23.5.post1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest%2fpytest-asyncio/0.23.5.post1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest%2fpytest-asyncio/0.23.5/0.23.5.post1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest%2fpytest-asyncio/0.23.5/0.23.5.post1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[pytest/pytest-subtests](https://togithub.com/pytest-dev/pytest-subtests)
| project.optional-dependencies | minor | `==0.11.0` -> `==0.12.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest%2fpytest-subtests/0.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest%2fpytest-subtests/0.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest%2fpytest-subtests/0.11.0/0.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest%2fpytest-subtests/0.11.0/0.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [typecheck/mypy](https://www.mypy-lang.org/)
([source](https://togithub.com/python/mypy),
[changelog](https://mypy-lang.blogspot.com/)) |
project.optional-dependencies | minor | `==1.8.0` -> `==1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/typecheck%2fmypy/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/typecheck%2fmypy/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/typecheck%2fmypy/1.8.0/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/typecheck%2fmypy/1.8.0/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [typecheck/types-Markdown](https://togithub.com/python/typeshed)
([changelog](https://togithub.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/Markdown.md))
| project.optional-dependencies | minor | `==3.5.0.20240129` ->
`==3.6.0.20240316` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/typecheck%2ftypes-Markdown/3.6.0.20240316?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/typecheck%2ftypes-Markdown/3.6.0.20240316?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/typecheck%2ftypes-Markdown/3.5.0.20240129/3.6.0.20240316?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/typecheck%2ftypes-Markdown/3.5.0.20240129/3.6.0.20240316?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [typecheck/types-beautifulsoup4](https://togithub.com/python/typeshed)
([changelog](https://togithub.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/beautifulsoup4.md))
| project.optional-dependencies | patch | `==4.12.0.20240106` ->
`==4.12.0.20240229` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/typecheck%2ftypes-beautifulsoup4/4.12.0.20240229?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/typecheck%2ftypes-beautifulsoup4/4.12.0.20240229?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/typecheck%2ftypes-beautifulsoup4/4.12.0.20240106/4.12.0.20240229?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/typecheck%2ftypes-beautifulsoup4/4.12.0.20240106/4.12.0.20240229?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

Note: The `pre-commit` manager in Renovate is not supported by the
`pre-commit` maintainers or community. Please do not report any problems
there, instead [create a Discussion in the Renovate
repository](https://togithub.com/renovatebot/renovate/discussions/new)
if you have any questions.

---

### Release Notes

<details>
<summary>astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)</summary>

###
[`v0.3.3`](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.3.2...v0.3.3)

[Compare
Source](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.3.2...v0.3.3)

###
[`v0.3.2`](https://togithub.com/astral-sh/ruff-pre-commit/releases/tag/v0.3.2)

[Compare
Source](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.3.1...v0.3.2)

See: https://github.com/astral-sh/ruff/releases/tag/v0.3.2

###
[`v0.3.1`](https://togithub.com/astral-sh/ruff-pre-commit/releases/tag/v0.3.1)

[Compare
Source](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.3.0...v0.3.1)

See: https://github.com/astral-sh/ruff/releases/tag/v0.3.1

###
[`v0.3.0`](https://togithub.com/astral-sh/ruff-pre-commit/releases/tag/v0.3.0)

[Compare
Source](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.2.2...v0.3.0)

See: https://github.com/astral-sh/ruff/releases/tag/v0.3.0

###
[`v0.2.2`](https://togithub.com/astral-sh/ruff-pre-commit/releases/tag/v0.2.2)

[Compare
Source](https://togithub.com/astral-sh/ruff-pre-commit/compare/v0.2.1...v0.2.2)

See: https://github.com/astral-sh/ruff/releases/tag/v0.2.2

</details>

<details>
<summary>Python-Markdown/markdown (docs/MarkDown)</summary>

###
[`v3.6`](https://togithub.com/Python-Markdown/markdown/compare/3.5.2...3.6)

[Compare
Source](https://togithub.com/Python-Markdown/markdown/compare/3.5.2...3.6)

</details>

<details>
<summary>squidfunk/mkdocs-material (docs/mkdocs-material)</summary>

###
[`v9.5.13`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.5.13):
mkdocs-material-9.5.13

[Compare
Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.5.12...9.5.13)

-   Updated Slovak translations
-   Improved info plugin interop with projects plugin
-   Improved info plugin inclusion/exclusion logic
-   Fixed info plugin not gathering files recursively
- Fixed
[#&#8203;6750](https://togithub.com/squidfunk/mkdocs-material/issues/6750):
Ensure info plugin packs up all necessary files

Thanks to [@&#8203;kamilkrzyskow](https://togithub.com/kamilkrzyskow)
and [@&#8203;scepka](https://togithub.com/scepka) for their
contributions

###
[`v9.5.12`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.5.12):
mkdocs-material-9.5.12

[Compare
Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.5.11...9.5.12)

- Fixed
[#&#8203;6846](https://togithub.com/squidfunk/mkdocs-material/issues/6846):
Some meta tags removed on instant navigation (9.4.2 regression)
- Fixed
[#&#8203;6823](https://togithub.com/squidfunk/mkdocs-material/issues/6823):
KaTex not rendering on instant navigation (9.5.5 regression)
- Fixed
[#&#8203;6821](https://togithub.com/squidfunk/mkdocs-material/issues/6821):
Privacy plugin doesn't handle URLs with encoded characters

###
[`v9.5.11`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.5.11):
mkdocs-material-9.5.11

[Compare
Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.5.10...9.5.11)

-   Updated Finnish translation

###
[`v9.5.10`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.5.10):
mkdocs-material-9.5.10

[Compare
Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.5.9...9.5.10)

-   Updated Bahasa Malaysia translations
- Fixed
[#&#8203;6783](https://togithub.com/squidfunk/mkdocs-material/issues/6783):
Hide continue reading link for blog posts without separators
- Fixed
[#&#8203;6779](https://togithub.com/squidfunk/mkdocs-material/issues/6779):
Incorrect positioning of integrated table of contents

###
[`v9.5.9`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.5.9):
mkdocs-material-9.5.9

[Compare
Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.5.8...9.5.9)

-   Fixed navigation pruning with tabs and sections enabled

</details>

<details>
<summary>mkdocstrings/mkdocstrings (docs/mkdocstrings)</summary>

###
[`v0.24.1`](https://togithub.com/mkdocstrings/mkdocstrings/blob/HEAD/CHANGELOG.md#0241---2024-02-27)

[Compare
Source](https://togithub.com/mkdocstrings/mkdocstrings/compare/0.24.0...0.24.1)

<small>[Compare with
0.24.0](https://togithub.com/mkdocstrings/mkdocstrings/compare/0.24.0...0.24.1)</small>

##### Code Refactoring

- Support new pymdownx-highlight options
([a7a2907](https://togithub.com/mkdocstrings/mkdocstrings/commit/a7a29079aebcd79be84ac38ce275797920e4c75e)
by Timothée Mazzucotelli).
- Backup anchors with id and no href, for compatibility with autorefs'
Markdown anchors
([b5236b4](https://togithub.com/mkdocstrings/mkdocstrings/commit/b5236b4333ebde9648c84f6e4b0f4c2b10f3ecd4)
by Timothée Mazzucotelli).
[PR-#&#8203;651](https://togithub.com/mkdocstrings/mkdocstrings/pull/651),
[Related-to-mkdocs-autorefs#39](https://togithub.com/mkdocstrings/autorefs/pull/39),
Co-authored-by: Oleh Prypin <oleh@pryp.in>

</details>

<details>
<summary>mkdocstrings/python (docs/mkdocstrings-python)</summary>

###
[`v1.9.0`](https://togithub.com/mkdocstrings/python/blob/HEAD/CHANGELOG.md#190---2024-03-13)

[Compare
Source](https://togithub.com/mkdocstrings/python/compare/1.8.0...1.9.0)

<small>[Compare with
1.8.0](https://togithub.com/mkdocstrings/python/compare/1.8.0...1.9.0)</small>

##### Dependencies

- Add upper bound on Python-Markdown 3.6 to temporarily prevent breaking
changes
([cd93ee3](https://togithub.com/mkdocstrings/python/commit/cd93ee31418a2752667d43bb5a05d22284522c24)
by Timothée Mazzucotelli).

##### Features

- Add `show_labels` option to show/hide labels
([eaf9b82](https://togithub.com/mkdocstrings/python/commit/eaf9b8240069f7369f401fe048892043c8b173d3)
by Viicos). [Issue
#&#8203;120](https://togithub.com/mkdocstrings/python/issues/120), [PR
#&#8203;130](https://togithub.com/mkdocstrings/python/pull/130)
- Add option to search for stubs packages
([0c6aa32](https://togithub.com/mkdocstrings/python/commit/0c6aa323c9e57b8348765a5daa11c79d0c5edb07)
by Romain). [PR
#&#8203;128](https://togithub.com/mkdocstrings/python/pull/128), PR
[griffe#221](https://togithub.com/griffe/python/issues/221): :
[https://github.com/mkdocstrings/griffe/pull/221](https://togithub.com/mkdocstrings/griffe/pull/221)

##### Code Refactoring

- Mark all Jinja blocks as scoped
([548bdad](https://togithub.com/mkdocstrings/python/commit/548bdaddd66ffc99b3b9a5a62228a2ff4ff0dd00)
by Timothée Mazzucotelli).

</details>

<details>
<summary>astral-sh/ruff (misc-lint/ruff)</summary>

###
[`v0.3.3`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#033)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.3.2...v0.3.3)

##### Preview features

- \[`flake8-bandit`]: Implement `S610` rule
([#&#8203;10316](https://togithub.com/astral-sh/ruff/pull/10316))
- \[`pycodestyle`] Implement `blank-line-at-end-of-file` (`W391`)
([#&#8203;10243](https://togithub.com/astral-sh/ruff/pull/10243))
- \[`pycodestyle`] Implement `redundant-backslash` (`E502`)
([#&#8203;10292](https://togithub.com/astral-sh/ruff/pull/10292))
- \[`pylint`] - implement `redeclared-assigned-name` (`W0128`)
([#&#8203;9268](https://togithub.com/astral-sh/ruff/pull/9268))

##### Rule changes

- \[`flake8_comprehensions`] Handled special case for `C400` which also
matches `C416`
([#&#8203;10419](https://togithub.com/astral-sh/ruff/pull/10419))
- \[`flake8-bandit`] Implement upstream updates for `S311`, `S324` and
`S605` ([#&#8203;10313](https://togithub.com/astral-sh/ruff/pull/10313))
- \[`pyflakes`] Remove `F401` fix for `__init__` imports by default and
allow opt-in to unsafe fix
([#&#8203;10365](https://togithub.com/astral-sh/ruff/pull/10365))
- \[`pylint`] Implement `invalid-bool-return-type` (`E304`)
([#&#8203;10377](https://togithub.com/astral-sh/ruff/pull/10377))
- \[`pylint`] Include builtin warnings in useless-exception-statement
(`PLW0133`)
([#&#8203;10394](https://togithub.com/astral-sh/ruff/pull/10394))

##### CLI

- Add message on success to `ruff check`
([#&#8203;8631](https://togithub.com/astral-sh/ruff/pull/8631))

##### Bug fixes

- \[`PIE970`] Allow trailing ellipsis in `typing.TYPE_CHECKING`
([#&#8203;10413](https://togithub.com/astral-sh/ruff/pull/10413))
- Avoid `TRIO115` if the argument is a variable
([#&#8203;10376](https://togithub.com/astral-sh/ruff/pull/10376))
- \[`F811`] Avoid removing shadowed imports that point to different
symbols
([#&#8203;10387](https://togithub.com/astral-sh/ruff/pull/10387))
- Fix `F821` and `F822` false positives in `.pyi` files
([#&#8203;10341](https://togithub.com/astral-sh/ruff/pull/10341))
- Fix `F821` false negatives in `.py` files when `from __future__ import
annotations` is active
([#&#8203;10362](https://togithub.com/astral-sh/ruff/pull/10362))
- Fix case where `Indexer` fails to identify continuation preceded by
newline
[#&#8203;10351](https://togithub.com/astral-sh/ruff/issues/10351)
([#&#8203;10354](https://togithub.com/astral-sh/ruff/pull/10354))
- Sort hash maps in `Settings` display
([#&#8203;10370](https://togithub.com/astral-sh/ruff/pull/10370))
- Track conditional deletions in the semantic model
([#&#8203;10415](https://togithub.com/astral-sh/ruff/pull/10415))
- \[`C413`] Wrap expressions in parentheses when negating
([#&#8203;10346](https://togithub.com/astral-sh/ruff/pull/10346))
- \[`pycodestyle`] Do not ignore lines before the first logical line in
blank lines rules.
([#&#8203;10382](https://togithub.com/astral-sh/ruff/pull/10382))
- \[`pycodestyle`] Do not trigger `E225` and `E275` when the next token
is a ')'
([#&#8203;10315](https://togithub.com/astral-sh/ruff/pull/10315))
- \[`pylint`] Avoid false-positive slot non-assignment for `__dict__`
(`PLE0237`)
([#&#8203;10348](https://togithub.com/astral-sh/ruff/pull/10348))
- Gate f-string struct size test for Rustc < 1.76
([#&#8203;10371](https://togithub.com/astral-sh/ruff/pull/10371))

##### Documentation

- Use `ruff.toml` format in README
([#&#8203;10393](https://togithub.com/astral-sh/ruff/pull/10393))
- \[`RUF008`] Make it clearer that a mutable default in a dataclass is
only valid if it is typed as a ClassVar
([#&#8203;10395](https://togithub.com/astral-sh/ruff/pull/10395))
- \[`pylint`] Extend docs and test in `invalid-str-return-type` (`E307`)
([#&#8203;10400](https://togithub.com/astral-sh/ruff/pull/10400))
- Remove `.` from `check` and `format` commands
([#&#8203;10217](https://togithub.com/astral-sh/ruff/pull/10217))

###
[`v0.3.2`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#032)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.3.1...v0.3.2)

##### Preview features

- Improve single-`with` item formatting for Python 3.8 or older
([#&#8203;10276](https://togithub.com/astral-sh/ruff/pull/10276))

##### Rule changes

- \[`pyupgrade`] Allow fixes for f-string rule regardless of line length
(`UP032`)
([#&#8203;10263](https://togithub.com/astral-sh/ruff/pull/10263))
- \[`pycodestyle`] Include actual conditions in E712 diagnostics
([#&#8203;10254](https://togithub.com/astral-sh/ruff/pull/10254))

##### Bug fixes

- Fix trailing kwargs end of line comment after slash
([#&#8203;10297](https://togithub.com/astral-sh/ruff/pull/10297))
- Fix unstable `with` items formatting
([#&#8203;10274](https://togithub.com/astral-sh/ruff/pull/10274))
- Avoid repeating function calls in f-string conversions
([#&#8203;10265](https://togithub.com/astral-sh/ruff/pull/10265))
- Fix E203 false positive for slices in format strings
([#&#8203;10280](https://togithub.com/astral-sh/ruff/pull/10280))
- Fix incorrect `Parameter` range for `*args` and `**kwargs`
([#&#8203;10283](https://togithub.com/astral-sh/ruff/pull/10283))
- Treat `typing.Annotated` subscripts as type definitions
([#&#8203;10285](https://togithub.com/astral-sh/ruff/pull/10285))

###
[`v0.3.1`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#031)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.3.0...v0.3.1)

##### Preview features

- \[`pycodestyle`] Fix E301 not triggering on decorated methods.
([#&#8203;10117](https://togithub.com/astral-sh/ruff/pull/10117))
- \[`pycodestyle`] Respect `isort` settings in blank line rules (`E3*`)
([#&#8203;10096](https://togithub.com/astral-sh/ruff/pull/10096))
- \[`pycodestyle`] Make blank lines in typing stub files optional
(`E3*`)
([#&#8203;10098](https://togithub.com/astral-sh/ruff/pull/10098))
- \[`pylint`] Implement `singledispatch-method` (`E1519`)
([#&#8203;10140](https://togithub.com/astral-sh/ruff/pull/10140))
- \[`pylint`] Implement `useless-exception-statement` (`W0133`)
([#&#8203;10176](https://togithub.com/astral-sh/ruff/pull/10176))

##### Rule changes

- \[`flake8-debugger`] Check for use of `debugpy` and `ptvsd` debug
modules
([#&#8203;10177](https://togithub.com/astral-sh/ruff/issues/10177))
([#&#8203;10194](https://togithub.com/astral-sh/ruff/pull/10194))
- \[`pyupgrade`] Generate diagnostic for all valid f-string conversions
regardless of line length (`UP032`)
([#&#8203;10238](https://togithub.com/astral-sh/ruff/pull/10238))
- \[`pep8_naming`] Add fixes for `N804` and `N805`
([#&#8203;10215](https://togithub.com/astral-sh/ruff/pull/10215))

##### CLI

- Colorize the output of `ruff format --diff`
([#&#8203;10110](https://togithub.com/astral-sh/ruff/pull/10110))
- Make `--config` and `--isolated` global flags
([#&#8203;10150](https://togithub.com/astral-sh/ruff/pull/10150))
- Correctly expand tildes and environment variables in paths passed to
`--config`
([#&#8203;10219](https://togithub.com/astral-sh/ruff/pull/10219))

##### Configuration

- Accept a PEP 440 version specifier for `required-version`
([#&#8203;10216](https://togithub.com/astral-sh/ruff/pull/10216))
- Implement isort's `default-section` setting
([#&#8203;10149](https://togithub.com/astral-sh/ruff/pull/10149))

##### Bug fixes

- Remove trailing space from `CapWords` message
([#&#8203;10220](https://togithub.com/astral-sh/ruff/pull/10220))
- Respect external codes in file-level exemptions
([#&#8203;10203](https://togithub.com/astral-sh/ruff/pull/10203))
- \[`flake8-raise`] Avoid false-positives for parens-on-raise with
`future.exception()` (`RSE102`)
([#&#8203;10206](https://togithub.com/astral-sh/ruff/pull/10206))
- \[`pylint`] Add fix for unary expressions in `PLC2801`
([#&#8203;9587](https://togithub.com/astral-sh/ruff/pull/9587))
- \[`ruff`] Fix RUF028 not allowing `# fmt: skip` on match cases
([#&#8203;10178](https://togithub.com/astral-sh/ruff/pull/10178))

###
[`v0.3.0`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#030)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.2.2...v0.3.0)

This release introduces the new Ruff formatter 2024.2 style and adds a
new lint rule to
detect invalid formatter suppression comments.

##### Preview features

- \[`flake8-bandit`] Remove suspicious-lxml-import (`S410`)
([#&#8203;10154](https://togithub.com/astral-sh/ruff/pull/10154))
- \[`pycodestyle`] Allow `os.environ` modifications between imports
(`E402`)
([#&#8203;10066](https://togithub.com/astral-sh/ruff/pull/10066))
- \[`pycodestyle`] Don't warn about a single whitespace character before
a comma in a tuple (`E203`)
([#&#8203;10094](https://togithub.com/astral-sh/ruff/pull/10094))

##### Rule changes

- \[`eradicate`] Detect commented out `case` statements (`ERA001`)
([#&#8203;10055](https://togithub.com/astral-sh/ruff/pull/10055))
- \[`eradicate`] Detect single-line code for `try:`, `except:`, etc.
(`ERA001`)
([#&#8203;10057](https://togithub.com/astral-sh/ruff/pull/10057))
- \[`flake8-boolean-trap`] Allow boolean positionals in `__post_init__`
([#&#8203;10027](https://togithub.com/astral-sh/ruff/pull/10027))
- \[`flake8-copyright`] Allow © in copyright notices
([#&#8203;10065](https://togithub.com/astral-sh/ruff/pull/10065))
- \[`isort`]: Use one blank line after imports in typing stub files
([#&#8203;9971](https://togithub.com/astral-sh/ruff/pull/9971))
- \[`pylint`] New Rule `dict-iter-missing-items` (`PLE1141`)
([#&#8203;9845](https://togithub.com/astral-sh/ruff/pull/9845))
- \[`pylint`] Ignore `sys.version` and `sys.platform` (`PLR1714`)
([#&#8203;10054](https://togithub.com/astral-sh/ruff/pull/10054))
- \[`pyupgrade`] Detect literals with unary operators (`UP018`)
([#&#8203;10060](https://togithub.com/astral-sh/ruff/pull/10060))
- \[`ruff`] Expand rule for `list(iterable).pop(0)` idiom (`RUF015`)
([#&#8203;10148](https://togithub.com/astral-sh/ruff/pull/10148))

##### Formatter

This release introduces the Ruff 2024.2 style, stabilizing the following
changes:

- Prefer splitting the assignment's value over the target or type
annotation
([#&#8203;8943](https://togithub.com/astral-sh/ruff/pull/8943))
- Remove blank lines before class docstrings
([#&#8203;9154](https://togithub.com/astral-sh/ruff/pull/9154))
- Wrap multiple context managers in `with` parentheses when targeting
Python 3.9 or newer
([#&#8203;9222](https://togithub.com/astral-sh/ruff/pull/9222))
- Add a blank line after nested classes with a dummy body (`...`) in
typing stub files
([#&#8203;9155](https://togithub.com/astral-sh/ruff/pull/9155))
- Reduce vertical spacing for classes and functions with a dummy (`...`)
body ([#&#8203;7440](https://togithub.com/astral-sh/ruff/issues/7440),
[#&#8203;9240](https://togithub.com/astral-sh/ruff/pull/9240))
- Add a blank line after the module docstring
([#&#8203;8283](https://togithub.com/astral-sh/ruff/pull/8283))
- Parenthesize long type hints in assignments
([#&#8203;9210](https://togithub.com/astral-sh/ruff/pull/9210))
- Preserve indent for single multiline-string call-expressions
([#&#8203;9673](https://togithub.com/astral-sh/ruff/pull/9637))
- Normalize hex escape and unicode escape sequences
([#&#8203;9280](https://togithub.com/astral-sh/ruff/pull/9280))
- Format module docstrings
([#&#8203;9725](https://togithub.com/astral-sh/ruff/pull/9725))

##### CLI

- Explicitly disallow `extend` as part of a `--config` flag
([#&#8203;10135](https://togithub.com/astral-sh/ruff/pull/10135))
- Remove `build` from the default exclusion list
([#&#8203;10093](https://togithub.com/astral-sh/ruff/pull/10093))
- Deprecate `ruff <path>`, `ruff --explain`, `ruff --clean`, and `ruff
--generate-shell-completion` in favor of `ruff check <path>`, `ruff
rule`, `ruff clean`, and `ruff generate-shell-completion`
([#&#8203;10169](https://togithub.com/astral-sh/ruff/pull/10169))
- Remove the deprecated CLI option `--format` from `ruff rule` and `ruff
linter`
([#&#8203;10170](https://togithub.com/astral-sh/ruff/pull/10170))

##### Bug fixes

- \[`flake8-bugbear`] Avoid adding default initializers to stubs
(`B006`)
([#&#8203;10152](https://togithub.com/astral-sh/ruff/pull/10152))
- \[`flake8-type-checking`] Respect runtime-required decorators for
function signatures
([#&#8203;10091](https://togithub.com/astral-sh/ruff/pull/10091))
- \[`pycodestyle`] Mark fixes overlapping with a multiline string as
unsafe (`W293`)
([#&#8203;10049](https://togithub.com/astral-sh/ruff/pull/10049))
- \[`pydocstyle`] Trim whitespace when removing blank lines after
section (`D413`)
([#&#8203;10162](https://togithub.com/astral-sh/ruff/pull/10162))
- \[`pylint`] Delete entire statement, including semicolons (`PLR0203`)
([#&#8203;10074](https://togithub.com/astral-sh/ruff/pull/10074))
- \[`ruff`] Avoid f-string false positives in `gettext` calls (`RUF027`)
([#&#8203;10118](https://togithub.com/astral-sh/ruff/pull/10118))
- Fix `ruff` crashing on PowerPC systems because of too small page size
([#&#8203;10080](https://togithub.com/astral-sh/ruff/pull/10080))

##### Performance

- Add cold attribute to less likely printer queue branches in the
formatter
([#&#8203;10121](https://togithub.com/astral-sh/ruff/pull/10121))
- Skip unnecessary string normalization in the formatter
([#&#8203;10116](https://togithub.com/astral-sh/ruff/pull/10116))

##### Documentation

- Remove "Beta" Label from formatter documentation
([#&#8203;10144](https://togithub.com/astral-sh/ruff/pull/10144))
- `line-length` option: fix link to `pycodestyle.max-line-length`
([#&#8203;10136](https://togithub.com/astral-sh/ruff/pull/10136))

###
[`v0.2.2`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#022)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/v0.2.1...v0.2.2)

Highlights include:

-   Initial support formatting f-strings (in `--preview`).
- Support for overriding arbitrary configuration options via the CLI
through an expanded `--config`
    argument (e.g., `--config "lint.isort.combine-as-imports=false"`).
- Significant performance improvements in Ruff's lexer, parser, and lint
rules.

##### Preview features

- Implement minimal f-string formatting
([#&#8203;9642](https://togithub.com/astral-sh/ruff/pull/9642))
- \[`pycodestyle`] Add blank line(s) rules (`E301`, `E302`, `E303`,
`E304`, `E305`, `E306`)
([#&#8203;9266](https://togithub.com/astral-sh/ruff/pull/9266))
- \[`refurb`] Implement `readlines_in_for` (`FURB129`)
([#&#8203;9880](https://togithub.com/astral-sh/ruff/pull/9880))

##### Rule changes

- \[`ruff`] Ensure closing parentheses for multiline sequences are
always on their own line (`RUF022`, `RUF023`)
([#&#8203;9793](https://togithub.com/astral-sh/ruff/pull/9793))
- \[`numpy`] Add missing deprecation violations (`NPY002`)
([#&#8203;9862](https://togithub.com/astral-sh/ruff/pull/9862))
- \[`flake8-bandit`] Detect `mark_safe` usages in decorators
([#&#8203;9887](https://togithub.com/astral-sh/ruff/pull/9887))
- \[`ruff`] Expand `asyncio-dangling-task` (`RUF006`) to include
`new_event_loop`
([#&#8203;9976](https://togithub.com/astral-sh/ruff/pull/9976))
- \[`flake8-pyi`] Ignore 'unused' private type dicts in class scopes
([#&#8203;9952](https://togithub.com/astral-sh/ruff/pull/9952))

##### Formatter

- Docstring formatting: Preserve tab indentation when using
`indent-style=tabs`
([#&#8203;9915](https://togithub.com/astral-sh/ruff/pull/9915))
- Disable top-level docstring formatting for notebooks
([#&#8203;9957](https://togithub.com/astral-sh/ruff/pull/9957))
- Stabilize quote-style's `preserve` mode
([#&#8203;9922](https://togithub.com/astral-sh/ruff/pull/9922))

##### CLI

- Allow arbitrary configuration options to be overridden via the CLI
([#&#8203;9599](https://togithub.com/astral-sh/ruff/pull/9599))

##### Bug fixes

- Make `show-settings` filters directory-agnostic
([#&#8203;9866](https://togithub.com/astral-sh/ruff/pull/9866))
- Respect duplicates when rewriting type aliases
([#&#8203;9905](https://togithub.com/astral-sh/ruff/pull/9905))
- Respect tuple assignments in typing analyzer
([#&#8203;9969](https://togithub.com/astral-sh/ruff/pull/9969))
- Use atomic write when persisting cache
([#&#8203;9981](https://togithub.com/astral-sh/ruff/pull/9981))
- Use non-parenthesized range for `DebugText`
([#&#8203;9953](https://togithub.com/astral-sh/ruff/pull/9953))
- \[`flake8-simplify`] Avoid false positive with `async` for loops
(`SIM113`)
([#&#8203;9996](https://togithub.com/astral-sh/ruff/pull/9996))
- \[`flake8-trio`] Respect `async with` in `timeout-without-await`
([#&#8203;9859](https://togithub.com/astral-sh/ruff/pull/9859))
- \[`perflint`] Catch a wider range of mutations in `PERF101`
([#&#8203;9955](https://togithub.com/astral-sh/ruff/pull/9955))
- \[`pycodestyle`] Fix `E30X` panics on blank lines with trailing white
spaces ([#&#8203;9907](https://togithub.com/astral-sh/ruff/pull/9907))
- \[`pydocstyle`] Allow using `parameters` as a subsection header
(`D405`) ([#&#8203;9894](https://togithub.com/astral-sh/ruff/pull/9894))
- \[`pydocstyle`] Fix blank-line docstring rules for module-level
docstrings
([#&#8203;9878](https://togithub.com/astral-sh/ruff/pull/9878))
- \[`pylint`] Accept 0.0 and 1.0 as common magic values (`PLR2004`)
([#&#8203;9964](https://togithub.com/astral-sh/ruff/pull/9964))
- \[`pylint`] Avoid suggesting set rewrites for non-hashable types
([#&#8203;9956](https://togithub.com/astral-sh/ruff/pull/9956))
- \[`ruff`] Avoid false negatives with string literals inside of method
calls (`RUF027`)
([#&#8203;9865](https://togithub.com/astral-sh/ruff/pull/9865))
- \[`ruff`] Fix panic on with f-string detection (`RUF027`)
([#&#8203;9990](https://togithub.com/astral-sh/ruff/pull/9990))
- \[`ruff`] Ignore builtins when detecting missing f-strings
([#&#8203;9849](https://togithub.com/astral-sh/ruff/pull/9849))

##### Performance

- Use `memchr` for string lexing
([#&#8203;9888](https://togithub.com/astral-sh/ruff/pull/9888))
- Use `memchr` for tab-indentation detection
([#&#8203;9853](https://togithub.com/astral-sh/ruff/pull/9853))
- Reduce `Result<Tok, LexicalError>` size by using `Box<str>` instead of
`String` ([#&#8203;9885](https://togithub.com/astral-sh/ruff/pull/9885))
- Reduce size of `Expr` from 80 to 64 bytes
([#&#8203;9900](https://togithub.com/astral-sh/ruff/pull/9900))
- Improve trailing comma rule performance
([#&#8203;9867](https://togithub.com/astral-sh/ruff/pull/9867))
- Remove unnecessary string cloning from the parser
([#&#8203;9884](https://togithub.com/astral-sh/ruff/pull/9884))

</details>

<details>
<summary>nedbat/coveragepy (pytest/coverage)</summary>

###
[`v7.4.4`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-744--2024-03-14)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.3...7.4.4)

- Fix: in some cases, even with `[run] relative_files=True`, a data file
could be created with absolute path names. When combined with other
relative
data files, it was random whether the absolute file names would be made
relative or not. If they weren't, then a file would be listed twice in
reports, as detailed in `issue 1752`\_. This is now fixed: absolute file
names are always made relative when combining. Thanks to Bruno Rodrigues
dos
    Santos for support.

- Fix: the last case of a match/case statement had an incorrect message
if the
branch was missed. It said the pattern never matched, when actually the
    branch is missed if the last case always matched.

- Fix: clicking a line number in the HTML report now positions more
accurately.

- Fix: the `report:format` setting was defined as a boolean, but should
be a
string. Thanks, `Tanaydin Sirin <pull 1754_>`\_. It is also now
documented
    on the :ref:`configuration page <config_report_format>`.

.. \_issue
1752:[https://github.com/nedbat/coveragepy/issues/1752](https://togithub.com/nedbat/coveragepy/issues/1752)2
.. \_pull
1754[https://github.com/nedbat/coveragepy/pull/1754](https://togithub.com/nedbat/coveragepy/pull/1754)54

.. \_changes\_7-4-3:

###
[`v7.4.3`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-743--2024-02-23)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.2...7.4.3)

- Fix: in some cases, coverage could fail with a RuntimeError: "Set
changed
    size during iteration." This is now fixed, closing `issue 1733`\_.

.. \_issue
1733:[https://github.com/nedbat/coveragepy/issues/1733](https://togithub.com/nedbat/coveragepy/issues/1733)3

.. \_changes\_7-4-2:

###
[`v7.4.2`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-742--2024-02-20)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.1...7.4.2)

- Fix: setting `COVERAGE_CORE=sysmon` no longer errors on 3.11 and
lower,
thanks `Hugo van Kemenade <pull 1747_>`\_. It now issues a warning that
sys.monitoring is not available and falls back to the default core
instead.

.. \_pull
1747:[https://github.com/nedbat/coveragepy/pull/1747](https://togithub.com/nedbat/coveragepy/pull/1747)7

.. \_changes\_7-4-1:

</details>

<details>
<summary>pytest-dev/pytest (pytest/pytest)</summary>

###
[`v8.1.1`](https://togithub.com/pytest-dev/pytest/releases/tag/8.1.1)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.1.0...8.1.1)

# pytest 8.1.1 (2024-03-08)

::: {.note}
::: {.title}
Note
:::

This release is not a usual bug fix release -- it contains features and
improvements, being a follow up
to `8.1.0`, which has been yanked from PyPI.
:::

## Features

- [#&#8203;11475](https://togithub.com/pytest-dev/pytest/issues/11475):
Added the new `consider_namespace_packages`{.interpreted-text
role="confval"} configuration option, defaulting to `False`.

If set to `True`, pytest will attempt to identify modules that are part
of [namespace
packages](https://packaging.python.org/en/latest/guides/packaging-namespace-packages)
when importing modules.

- [#&#8203;11653](https://togithub.com/pytest-dev/pytest/issues/11653):
Added the new `verbosity_test_cases`{.interpreted-text role="confval"}
configuration option for fine-grained control of test execution
verbosity.
See `Fine-grained verbosity
<pytest.fine_grained_verbosity>`{.interpreted-text role="ref"} for more
details.

## Improvements

- [#&#8203;10865](https://togithub.com/pytest-dev/pytest/issues/10865):
`pytest.warns`{.interpreted-text role="func"} now validates that
`warnings.warn`{.interpreted-text role="func"} was called with a
\[str]{.title-ref} or a \[Warning]{.title-ref}.
Currently in Python it is possible to use other types, however this
causes an exception when `warnings.filterwarnings`{.interpreted-text
role="func"} is used to filter those warnings (see [CPython
#&#8203;103577](https://togithub.com/python/cpython/issues/103577) for a
discussion).
While this can be considered a bug in CPython, we decided to put guards
in pytest as the error message produced without this check in place is
confusing.

- [#&#8203;11311](https://togithub.com/pytest-dev/pytest/issues/11311):
When using `--override-ini` for paths in invocations without a
configuration file defined, the current working directory is used
    as the relative directory.

Previoulsy this would raise an `AssertionError`{.interpreted-text
role="class"}.

- [#&#8203;11475](https://togithub.com/pytest-dev/pytest/issues/11475):
`--import-mode=importlib <import-mode-importlib>`{.interpreted-text
role="ref"} now tries to import modules using the standard import
mechanism (but still without changing :py`sys.path`{.interpreted-text
role="data"}), falling back to importing modules directly only if that
fails.

This means that installed packages will be imported under their
canonical name if possible first, for example `app.core.models`, instead
of having the module name always be derived from their path (for example
`.env310.lib.site_packages.app.core.models`).

- [#&#8203;11801](https://togithub.com/pytest-dev/pytest/issues/11801):
Added the `iter_parents()
<_pytest.nodes.Node.iter_parents>`{.interpreted-text role="func"} helper
method on nodes.
It is similar to `listchain
<_pytest.nodes.Node.listchain>`{.interpreted-text role="func"}, but goes
from bottom to top, and returns an iterator, not a list.

- [#&#8203;11850](https://togithub.com/pytest-dev/pytest/issues/11850):
Added support for `sys.last_exc`{.interpreted-text role="data"} for
post-mortem debugging on Python>=3.12.

- [#&#8203;11962](https://togithub.com/pytest-dev/pytest/issues/11962):
In case no other suitable candidates for configuration file are found, a
`pyproject.toml` (even without a `[tool.pytest.ini_options]` table) will
be considered as the configuration file and define the `rootdir`.

- [#&#8203;11978](https://togithub.com/pytest-dev/pytest/issues/11978):
Add `--log-file-mode` option to the logging plugin, enabling appending
to log-files. This option accepts either `"w"` or `"a"` and defaults to
`"w"`.

Previously, the mode was hard-coded to be `"w"` which truncates the file
before logging.

- [#&#8203;12047](https://togithub.com/pytest-dev/pytest/issues/12047):
When multiple finalizers of a fixture raise an exception, now all
exceptions are reported as an exception group.
    Previously, only the first exception was reported.

## Bug Fixes

- [#&#8203;11475](https://togithub.com/pytest-dev/pytest/issues/11475):
Fixed regression where `--importmode=importlib` would import non-test
modules more than once.

- [#&#8203;11904](https://togithub.com/pytest-dev/pytest/issues/11904):
Fixed a regression in pytest 8.0.0 that would cause test collection to
fail due to permission errors when using `--pyargs`.

This change improves the collection tree for tests specified using
`--pyargs`, see `12043`{.interpreted-text role="pull"} for a comparison
with pytest 8.0 and <8.

- [#&#8203;12011](https://togithub.com/pytest-dev/pytest/issues/12011):
Fixed a regression in 8.0.1 whereby `setup_module` xunit-style fixtures
are not executed when `--doctest-modules` is passed.

- [#&#8203;12014](https://togithub.com/pytest-dev/pytest/issues/12014):
Fix the `stacklevel` used when warning about marks used on fixtures.

- [#&#8203;12039](https://togithub.com/pytest-dev/pytest/issues/12039):
Fixed a regression in `8.0.2` where tests created using
`tmp_path`{.interpreted-text role="fixture"} have been collected
multiple times in CI under Windows.

## Improved Documentation

- [#&#8203;11790](https://togithub.com/pytest-dev/pytest/issues/11790):
Documented the retention of temporary directories created using the
`tmp_path` fixture in more detail.

## Trivial/Internal Changes

- [#&#8203;11785](https://togithub.com/pytest-dev/pytest/issues/11785):
Some changes were made to private functions which may affect plugins
which access them:

- `FixtureManager._getautousenames()` now takes a `Node` itself instead
of the nodeid.
- `FixtureManager.getfixturedefs()` now takes the `Node` itself instead
of the nodeid.
- The `_pytest.nodes.iterparentnodeids()` function is removed without
replacement.
        Prefer to traverse the node hierarchy itself instead.
If you really need to, copy the function from the previous pytest
release.

- [#&#8203;12069](https://togithub.com/pytest-dev/pytest/issues/12069):
Delayed the deprecation of the following features to `9.0.0`:

    -   `node-ctor-fspath-deprecation`{.interpreted-text role="ref"}.
    -   `legacy-path-hooks-deprecated`{.interpreted-text role="ref"}.

It was discovered after `8.1.0` was released that the warnings about the
impeding removal were not being displayed, so the team decided to revert
the removal.

    This is the reason for `8.1.0` being yanked.

# pytest 8.1.0 (YANKED)

::: {.note}
::: {.title}
Note
:::

This release has been **yanked**: it broke some plugins without the
proper warning period, due to
some warnings not showing up as expected.

See
[#&#8203;12069](https://togithub.com/pytest-dev/pytest/issues/12069).
:::

###
[`v8.1.0`](https://togithub.com/pytest-dev/pytest/releases/tag/8.1.0)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.0.2...8.1.0)

# pytest 8.1.0 (YANKED)

> \[!IMPORTANT]\
> This release has been **yanked**: it broke some plugins without the
proper warning period, due to some warnings not showing up as expected.
See
[#&#8203;12069](https://togithub.com/pytest-dev/pytest/issues/12069).

## Features

- [#&#8203;11475](https://togithub.com/pytest-dev/pytest/issues/11475):
Added the new `consider_namespace_packages`{.interpreted-text
role="confval"} configuration option, defaulting to `False`.

If set to `True`, pytest will attempt to identify modules that are part
of [namespace
packages](https://packaging.python.org/en/latest/guides/packaging-namespace-packages)
when importing modules.

- [#&#8203;11653](https://togithub.com/pytest-dev/pytest/issues/11653):
Added the new `verbosity_test_cases`{.interpreted-text role="confval"}
configuration option for fine-grained control of test execution
verbosity.
See `Fine-grained verbosity
<pytest.fine_grained_verbosity>`{.interpreted-text role="ref"} for more
details.

## Improvements

- [#&#8203;10865](https://togithub.com/pytest-dev/pytest/issues/10865):
`pytest.warns`{.interpreted-text role="func"} now validates that
`warnings.warn`{.interpreted-text role="func"} was called with a
\[str]{.title-ref} or a \[Warning]{.title-ref}.
Currently in Python it is possible to use other types, however this
causes an exception when `warnings.filterwarnings`{.interpreted-text
role="func"} is used to filter those warnings (see [CPython
#&#8203;103577](https://togithub.com/python/cpython/issues/103577) for a
discussion).
While this can be considered a bug in CPython, we decided to put guards
in pytest as the error message produced without this check in place is
confusing.

- [#&#8203;11311](https://togithub.com/pytest-dev/pytest/issues/11311):
When using `--override-ini` for paths in invocations without a
configuration file defined, the current working directory is used
    as the relative directory.

Previoulsy this would raise an `AssertionError`{.interpreted-text
role="class"}.

- [#&#8203;11475](https://togithub.com/pytest-dev/pytest/issues/11475):
`--import-mode=importlib <import-mode-importlib>`{.interpreted-text
role="ref"} now tries to import modules using the standard import
mechanism (but still without changing :py`sys.path`{.interpreted-text
role="data"}), falling back to importing modules directly only if that
fails.

This means that installed packages will be imported under their
canonical name if possible first, for example `app.core.models`, instead
of having the module name always be derived from their path (for example
`.env310.lib.site_packages.app.core.models`).

- [#&#8203;11801](https://togithub.com/pytest-dev/pytest/issues/11801):
Added the `iter_parents()
<_pytest.nodes.Node.iter_parents>`{.interpreted-text role="func"} helper
method on nodes.
It is similar to `listchain
<_pytest.nodes.Node.listchain>`{.interpreted-text role="func"}, but goes
from bottom to top, and returns an iterator, not a list.

- [#&#8203;11850](https://togithub.com/pytest-dev/pytest/issues/11850):
Added support for `sys.last_exc`{.interpreted-text role="data"} for
post-mortem debugging on Python>=3.12.

- [#&#8203;11962](https://togithub.com/pytest-dev/pytest/issues/11962):
In case no other suitable candidates for configuration file are found, a
`pyproject.toml` (even without a `[tool.pytest.ini_options]` table) will
be considered as the configuration file and define the `rootdir`.

- [#&#8203;11978](https://togithub.com/pytest-dev/pytest/issues/11978):
Add `--log-file-mode` option to the logging plugin, enabling appending
to log-files. This option accepts either `"w"` or `"a"` and defaults to
`"w"`.

Previously, the mode was hard-coded to be `"w"` which truncates the file
before logging.

- [#&#8203;12047](https://togithub.com/pytest-dev/pytest/issues/12047):
When multiple finalizers of a fixture raise an exception, now all
exceptions are reported as an exception group.
    Previously, only the first exception was reported.

## Bug Fixes

- [#&#8203;11904](https://togithub.com/pytest-dev/pytest/issues/11904):
Fixed a regression in pytest 8.0.0 that would cause test collection to
fail due to permission errors when using `--pyargs`.

This change improves the collection tree for tests specified using
`--pyargs`, see `12043`{.interpreted-text role="pull"} for a comparison
with pytest 8.0 and <8.

- [#&#8203;12011](https://togithub.com/pytest-dev/pytest/issues/12011):
Fixed a regression in 8.0.1 whereby `setup_module` xunit-style fixtures
are not executed when `--doctest-modules` is passed.

- [#&#8203;12014](https://togithub.com/pytest-dev/pytest/issues/12014):
Fix the `stacklevel` used when warning about marks used on fixtures.

- [#&#8203;12039](https://togithub.com/pytest-dev/pytest/issues/12039):
Fixed a regression in `8.0.2` where tests created using
`tmp_path`{.interpreted-text role="fixture"} have been collected
multiple times in CI under Windows.

## Improved Documentation

- [#&#8203;11790](https://togithub.com/pytest-dev/pytest/issues/11790):
Documented the retention of temporary directories created using the
`tmp_path` fixture in more detail.

## Trivial/Internal Changes

- [#&#8203;11785](https://togithub.com/pytest-dev/pytest/issues/11785):
Some changes were made to private functions which may affect plugins
which access them:
- `FixtureManager._getautousenames()` now takes a `Node` itself instead
of the nodeid.
- `FixtureManager.getfixturedefs()` now takes the `Node` itself instead
of the nodeid.
- The `_pytest.nodes.iterparentnodeids()` function is removed without
replacement.
        Prefer to traverse the node hierarchy itself instead.
If you really need to, copy the function from the previous pytest
release.

###
[`v8.0.2`](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.2)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.0.1...8.0.2)

# pytest 8.0.2 (2024-02-24)

## Bug Fixes

- [#&#8203;11895](https://togithub.com/pytest-dev/pytest/issues/11895):
Fix collection on Windows where initial paths contain the short version
of a path (for example `c:\PROGRA~1\tests`).
- [#&#8203;11953](https://togithub.com/pytest-dev/pytest/issues/11953):
Fix an `IndexError` crash raising from `getstatementrange_ast`.
- [#&#8203;12021](https://togithub.com/pytest-dev/pytest/issues/12021):
Reverted a fix to \[--maxfail]{.title-ref} handling in pytest 8.0.0
because it caused a regression in pytest-xdist whereby session fixture
teardowns may get executed multiple times when the max-fails is reached.

###
[`v8.0.1`](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.1)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.0.0...8.0.1)

# pytest 8.0.1 (2024-02-16)

## Bug Fixes

- [#&#8203;11875](https://togithub.com/pytest-dev/pytest/issues/11875):
Correctly handle errors from `getpass.getuser`{.interpreted-text
role="func"} in Python 3.13.
- [#&#8203;11879](https://togithub.com/pytest-dev/pytest/issues/11879):
Fix an edge case where `ExceptionInfo._stringify_exception` could crash
`pytest.raises`{.interpreted-text role="func"}.
- [#&#8203;11906](https://togithub.com/pytest-dev/pytest/issues/11906):
Fix regression with `pytest.warns`{.interpreted-text role="func"} using
custom warning subclasses which have more than one parameter in their
\[\__init\_\_]{.title-ref}.
- [#&#8203;11907](https://togithub.com/pytest-dev/pytest/issues/11907):
Fix a regression in pytest 8.0.0 whereby calling
`pytest.skip`{.interpreted-text role="func"} and similar control-flow
exceptions within a `pytest.warns()`{.interpreted-text role="func"}
block would get suppressed instead of propagating.
- [#&#8203;11929](https://togithub.com/pytest-dev/pytest/issues/11929):
Fix a regression in pytest 8.0.0 whereby autouse fixtures defined in a
module get ignored by the doctests in the module.
- [#&#8203;11937](https://togithub.com/pytest-dev/pytest/issues/11937):
Fix a regression in pytest 8.0.0 whereby items would be collected in
reverse order in some circumstances.

</details>

<details>
<summary>pytest-dev/pytest-asyncio (pytest/pytest-asyncio)</summary>

###
[`v0.23.5.post1`](https://togithub.com/pytest-dev/pytest-asyncio/releases/tag/v0.23.5.post1):
pytest-asyncio 0.23.5.post1

[Compare
Source](https://togithub.com/pytest-dev/pytest-asyncio/compare/v0.23.5...v0.23.5.post1)

### 0.23.5 (2024-02-09)

- Declare compatibility with pytest 8
[#&#8203;737](https://togithub.com/pytest-dev/pytest-asyncio/issues/737)
- Fix typing errors with recent versions of mypy
[#&#8203;769](https://togithub.com/pytest-dev/pytest-asyncio/issues/769)
- Prevent DeprecationWarning about internal use of
`asyncio.get_event_loop()` from affecting test cases
[#&#8203;757](https://togithub.com/pytest-dev/pytest-asyncio/issues/757)

#### Known issues

As of v0.23, pytest-asyncio attaches an asyncio event loop to each item
of the test suite (i.e. session, packages, modules, classes, functions)
and allows tests to be run in those loops when marked accordingly.
Pytest-asyncio currently assumes that async fixture scope is correlated
with the new event loop scope. This prevents fixtures from being
evaluated independently from the event loop scope and breaks some
existing test suites (see
[#&#8203;706](https://togithub.com/pytest-dev/pytest-asyncio/issues/706)).
For example, a test suite may require all fixtures and tests to run in
the same event loop, but have async fixtures that are set up and torn
down for each module. If you're affected by this issue, please continue
using the v0.21 release, until it is resolved.

</details>

<details>
<summary>pytest-dev/pytest-subtests (pytest/pytest-subtests)</summary>

###
[`v0.12.1`](https://togithub.com/pytest-dev/pytest-subtests/blob/HEAD/CHANGELOG.rst#0121-2024-03-07)

[Compare
Source](https://togithub.com/pytest-dev/pytest-subtests/compare/v0.12.0...v0.12.1)

-   Fixed compatibility with upcoming pytest `8.1.x`.  (`#125`\_).

..
\_#125:[https://github.com/pytest-dev/pytest-subtests/issues/125](https://togithub.com/pytest-dev/pytest-subtests/issues/125)5

###
[`v0.12.0`](https://togithub.com/pytest-dev/pytest-subtests/blob/HEAD/CHANGELOG.rst#0120-2024-03-06)

[Compare
Source](https://togithub.com/pytest-dev/pytest-subtests/compare/v0.11.0...v0.12.0)

-   Python 3.12 is now officially supported (`#113`\_).
-   Added typing support (`#115`\_).
- `SubTests` can be imported from `pytest_subtests` to type-annotate the
`subtests` fixture.

..
\_#113:[https://github.com/pytest-dev/pytest-subtests/pull/113](https://togithub.com/pytest-dev/pytest-subtests/pull/113)3
..
\_#115[https://github.com/pytest-dev/pytest-subtests/pull/115](https://togithub.com/pytest-dev/pytest-subtests/pull/115)15

</details>

<details>
<summary>python/mypy (typecheck/mypy)</summary>

### [`v1.9.0`](https://togithub.com/python/mypy/compare/v1.8.0...1.9.0)

[Compare
Source](https://togithub.com/python/mypy/compare/v1.8.0...1.9.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every 3 months on the first day of
the month" (UTC), 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](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/AlexWaygood/typeshed-stats).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
chouinar pushed a commit to HHS/simpler-grants-gov that referenced this issue Mar 26, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [SQLAlchemy](https://www.sqlalchemy.org)
([changelog](https://docs.sqlalchemy.org/en/latest/changelog/)) |
`2.0.28` -> `2.0.29` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/SQLAlchemy/2.0.29?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/SQLAlchemy/2.0.29?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/SQLAlchemy/2.0.28/2.0.29?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/SQLAlchemy/2.0.28/2.0.29?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [boto3](https://togithub.com/boto/boto3) | `1.34.60` -> `1.34.70` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/boto3/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/boto3/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/boto3/1.34.60/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/boto3/1.34.60/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [botocore](https://togithub.com/boto/botocore) | `1.34.60` ->
`1.34.70` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/botocore/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/botocore/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/botocore/1.34.60/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/botocore/1.34.60/1.34.70?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [coverage](https://togithub.com/nedbat/coveragepy) | `7.4.3` ->
`7.4.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.4.3/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.4.3/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[marshmallow-dataclass](https://togithub.com/lovasoa/marshmallow_dataclass)
| `8.6.0` -> `8.6.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/marshmallow-dataclass/8.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/marshmallow-dataclass/8.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/marshmallow-dataclass/8.6.0/8.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/marshmallow-dataclass/8.6.0/8.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>boto/boto3 (boto3)</summary>

###
[`v1.34.70`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13470)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.69...1.34.70)

\=======

- api-change:`codebuild`: \[`botocore`] Supporting GitLab and GitLab
Self Managed as source types in AWS CodeBuild.
- api-change:`ec2`: \[`botocore`] Added support for
ModifyInstanceMetadataDefaults and GetInstanceMetadataDefaults to set
Instance Metadata Service account defaults
- api-change:`ecs`: \[`botocore`] Documentation only update for Amazon
ECS.
- api-change:`emr-containers`: \[`botocore`] This release increases the
number of supported job template parameters from 20 to 100.
- api-change:`globalaccelerator`: \[`botocore`] AWS Global Accelerator
now supports cross-account sharing for bring your own IP addresses.
- api-change:`medialive`: \[`botocore`] Exposing TileMedia H265 options
- api-change:`sagemaker`: \[`botocore`] Introduced support for the
following new instance types on SageMaker Studio for JupyterLab and
CodeEditor applications: m6i, m6id, m7i, c6i, c6id, c7i, r6i, r6id, r7i,
and p5

###
[`v1.34.69`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13469)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.68...1.34.69)

\=======

- api-change:`firehose`: \[`botocore`] Updates Amazon Firehose
documentation for message regarding Enforcing Tags IAM Policy.
- api-change:`kendra`: \[`botocore`] Documentation update, March 2024.
Corrects some docs for Amazon Kendra.
- api-change:`pricing`: \[`botocore`] Add ResourceNotFoundException to
ListPriceLists and GetPriceListFileUrl APIs
- api-change:`rolesanywhere`: \[`botocore`] This release relaxes
constraints on the durationSeconds request parameter for the \*Profile
APIs that support it. This parameter can now take on values that go up
to 43200.
- api-change:`securityhub`: \[`botocore`] Added new resource detail
object to ASFF, including resource for LastKnownExploitAt

###
[`v1.34.68`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13468)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.67...1.34.68)

\=======

- api-change:`codeartifact`: \[`botocore`] This release adds Package
groups to CodeArtifact so you can more conveniently configure package
origin controls for multiple packages.

###
[`v1.34.67`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13467)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.66...1.34.67)

\=======

- api-change:`accessanalyzer`: \[`botocore`] This release adds support
for policy validation and external access findings for DynamoDB tables
and streams. IAM Access Analyzer helps you author functional and secure
resource-based policies and identify cross-account access. Updated
service API, documentation, and paginators.
- api-change:`codebuild`: \[`botocore`] This release adds support for
new webhook events (RELEASED and PRERELEASED) and filter types (TAG_NAME
and RELEASE_NAME).
- api-change:`connect`: \[`botocore`] This release updates the
\*InstanceStorageConfig APIs to support a new ResourceType:
REAL_TIME_CONTACT_ANALYSIS_CHAT_SEGMENTS. Use this resource type to
enable streaming for real-time analysis of chat contacts and to
associate a Kinesis stream where real-time analysis chat segments will
be published.
- api-change:`dynamodb`: \[`botocore`] This release introduces 3 new
APIs ('GetResourcePolicy', 'PutResourcePolicy' and
'DeleteResourcePolicy') and modifies the existing 'CreateTable' API for
the resource-based policy support. It also modifies several APIs to
accept a 'TableArn' for the 'TableName' parameter.
- api-change:`managedblockchain-query`: \[`botocore`] AMB Query: update
GetTransaction to include transactionId as input
- api-change:`savingsplans`: \[`botocore`] Introducing the Savings Plans
Return feature enabling customers to return their Savings Plans within 7
days of purchase.

###
[`v1.34.66`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13466)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.65...1.34.66)

\=======

- api-change:`cloudformation`: \[`botocore`] Documentation update, March
2024. Corrects some formatting.
- api-change:`ec2`: \[`botocore`] This release adds the new
DescribeMacHosts API operation for getting information about EC2 Mac
Dedicated Hosts. Users can now see the latest macOS versions that their
underlying Apple Mac can support without needing to be updated.
- api-change:`finspace`: \[`botocore`] Adding new attributes readWrite
and onDemand to dataview models for Database Maintenance operations.
- api-change:`logs`: \[`botocore`] Update LogSamples field in Anomaly
model to be a list of LogEvent
- api-change:`managedblockchain-query`: \[`botocore`] Introduces a new
API for Amazon Managed Blockchain Query: ListFilteredTransactionEvents.

###
[`v1.34.65`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13465)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.64...1.34.65)

\=======

- api-change:`cloudformation`: \[`botocore`] This release supports for a
new API ListStackSetAutoDeploymentTargets, which provider
auto-deployment configuration as a describable resource. Customers can
now view the specific combinations of regions and OUs that are being
auto-deployed.
- api-change:`kms`: \[`botocore`] Adds the ability to use the default
policy name by omitting the policyName parameter in calls to
PutKeyPolicy and GetKeyPolicy
- api-change:`mediatailor`: \[`botocore`] This release adds support to
allow customers to show different content within a channel depending on
metadata associated with the viewer.
- api-change:`rds`: \[`botocore`] This release launches the
ModifyIntegration API and support for data filtering for zero-ETL
Integrations.
- api-change:`s3`: \[`botocore`] Fix two issues with response root node
names.
- api-change:`timestream-query`: \[`botocore`] Documentation updates,
March 2024

###
[`v1.34.64`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13464)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.63...1.34.64)

\=======

- api-change:`backup`: \[`botocore`] This release introduces a boolean
attribute ManagedByAWSBackupOnly as part of ListRecoveryPointsByResource
api to filter the recovery points based on ownership. This attribute can
be used to filter out the recovery points protected by AWSBackup.
- api-change:`codebuild`: \[`botocore`] AWS CodeBuild now supports
overflow behavior on Reserved Capacity.
- api-change:`connect`: \[`botocore`] This release adds Hierarchy based
Access Control fields to Security Profile public APIs and adds support
for UserAttributeFilter to SearchUsers API.
- api-change:`ec2`: \[`botocore`] Add media accelerator and neuron
device information on the describe instance types API.
- api-change:`kinesisanalyticsv2`: \[`botocore`] Support for Flink 1.18
in Managed Service for Apache Flink
-   api-change:`s3`: \[`botocore`] Documentation updates for Amazon S3.
- api-change:`sagemaker`: \[`botocore`] Adds m6i, m6id, m7i, c6i, c6id,
c7i, r6i r6id, r7i, p5 instance type support to Sagemaker Notebook
Instances and miscellaneous wording fixes for previous Sagemaker
documentation.
- api-change:`workspaces-thin-client`: \[`botocore`] Removed unused
parameter kmsKeyArn from UpdateDeviceRequest

###
[`v1.34.63`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13463)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.62...1.34.63)

\=======

- api-change:`amplify`: \[`botocore`] Documentation updates for Amplify.
Identifies the APIs available only to apps created using Amplify Gen 1.
- api-change:`ec2-instance-connect`: \[`botocore`] This release includes
a new exception type "SerialConsoleSessionUnsupportedException" for
SendSerialConsoleSSHPublicKey API.
- api-change:`elbv2`: \[`botocore`] This release allows you to configure
HTTP client keep-alive duration for communication between clients and
Application Load Balancers.
- api-change:`fis`: \[`botocore`] This release adds support for
previewing target resources before running a FIS experiment. It also
adds resource ARNs for actions, experiments, and experiment templates to
API responses.
- api-change:`iot-roborunner`: \[`botocore`] The iot-roborunner client
has been removed following the deprecation of the service.
- api-change:`rds`: \[`botocore`] Updates Amazon RDS documentation for
EBCDIC collation for RDS for Db2.
- api-change:`secretsmanager`: \[`botocore`] Doc only update for Secrets
Manager
- api-change:`timestream-influxdb`: \[`botocore`] This is the initial
SDK release for Amazon Timestream for InfluxDB. Amazon Timestream for
InfluxDB is a new time-series database engine that makes it easy for
application developers and DevOps teams to run InfluxDB databases on AWS
for near real-time time-series applications using open source APIs.
- enhancement:`urllib3`: \[`botocore`] Added support for urllib3 2.2.1+
in Python 3.10+

###
[`v1.34.62`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13462)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.61...1.34.62)

\=======

- api-change:`ivs-realtime`: \[`botocore`] adds support for multiple new
composition layout configuration options (grid, pip)
- api-change:`kinesisanalyticsv2`: \[`botocore`] Support new
RuntimeEnvironmentUpdate parameter within UpdateApplication API allowing
callers to change the Flink version upon which their application runs.
- api-change:`s3`: \[`botocore`] This release makes the default option
for S3 on Outposts request signing to use the SigV4A algorithm when
using AWS Common Runtime (CRT).

###
[`v1.34.61`](https://togithub.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13461)

[Compare
Source](https://togithub.com/boto/boto3/compare/1.34.60...1.34.61)

\=======

- api-change:`cloudformation`: \[`botocore`] CloudFormation
documentation update for March, 2024
- api-change:`connect`: \[`botocore`] This release increases MaxResults
limit to 500 in request for SearchUsers, SearchQueues and
SearchRoutingProfiles APIs of Amazon Connect.
- api-change:`ec2`: \[`botocore`] Documentation updates for Amazon EC2.
- api-change:`kafka`: \[`botocore`] Added support for specifying the
starting position of topic replication in MSK-Replicator.
- api-change:`ssm`: \[`botocore`] March 2024 doc-only updates for
Systems Manager.

</details>

<details>
<summary>boto/botocore (botocore)</summary>

###
[`v1.34.70`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13470)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.69...1.34.70)

\=======

- api-change:`codebuild`: Supporting GitLab and GitLab Self Managed as
source types in AWS CodeBuild.
- api-change:`ec2`: Added support for ModifyInstanceMetadataDefaults and
GetInstanceMetadataDefaults to set Instance Metadata Service account
defaults
-   api-change:`ecs`: Documentation only update for Amazon ECS.
- api-change:`emr-containers`: This release increases the number of
supported job template parameters from 20 to 100.
- api-change:`globalaccelerator`: AWS Global Accelerator now supports
cross-account sharing for bring your own IP addresses.
-   api-change:`medialive`: Exposing TileMedia H265 options
- api-change:`sagemaker`: Introduced support for the following new
instance types on SageMaker Studio for JupyterLab and CodeEditor
applications: m6i, m6id, m7i, c6i, c6id, c7i, r6i, r6id, r7i, and p5

###
[`v1.34.69`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13469)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.68...1.34.69)

\=======

- api-change:`firehose`: Updates Amazon Firehose documentation for
message regarding Enforcing Tags IAM Policy.
- api-change:`kendra`: Documentation update, March 2024. Corrects some
docs for Amazon Kendra.
- api-change:`pricing`: Add ResourceNotFoundException to ListPriceLists
and GetPriceListFileUrl APIs
- api-change:`rolesanywhere`: This release relaxes constraints on the
durationSeconds request parameter for the \*Profile APIs that support
it. This parameter can now take on values that go up to 43200.
- api-change:`securityhub`: Added new resource detail object to ASFF,
including resource for LastKnownExploitAt

###
[`v1.34.68`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13468)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.67...1.34.68)

\=======

- api-change:`codeartifact`: This release adds Package groups to
CodeArtifact so you can more conveniently configure package origin
controls for multiple packages.

###
[`v1.34.67`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13467)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.66...1.34.67)

\=======

- api-change:`accessanalyzer`: This release adds support for policy
validation and external access findings for DynamoDB tables and streams.
IAM Access Analyzer helps you author functional and secure
resource-based policies and identify cross-account access. Updated
service API, documentation, and paginators.
- api-change:`codebuild`: This release adds support for new webhook
events (RELEASED and PRERELEASED) and filter types (TAG_NAME and
RELEASE_NAME).
- api-change:`connect`: This release updates the \*InstanceStorageConfig
APIs to support a new ResourceType:
REAL_TIME_CONTACT_ANALYSIS_CHAT_SEGMENTS. Use this resource type to
enable streaming for real-time analysis of chat contacts and to
associate a Kinesis stream where real-time analysis chat segments will
be published.
- api-change:`dynamodb`: This release introduces 3 new APIs
('GetResourcePolicy', 'PutResourcePolicy' and 'DeleteResourcePolicy')
and modifies the existing 'CreateTable' API for the resource-based
policy support. It also modifies several APIs to accept a 'TableArn' for
the 'TableName' parameter.
- api-change:`managedblockchain-query`: AMB Query: update GetTransaction
to include transactionId as input
- api-change:`savingsplans`: Introducing the Savings Plans Return
feature enabling customers to return their Savings Plans within 7 days
of purchase.

###
[`v1.34.66`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13466)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.65...1.34.66)

\=======

- api-change:`cloudformation`: Documentation update, March 2024.
Corrects some formatting.
- api-change:`ec2`: This release adds the new DescribeMacHosts API
operation for getting information about EC2 Mac Dedicated Hosts. Users
can now see the latest macOS versions that their underlying Apple Mac
can support without needing to be updated.
- api-change:`finspace`: Adding new attributes readWrite and onDemand to
dataview models for Database Maintenance operations.
- api-change:`logs`: Update LogSamples field in Anomaly model to be a
list of LogEvent
- api-change:`managedblockchain-query`: Introduces a new API for Amazon
Managed Blockchain Query: ListFilteredTransactionEvents.

###
[`v1.34.65`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13465)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.64...1.34.65)

\=======

- api-change:`cloudformation`: This release supports for a new API
ListStackSetAutoDeploymentTargets, which provider auto-deployment
configuration as a describable resource. Customers can now view the
specific combinations of regions and OUs that are being auto-deployed.
- api-change:`kms`: Adds the ability to use the default policy name by
omitting the policyName parameter in calls to PutKeyPolicy and
GetKeyPolicy
- api-change:`mediatailor`: This release adds support to allow customers
to show different content within a channel depending on metadata
associated with the viewer.
- api-change:`rds`: This release launches the ModifyIntegration API and
support for data filtering for zero-ETL Integrations.
-   api-change:`s3`: Fix two issues with response root node names.
-   api-change:`timestream-query`: Documentation updates, March 2024

###
[`v1.34.64`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13464)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.63...1.34.64)

\=======

- api-change:`backup`: This release introduces a boolean attribute
ManagedByAWSBackupOnly as part of ListRecoveryPointsByResource api to
filter the recovery points based on ownership. This attribute can be
used to filter out the recovery points protected by AWSBackup.
- api-change:`codebuild`: AWS CodeBuild now supports overflow behavior
on Reserved Capacity.
- api-change:`connect`: This release adds Hierarchy based Access Control
fields to Security Profile public APIs and adds support for
UserAttributeFilter to SearchUsers API.
- api-change:`ec2`: Add media accelerator and neuron device information
on the describe instance types API.
- api-change:`kinesisanalyticsv2`: Support for Flink 1.18 in Managed
Service for Apache Flink
-   api-change:`s3`: Documentation updates for Amazon S3.
- api-change:`sagemaker`: Adds m6i, m6id, m7i, c6i, c6id, c7i, r6i r6id,
r7i, p5 instance type support to Sagemaker Notebook Instances and
miscellaneous wording fixes for previous Sagemaker documentation.
- api-change:`workspaces-thin-client`: Removed unused parameter
kmsKeyArn from UpdateDeviceRequest

###
[`v1.34.63`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13463)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.62...1.34.63)

\=======

- api-change:`amplify`: Documentation updates for Amplify. Identifies
the APIs available only to apps created using Amplify Gen 1.
- api-change:`ec2-instance-connect`: This release includes a new
exception type "SerialConsoleSessionUnsupportedException" for
SendSerialConsoleSSHPublicKey API.
- api-change:`elbv2`: This release allows you to configure HTTP client
keep-alive duration for communication between clients and Application
Load Balancers.
- api-change:`fis`: This release adds support for previewing target
resources before running a FIS experiment. It also adds resource ARNs
for actions, experiments, and experiment templates to API responses.
- api-change:`iot-roborunner`: The iot-roborunner client has been
removed following the deprecation of the service.
- api-change:`rds`: Updates Amazon RDS documentation for EBCDIC
collation for RDS for Db2.
-   api-change:`secretsmanager`: Doc only update for Secrets Manager
- api-change:`timestream-influxdb`: This is the initial SDK release for
Amazon Timestream for InfluxDB. Amazon Timestream for InfluxDB is a new
time-series database engine that makes it easy for application
developers and DevOps teams to run InfluxDB databases on AWS for near
real-time time-series applications using open source APIs.
- enhancement:`urllib3`: Added support for urllib3 2.2.1+ in Python
3.10+

###
[`v1.34.62`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13462)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.61...1.34.62)

\=======

- api-change:`ivs-realtime`: adds support for multiple new composition
layout configuration options (grid, pip)
- api-change:`kinesisanalyticsv2`: Support new RuntimeEnvironmentUpdate
parameter within UpdateApplication API allowing callers to change the
Flink version upon which their application runs.
- api-change:`s3`: This release makes the default option for S3 on
Outposts request signing to use the SigV4A algorithm when using AWS
Common Runtime (CRT).

###
[`v1.34.61`](https://togithub.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13461)

[Compare
Source](https://togithub.com/boto/botocore/compare/1.34.60...1.34.61)

\=======

- api-change:`cloudformation`: CloudFormation documentation update for
March, 2024
- api-change:`connect`: This release increases MaxResults limit to 500
in request for SearchUsers, SearchQueues and SearchRoutingProfiles APIs
of Amazon Connect.
-   api-change:`ec2`: Documentation updates for Amazon EC2.
- api-change:`kafka`: Added support for specifying the starting position
of topic replication in MSK-Replicator.
-   api-change:`ssm`: March 2024 doc-only updates for Systems Manager.

</details>

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.4.4`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-744--2024-03-14)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.3...7.4.4)

- Fix: in some cases, even with `[run] relative_files=True`, a data file
could be created with absolute path names. When combined with other
relative
data files, it was random whether the absolute file names would be made
relative or not. If they weren't, then a file would be listed twice in
reports, as detailed in `issue 1752`\_. This is now fixed: absolute file
names are always made relative when combining. Thanks to Bruno Rodrigues
dos
    Santos for support.

- Fix: the last case of a match/case statement had an incorrect message
if the
branch was missed. It said the pattern never matched, when actually the
    branch is missed if the last case always matched.

- Fix: clicking a line number in the HTML report now positions more
accurately.

- Fix: the `report:format` setting was defined as a boolean, but should
be a
string. Thanks, `Tanaydin Sirin <pull 1754_>`\_. It is also now
documented
    on the :ref:`configuration page <config_report_format>`.

.. \_issue
1752:[nedbat/coveragepy#1752
.. \_pull
1754[nedbat/coveragepy#1754

.. \_changes\_7-4-3:

</details>

<details>
<summary>lovasoa/marshmallow_dataclass (marshmallow-dataclass)</summary>

###
[`v8.6.1`](https://togithub.com/lovasoa/marshmallow_dataclass/blob/HEAD/CHANGELOG.md#v861-2024-03-20)

[Compare
Source](https://togithub.com/lovasoa/marshmallow_dataclass/compare/v8.6.0...v8.6.1)

-   (Mostly) fix [memory leak][#&#8203;198] when using
`marshamallow_dataclass.dataclass` decorator. ([#&#8203;258], thank you
[@&#8203;mvanderlee](https://togithub.com/mvanderlee)!)
-   Fix docstring formatting for `class_schema`. ([#&#8203;249])
-   Do not ignore `Union` argument ordering in tests. Note that a
[bug][#&#8203;247] remains: semantically, `Union`s do not respect
argument
    order, yet order matters for de/serialization. ([#&#8203;248])

[#&#8203;198]:
https://togithub.com/lovasoa/marshmallow_dataclass/issues/198

[#&#8203;247]:
https://togithub.com/lovasoa/marshmallow_dataclass/issues/247

[#&#8203;248]:
https://togithub.com/lovasoa/marshmallow_dataclass/pull/248

[#&#8203;249]:
https://togithub.com/lovasoa/marshmallow_dataclass/pull/249

[#&#8203;258]:
https://togithub.com/lovasoa/marshmallow_dataclass/pull/258

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on the 2nd and 4th day instance on
sunday after 9pm" in timezone America/New_York, 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](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/HHS/simpler-grants-gov).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
lengau pushed a commit to canonical/snapcraft that referenced this issue Mar 29, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [MarkupSafe](https://palletsprojects.com/p/markupsafe/)
([changelog](https://markupsafe.palletsprojects.com/changes/)) |
`==2.1.3` -> `==2.1.5` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/MarkupSafe/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/MarkupSafe/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/MarkupSafe/2.1.3/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/MarkupSafe/2.1.3/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [alabaster](https://togithub.com/sphinx-doc/alabaster)
([changelog](https://alabaster.readthedocs.io/en/latest/changelog.html))
| `==0.7.13` -> `==0.7.16` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/alabaster/0.7.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/alabaster/0.7.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/alabaster/0.7.13/0.7.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/alabaster/0.7.13/0.7.16?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [cachetools](https://togithub.com/tkem/cachetools) | `==5.3.2` ->
`==5.3.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/cachetools/5.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/cachetools/5.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/cachetools/5.3.2/5.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/cachetools/5.3.2/5.3.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [coverage](https://togithub.com/nedbat/coveragepy) | `==7.4.0` ->
`==7.4.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.4.0/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.4.0/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [cryptography](https://togithub.com/pyca/cryptography)
([changelog](https://cryptography.io/en/latest/changelog/)) | `==42.0.4`
-> `==42.0.5` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/cryptography/42.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/cryptography/42.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/cryptography/42.0.4/42.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/cryptography/42.0.4/42.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [dill](https://togithub.com/uqfoundation/dill) | `==0.3.7` ->
`==0.3.8` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/dill/0.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/dill/0.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/dill/0.3.7/0.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/dill/0.3.7/0.3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [filelock](https://togithub.com/tox-dev/py-filelock) | `==3.13.1` ->
`==3.13.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/filelock/3.13.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/filelock/3.13.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/filelock/3.13.1/3.13.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/filelock/3.13.1/3.13.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [hupper](https://togithub.com/Pylons/hupper)
([changelog](https://docs.pylonsproject.org/projects/hupper/en/latest/changes.html))
| `==1.12` -> `==1.12.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/hupper/1.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/hupper/1.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/hupper/1.12/1.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/hupper/1.12/1.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [jaraco.classes](https://togithub.com/jaraco/jaraco.classes) |
`==3.3.0` -> `==3.3.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/jaraco.classes/3.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/jaraco.classes/3.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/jaraco.classes/3.3.0/3.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/jaraco.classes/3.3.0/3.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [keyring](https://togithub.com/jaraco/keyring) | `==24.3.0` ->
`==24.3.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/keyring/24.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/keyring/24.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/keyring/24.3.0/24.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/keyring/24.3.0/24.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [lazr.restfulclient](https://launchpad.net/lazr.restfulclient)
([source](https://code.launchpad.net/lazr.restfulclient)) | `==0.14.5`
-> `==0.14.6` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/lazr.restfulclient/0.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/lazr.restfulclient/0.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/lazr.restfulclient/0.14.5/0.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/lazr.restfulclient/0.14.5/0.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [psutil](https://togithub.com/giampaolo/psutil) | `==5.9.7` ->
`==5.9.8` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/psutil/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/psutil/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/psutil/5.9.7/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/psutil/5.9.7/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [psutil](https://togithub.com/giampaolo/psutil) | `==5.9.6` ->
`==5.9.8` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/psutil/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/psutil/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/psutil/5.9.6/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/psutil/5.9.6/5.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pydantic](https://togithub.com/pydantic/pydantic)
([changelog](https://docs.pydantic.dev/latest/changelog/)) | `==1.10.13`
-> `==1.10.14` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/1.10.14?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/1.10.14?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/1.10.13/1.10.14?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/1.10.13/1.10.14?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pyinstaller](https://www.pyinstaller.org/)
([source](https://togithub.com/pyinstaller/pyinstaller)) | `==5.13.1` ->
`==5.13.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pyinstaller/5.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pyinstaller/5.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pyinstaller/5.13.1/5.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pyinstaller/5.13.1/5.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pylxd](https://ubuntu.com/lxd) | `==2.3.1` -> `==2.3.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pylxd/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pylxd/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pylxd/2.3.1/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pylxd/2.3.1/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| pyparsing | `==3.1.1` -> `==3.1.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pyparsing/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pyparsing/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pyparsing/3.1.1/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pyparsing/3.1.1/3.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pyright](https://togithub.com/RobertCraigie/pyright-python) |
`==1.1.350` -> `==1.1.355` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pyright/1.1.355?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pyright/1.1.355?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pyright/1.1.350/1.1.355?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pyright/1.1.350/1.1.355?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [tomlkit](https://togithub.com/sdispater/tomlkit) | `==0.12.3` ->
`==0.12.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/tomlkit/0.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/tomlkit/0.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/tomlkit/0.12.3/0.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/tomlkit/0.12.3/0.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [virtualenv](https://togithub.com/pypa/virtualenv) | `==20.25.0` ->
`==20.25.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/virtualenv/20.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/virtualenv/20.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/virtualenv/20.25.0/20.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/virtualenv/20.25.0/20.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>sphinx-doc/alabaster (alabaster)</summary>

###
[`v0.7.16`](https://togithub.com/sphinx-doc/alabaster/releases/tag/0.7.16):
Alabaster 0.7.16

[Compare
Source](https://togithub.com/sphinx-doc/alabaster/compare/0.7.15...0.7.16)

Changelog: https://alabaster.readthedocs.io/en/latest/changelog.html

###
[`v0.7.15`](https://togithub.com/sphinx-doc/alabaster/releases/tag/0.7.15):
Alabaster 0.7.15

[Compare
Source](https://togithub.com/sphinx-doc/alabaster/compare/0.7.14...0.7.15)

Changelog: https://alabaster.readthedocs.io/en/latest/changelog.html

###
[`v0.7.14`](https://togithub.com/sphinx-doc/alabaster/releases/tag/0.7.14):
Alabaster 0.7.14

[Compare
Source](https://togithub.com/sphinx-doc/alabaster/compare/0.7.13...0.7.14)

Changelog: https://alabaster.readthedocs.io/en/latest/changelog.html

</details>

<details>
<summary>tkem/cachetools (cachetools)</summary>

###
[`v5.3.3`](https://togithub.com/tkem/cachetools/blob/HEAD/CHANGELOG.rst#v533-2024-02-26)

[Compare
Source](https://togithub.com/tkem/cachetools/compare/v5.3.2...v5.3.3)

\===================

-   Documentation improvements.

-   Update CI environment.

</details>

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.4.4`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-744--2024-03-14)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.3...7.4.4)

- Fix: in some cases, even with `[run] relative_files=True`, a data file
could be created with absolute path names. When combined with other
relative
data files, it was random whether the absolute file names would be made
relative or not. If they weren't, then a file would be listed twice in
reports, as detailed in `issue 1752`\_. This is now fixed: absolute file
names are always made relative when combining. Thanks to Bruno Rodrigues
dos
    Santos for support.

- Fix: the last case of a match/case statement had an incorrect message
if the
branch was missed. It said the pattern never matched, when actually the
    branch is missed if the last case always matched.

- Fix: clicking a line number in the HTML report now positions more
accurately.

- Fix: the `report:format` setting was defined as a boolean, but should
be a
string. Thanks, `Tanaydin Sirin <pull 1754_>`\_. It is also now
documented
    on the :ref:`configuration page <config_report_format>`.

.. \_issue
1752:[nedbat/coveragepy#1752
.. \_pull
1754[nedbat/coveragepy#1754

.. \_changes\_7-4-3:

###
[`v7.4.3`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-743--2024-02-23)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.2...7.4.3)

- Fix: in some cases, coverage could fail with a RuntimeError: "Set
changed
    size during iteration." This is now fixed, closing `issue 1733`\_.

.. \_issue
1733:[nedbat/coveragepy#1733

.. \_changes\_7-4-2:

###
[`v7.4.2`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-742--2024-02-20)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.1...7.4.2)

- Fix: setting `COVERAGE_CORE=sysmon` no longer errors on 3.11 and
lower,
thanks `Hugo van Kemenade <pull 1747_>`\_. It now issues a warning that
sys.monitoring is not available and falls back to the default core
instead.

.. \_pull
1747:[nedbat/coveragepy#1747

.. \_changes\_7-4-1:

###
[`v7.4.1`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-741--2024-01-26)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.4.0...7.4.1)

-   Python 3.13.0a3 is supported.

- Fix: the JSON report now includes an explicit format version number,
closing
    `issue 1732`\_.

.. \_issue
1732:[nedbat/coveragepy#1732

.. \_changes\_7-4-0:

</details>

<details>
<summary>pyca/cryptography (cryptography)</summary>

###
[`v42.0.5`](https://togithub.com/pyca/cryptography/compare/42.0.4...42.0.5)

[Compare
Source](https://togithub.com/pyca/cryptography/compare/42.0.4...42.0.5)

</details>

<details>
<summary>uqfoundation/dill (dill)</summary>

###
[`v0.3.8`](https://togithub.com/uqfoundation/dill/releases/tag/0.3.8)

[Compare
Source](https://togithub.com/uqfoundation/dill/compare/dill-0.3.7...0.3.8)

### 0.3.8 Release Notes

With `dill`, you can serialize almost anything in python, even an entire
interpreter session. If you encounter any pickling failures, `dill` also
has some good tools to help you discover why your object fails to
pickle.

`dill` installs with `pip`:
`$ pip install dill`

`dill` requires:
`- python or pypy, >=3.8`

Optional requirements:
`- pyreadline, >=1.7.1` (install with `$ pip install dill[readline]`)
`- objgraph, >=1.7.2` (install with `$ pip install dill[graph]`)

`dill` is licensed under 3-clause BSD:

    >>> import dill
    >>> print (dill.license())

To cite `dill`:

    >>> import dill
    >>> print (dill.citation())

#### What's Changed

- test for qualname in get_typedef_type by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#613
- drop formal support for python 3.7 by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#614
- define html_theme as rtd workaround by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#615
- update install doc in tests by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#621
- formal support for 3.12, initial support for 3.13 by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#630
- add build to rtfd config by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#632
- add guard for math.log in Logger record size calculation by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#637
- updated copyright for 2024 by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#638
- Bump jinja2 from 3.1.1 to 3.1.3 in /docs by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[uqfoundation/dill#640
- Import submodule properly when there is an attribute of the module
with the same name by
[@&#8203;kelvinburke](https://togithub.com/kelvinburke) in
[uqfoundation/dill#629
- update sphinx to 6.2.1 by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#641
- Bump readthedocs-sphinx-search from 0.3.1 to 0.3.2 in /docs by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[uqfoundation/dill#642
- skip BufferedRandomType on pyodide by
[@&#8203;mmckerns](https://togithub.com/mmckerns) in
[uqfoundation/dill#644

#### New Contributors

- [@&#8203;kelvinburke](https://togithub.com/kelvinburke) made their
first contribution in
[uqfoundation/dill#629

**Full Changelog**:
uqfoundation/dill@dill-0.3.7...0.3.8

</details>

<details>
<summary>tox-dev/py-filelock (filelock)</summary>

###
[`v3.13.3`](https://togithub.com/tox-dev/filelock/releases/tag/3.13.3)

[Compare
Source](https://togithub.com/tox-dev/py-filelock/compare/3.13.2...3.13.3)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

- Make singleton class instance dict unique per subclass by
[@&#8203;nefrob](https://togithub.com/nefrob) in
[tox-dev/filelock#318

**Full Changelog**:
tox-dev/filelock@3.13.2...3.13.3

###
[`v3.13.2`](https://togithub.com/tox-dev/filelock/releases/tag/3.13.2)

[Compare
Source](https://togithub.com/tox-dev/py-filelock/compare/3.13.1...3.13.2)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

- Fixed small typo in \_unix.py by
[@&#8203;snemes](https://togithub.com/snemes) in
[tox-dev/filelock#302
- Update SECURITY.md to reflect Python 3.7 support dropoff by
[@&#8203;kemzeb](https://togithub.com/kemzeb) in
[tox-dev/filelock#304
- Update index.rst to improve the demo usage by
[@&#8203;youkaichao](https://togithub.com/youkaichao) in
[tox-dev/filelock#314
- \[BugFix] fix permission denied error when lock file is placed in
`/tmp` by [@&#8203;kota-iizuka](https://togithub.com/kota-iizuka) in
[tox-dev/filelock#317

#### New Contributors

- [@&#8203;snemes](https://togithub.com/snemes) made their first
contribution in
[tox-dev/filelock#302
- [@&#8203;kemzeb](https://togithub.com/kemzeb) made their first
contribution in
[tox-dev/filelock#304
- [@&#8203;youkaichao](https://togithub.com/youkaichao) made their first
contribution in
[tox-dev/filelock#314
- [@&#8203;kota-iizuka](https://togithub.com/kota-iizuka) made their
first contribution in
[tox-dev/filelock#317

**Full Changelog**:
tox-dev/filelock@3.13.1...3.13.2

</details>

<details>
<summary>Pylons/hupper (hupper)</summary>

###
[`v1.12.1`](https://togithub.com/Pylons/hupper/blob/HEAD/CHANGES.rst#1121-2024-01-26)

[Compare
Source](https://togithub.com/Pylons/hupper/compare/1.12...1.12.1)

\===================

-   Add support for Python 3.12.

-   Fix a blocking issue when shutting down on Windows.

- Fix a race condition closing pipes when restarting the worker process.

[Pylons/hupper#83

- Fix issues with watchman when the server shuts down unexpectedly and
when
    subscriptions are canceled.

- Add `hupper.get_reloader().graceful_shutdown()` which can be used
within
    your own app to trigger a full shutdown of the worker as well as the

monitori[Pylons/hupper#88

</details>

<details>
<summary>jaraco/jaraco.classes (jaraco.classes)</summary>

###
[`v3.3.1`](https://togithub.com/jaraco/jaraco.classes/compare/v3.3.0...v3.3.1)

[Compare
Source](https://togithub.com/jaraco/jaraco.classes/compare/v3.3.0...v3.3.1)

</details>

<details>
<summary>jaraco/keyring (keyring)</summary>

###
[`v24.3.1`](https://togithub.com/jaraco/keyring/compare/v24.3.0...v24.3.1)

[Compare
Source](https://togithub.com/jaraco/keyring/compare/v24.3.0...v24.3.1)

</details>

<details>
<summary>giampaolo/psutil (psutil)</summary>

###
[`v5.9.8`](https://togithub.com/giampaolo/psutil/blob/HEAD/HISTORY.rst#598)

[Compare
Source](https://togithub.com/giampaolo/psutil/compare/release-5.9.7...release-5.9.8)

\=====

2024-01-19

**Enhancements**

- 2343\_, \[FreeBSD]: filter `net_connections()`\_ returned list in C
instead of
Python, and avoid to retrieve unnecessary connection types unless
explicitly
asked. E.g., on an IDLE system with few IPv6 connections this will run
around
4 times faster. Before all connection types (TCP, UDP, UNIX) were
retrieved
    internally, even if only a portion was returned.
- 2342\_, \[NetBSD]: same as above
([#&#8203;2343](https://togithub.com/giampaolo/psutil/issues/2343)) but
for NetBSD.
-   2349\_: adopted black formatting style.

**Bug fixes**

- 930\_, \[NetBSD], \[critical]: `net_connections()`\_ implementation
was broken.
    It could either leak memory or core dump.
- 2340\_, \[NetBSD]: if process is terminated, `Process.cwd()`\_ will
return an
    empty string instead of raising `NoSuchProcess`\_.
- 2345\_, \[Linux]: fix compilation on older compiler missing
DUPLEX_UNKNOWN.
- 2222\_, \[macOS]: `cpu_freq()` now returns fixed values for `min` and
`max`
    frequencies in all Apple Silicon chips.

</details>

<details>
<summary>pydantic/pydantic (pydantic)</summary>

###
[`v1.10.14`](https://togithub.com/pydantic/pydantic/releases/tag/v1.10.14):
2024-01-19

[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v1.10.13...v1.10.14)

#### What's Changed

- Update install.md by [@&#8203;dmontagu](https://togithub.com/dmontagu)
in
[pydantic/pydantic#7690
- Fix ci to only deploy docs on release by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[pydantic/pydantic#7740
- Ubuntu fixes for V1 by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[pydantic/pydantic#8540
and
[pydantic/pydantic#8587
- Fix `cached_property` handling in dataclasses when copied by
[@&#8203;rdbisme](https://togithub.com/rdbisme) in
[pydantic/pydantic#8407

#### New Contributors

- [@&#8203;rdbisme](https://togithub.com/rdbisme) made their first
contribution in
[pydantic/pydantic#8407

**Full Changelog**:
pydantic/pydantic@v1.10.13...v1.10.14

</details>

<details>
<summary>pyinstaller/pyinstaller (pyinstaller)</summary>

###
[`v5.13.2`](https://togithub.com/pyinstaller/pyinstaller/releases/tag/v5.13.2)

[Compare
Source](https://togithub.com/pyinstaller/pyinstaller/compare/v5.13.1...v5.13.2)

Please see the [v5.13.2 section of the
changelog](https://pyinstaller.org/en/v5.13.2/CHANGES.html#id1) for a
list of the changes since v5.13.1.

</details>

<details>
<summary>RobertCraigie/pyright-python (pyright)</summary>

###
[`v1.1.355`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.354...v1.1.355)

[Compare
Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.354...v1.1.355)

###
[`v1.1.354`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.353...v1.1.354)

[Compare
Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.353...v1.1.354)

###
[`v1.1.353`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.352...v1.1.353)

[Compare
Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.352...v1.1.353)

###
[`v1.1.352`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.351...v1.1.352)

[Compare
Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.351...v1.1.352)

###
[`v1.1.351`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.350...v1.1.351)

[Compare
Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.350...v1.1.351)

</details>

<details>
<summary>sdispater/tomlkit (tomlkit)</summary>

###
[`v0.12.4`](https://togithub.com/sdispater/tomlkit/blob/HEAD/CHANGELOG.md#0124---2024-02-27)

[Compare
Source](https://togithub.com/sdispater/tomlkit/compare/0.12.3...0.12.4)

##### Fixed

- Support `|` and `|=` operator for tables, and support `+` and `+=`
operator for arrays.
([#&#8203;331](https://togithub.com/sdispater/tomlkit/issues/331))
- Fix an index error when setting dotted keys in a table.
([#&#8203;332](https://togithub.com/sdispater/tomlkit/issues/332))

</details>

<details>
<summary>pypa/virtualenv (virtualenv)</summary>

###
[`v20.25.1`](https://togithub.com/pypa/virtualenv/compare/20.25.0...20.25.1)

[Compare
Source](https://togithub.com/pypa/virtualenv/compare/20.25.0...20.25.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/UTC,
Automerge - "every weekend" in timezone Etc/UTC.

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/canonical/snapcraft).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Signed-off-by: Callahan Kovacs <callahan.kovacs@canonical.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Callahan Kovacs <callahan.kovacs@canonical.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working needs triage
Projects
None yet
Development

No branches or pull requests

3 participants