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

Segmentation fault in time_machine_travel(timedelta()) #431

Closed
marcinsulikowski opened this issue Mar 22, 2024 · 4 comments · Fixed by #433
Closed

Segmentation fault in time_machine_travel(timedelta()) #431

marcinsulikowski opened this issue Mar 22, 2024 · 4 comments · Fixed by #433

Comments

@marcinsulikowski
Copy link

Python Version

3.12

pytest Version

No response

Package Version

2.14.0

Description

The following Python script:

from datetime import timedelta
import time_machine

with time_machine.travel(timedelta()):
    pass

crashes due to a segmentation fault in the constructor of the travel class.

The crash happens when the constructor tries to determine the destination timestamp like this:

    timestamp = time() + dest.total_seconds()

where time() calls result = _time_machine.original_time() which crashes if time_machine's patches are not applied yet and thus the original_time function pointer is still NULL.

marcinsulikowski added a commit to marcinsulikowski/time-machine that referenced this issue Mar 22, 2024
The following Python script:

    from datetime import timedelta
    import time_machine
    with time_machine.travel(timedelta()):
        pass

crashes due to a segmentation fault in the constructor of the `travel`
class.

The crash happens when the constructor tries to determine the destination
timestamp like this:

    timestamp = time() + dest.total_seconds()

where `time()` calls `result = _time_machine.original_time()` which
crashes if time_machine's patches are not applied yet and thus the
`original_time` function pointer is still `NULL`.

This happens only when trying to initialize `travel` with `timedelta`
only when `travel` was not successfully used yet in the same process
before. Those conditions are hard to meet in the test cases of this
library so we fix the bug without adding a new test that would prove
that the fix works.

Closes adamchainz#431
@marcinsulikowski
Copy link
Author

I posted PR #432 which should fix this crash.

@adamchainz
Copy link
Owner

Thank you for the clear report and PR. I didn’t like the change you proposed though, because it would be best to keep calling travel() side-effect free. I would rather time-machine didn’t patch modules until needed, to reduce its overhead and the chance of bugs in processes that import but don’t run tests.

I went with an alternative approach in #433. Note that I included a test that uses a subprocess, which reproduces the issue before the patch.

Released in 2.14.1.

@marcinsulikowski
Copy link
Author

Thank you for fixing this so quickly 👍

@adamchainz
Copy link
Owner

Thank you for the clear report. As you may see above, a segfault was reported several times but I never could track down the cause.

I tooted and tweeted about your report :) https://fosstodon.org/@adamchainz/112144774490159195

inmantaci pushed a commit to inmanta/inmanta-core that referenced this issue Mar 25, 2024
Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.14.0 to 2.14.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst">time-machine's changelog</a>.</em></p>
<blockquote>
<h2>2.14.1 (2024-03-22)</h2>
<ul>
<li>
<p>Fix segmentation fault when the first <code>travel()</code> call in a process uses a <code>timedelta</code>.</p>
<p>Thanks to Marcin Sulikowski for the report in <code>Issue [#431](adamchainz/time-machine#431) &lt;https://github.com/adamchainz/time-machine/issues/431&gt;</code>__.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/adamchainz/time-machine/commit/cc1716c669a6eba84f639a1c8653e58bc07374ee"><code>cc1716c</code></a> Version 2.14.1</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/ee93b04d17c8b21ba78ac67c928e1efa07183282"><code>ee93b04</code></a> Fix timedelta segmentation fault (<a href="https://github.com/adamchainz/time-machine/issues/433">#433</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/8e28b9e74c3d6a50b7d6ec09a9e50903d4dc8bdd"><code>8e28b9e</code></a> Add flake8-logging to Flake8 setup</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/825c7f1ec15f8ca57e378489f463e33d329a22ef"><code>825c7f1</code></a> Drop Black target version</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/f151428adfe767aefa1194ea31d6244de7ee0316"><code>f151428</code></a> GitHub Actions coverage summary</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/2bf3160377dc23f4aa5d5b385deb2a2705c03f4a"><code>2bf3160</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github.com/adamchainz/time-machine/issues/430">#430</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/e03c83f66442e34049798d23cee1ec7a06aac55b"><code>e03c83f</code></a> Upgrade requirements (<a href="https://github.com/adamchainz/time-machine/issues/429">#429</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/627907904a8f4b797077e3f02a4a010e98fe41e4"><code>6279079</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github.com/adamchainz/time-machine/issues/428">#428</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/11d55b61220e689ea52a05f5a1339701f633fcc2"><code>11d55b6</code></a> Upgrade GitHub Actions artifact actions</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/2014dd6b4af2df017f668319f0a1e2a03d14fa46"><code>2014dd6</code></a> Upgrade requirements (<a href="https://github.com/adamchainz/time-machine/issues/427">#427</a>)</li>
<li>See full diff in <a href="https://github.com/adamchainz/time-machine/compare/2.14.0...2.14.1">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=time-machine&package-manager=pip&previous-version=2.14.0&new-version=2.14.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
inmantaci pushed a commit to inmanta/inmanta-core that referenced this issue Mar 26, 2024
Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.14.0 to 2.14.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst">time-machine's changelog</a>.</em></p>
<blockquote>
<h2>2.14.1 (2024-03-22)</h2>
<ul>
<li>
<p>Fix segmentation fault when the first <code>travel()</code> call in a process uses a <code>timedelta</code>.</p>
<p>Thanks to Marcin Sulikowski for the report in <code>Issue [#431](adamchainz/time-machine#431) &lt;https://github.com/adamchainz/time-machine/issues/431&gt;</code>__.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/adamchainz/time-machine/commit/cc1716c669a6eba84f639a1c8653e58bc07374ee"><code>cc1716c</code></a> Version 2.14.1</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/ee93b04d17c8b21ba78ac67c928e1efa07183282"><code>ee93b04</code></a> Fix timedelta segmentation fault (<a href="https://github.com/adamchainz/time-machine/issues/433">#433</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/8e28b9e74c3d6a50b7d6ec09a9e50903d4dc8bdd"><code>8e28b9e</code></a> Add flake8-logging to Flake8 setup</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/825c7f1ec15f8ca57e378489f463e33d329a22ef"><code>825c7f1</code></a> Drop Black target version</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/f151428adfe767aefa1194ea31d6244de7ee0316"><code>f151428</code></a> GitHub Actions coverage summary</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/2bf3160377dc23f4aa5d5b385deb2a2705c03f4a"><code>2bf3160</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github.com/adamchainz/time-machine/issues/430">#430</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/e03c83f66442e34049798d23cee1ec7a06aac55b"><code>e03c83f</code></a> Upgrade requirements (<a href="https://github.com/adamchainz/time-machine/issues/429">#429</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/627907904a8f4b797077e3f02a4a010e98fe41e4"><code>6279079</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github.com/adamchainz/time-machine/issues/428">#428</a>)</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/11d55b61220e689ea52a05f5a1339701f633fcc2"><code>11d55b6</code></a> Upgrade GitHub Actions artifact actions</li>
<li><a href="https://github.com/adamchainz/time-machine/commit/2014dd6b4af2df017f668319f0a1e2a03d14fa46"><code>2014dd6</code></a> Upgrade requirements (<a href="https://github.com/adamchainz/time-machine/issues/427">#427</a>)</li>
<li>See full diff in <a href="https://github.com/adamchainz/time-machine/compare/2.14.0...2.14.1">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=time-machine&package-manager=pip&previous-version=2.14.0&new-version=2.14.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
github-merge-queue bot pushed a commit to frequenz-floss/frequenz-dispatch-python that referenced this issue Apr 3, 2024
Updates the requirements on
[frequenz-client-base](https://github.com/frequenz-floss/frequenz-client-base-python),
[black](https://github.com/psf/black),
[markdown](https://github.com/Python-Markdown/markdown),
[mkdocs-material](https://github.com/squidfunk/mkdocs-material),
[mypy](https://github.com/python/mypy),
[types-markdown](https://github.com/python/typeshed),
[types-python-dateutil](https://github.com/python/typeshed),
[uv](https://github.com/astral-sh/uv),
[pytest](https://github.com/pytest-dev/pytest),
[pytest-mock](https://github.com/pytest-dev/pytest-mock),
[pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) and
[time-machine](https://github.com/adamchainz/time-machine) to permit the
latest version.
Updates `frequenz-client-base` to 0.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/releases">frequenz-client-base's
releases</a>.</em></p>
<blockquote>
<h2>v0.3.0</h2>
<h1>Frequenz Client Base Library Release Notes</h1>
<h2>Summary</h2>
<p>This release updates the minimum required
<code>frequenz-channels</code> version is updated
to v1.0.0-rc1. This is a breaking change, because the channels API has
changed.</p>
<h2>Upgrading</h2>
<p>Follow the upgrading instructions from the new channel release: <a
href="https://github.com/frequenz-floss/frequenz-channels-python/releases/tag/v1.0.0-rc.1">v1.0.0-rc1</a>.</p>
<h2>What's Changed</h2>
<ul>
<li>Don't create nox sessions twice in cross-arch tests by <a
href="https://github.com/llucax"><code>@​llucax</code></a> in <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/pull/34">frequenz-floss/frequenz-client-base-python#34</a></li>
<li>Clear release notes by <a
href="https://github.com/llucax"><code>@​llucax</code></a> in <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/pull/33">frequenz-floss/frequenz-client-base-python#33</a></li>
<li>Update minimum <code>frequenz-channels</code> version to
<code>v1.0.0-rc1</code> by <a
href="https://github.com/shsms"><code>@​shsms</code></a> in <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/pull/35">frequenz-floss/frequenz-client-base-python#35</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/compare/v0.2.1...v0.3.0">https://github.com/frequenz-floss/frequenz-client-base-python/compare/v0.2.1...v0.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/6230161c22c0ccb3fb61522e6b5b3df9cdca2eaf"><code>6230161</code></a>
Update minimum <code>frequenz-channels</code> version to
<code>v1.0.0-rc1</code> (<a
href="https://github.com/frequenz-floss/frequenz-client-base-python/issues/35">#35</a>)</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/e21cc53f5ed3219cd171450dedc5179af6fa5d88"><code>e21cc53</code></a>
Update RELEASE_NOTES.md and prepare for release v0.3.0</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/31de004f9bfe54519f07ae2baa2d9659c78a1f30"><code>31de004</code></a>
Update minimum <code>frequenz-channels</code> version to v1.0.0-rc1</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/97196bde8dbaac648bef3acba5268a05d9f90cdb"><code>97196bd</code></a>
Clear release notes (<a
href="https://github.com/frequenz-floss/frequenz-client-base-python/issues/33">#33</a>)</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/1c8d44746c9f341cf12ab99f30286e3f235182f0"><code>1c8d447</code></a>
Don't create nox sessions twice in cross-arch tests (<a
href="https://github.com/frequenz-floss/frequenz-client-base-python/issues/34">#34</a>)</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/43584c489bb8bc44068b3a3fef19e6142b3b2fb2"><code>43584c4</code></a>
Don't create nox sessions twice in cross-arch tests</li>
<li><a
href="https://github.com/frequenz-floss/frequenz-client-base-python/commit/56954296b4a01aa44fbf856041f12c2f8aa156fa"><code>5695429</code></a>
Clear release notes</li>
<li>See full diff in <a
href="https://github.com/frequenz-floss/frequenz-client-base-python/compare/v0.2.1...v0.3.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `black` from 24.2.0 to 24.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/psf/black/releases">black's
releases</a>.</em></p>
<blockquote>
<h2>24.3.0</h2>
<h3>Highlights</h3>
<p>This release is a milestone: it fixes Black's first CVE security
vulnerability. If you
run Black on untrusted input, or if you habitually put thousands of
leading tab
characters in your docstrings, you are strongly encouraged to upgrade
immediately to fix
<a
href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21503">CVE-2024-21503</a>.</p>
<p>This release also fixes a bug in Black's AST safety check that
allowed Black to make
incorrect changes to certain f-strings that are valid in Python 3.12 and
higher.</p>
<h3>Stable style</h3>
<ul>
<li>Don't move comments along with delimiters, which could cause crashes
(<a
href="https://github.com/psf/black/issues/4248">#4248</a>)</li>
<li>Strengthen AST safety check to catch more unsafe changes to strings.
Previous versions
of Black would incorrectly format the contents of certain unusual
f-strings containing
nested strings with the same quote type. Now, Black will crash on such
strings until
support for the new f-string syntax is implemented. (<a
href="https://github.com/psf/black/issues/4270">#4270</a>)</li>
<li>Fix a bug where line-ranges exceeding the last code line would not
work as expected
(<a
href="https://github.com/psf/black/issues/4273">#4273</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Fix catastrophic performance on docstrings that contain large
numbers of leading tab
characters. This fixes
<a
href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21503">CVE-2024-21503</a>.
(<a
href="https://github.com/psf/black/issues/4278">#4278</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Note what happens when <code>--check</code> is used with
<code>--quiet</code> (<a
href="https://github.com/psf/black/issues/4236">#4236</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/psf/black/blob/main/CHANGES.md">black's
changelog</a>.</em></p>
<blockquote>
<h2>24.3.0</h2>
<h3>Highlights</h3>
<p>This release is a milestone: it fixes Black's first CVE security
vulnerability. If you
run Black on untrusted input, or if you habitually put thousands of
leading tab
characters in your docstrings, you are strongly encouraged to upgrade
immediately to fix
<a
href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21503">CVE-2024-21503</a>.</p>
<p>This release also fixes a bug in Black's AST safety check that
allowed Black to make
incorrect changes to certain f-strings that are valid in Python 3.12 and
higher.</p>
<h3>Stable style</h3>
<ul>
<li>Don't move comments along with delimiters, which could cause crashes
(<a
href="https://github.com/psf/black/issues/4248">#4248</a>)</li>
<li>Strengthen AST safety check to catch more unsafe changes to strings.
Previous versions
of Black would incorrectly format the contents of certain unusual
f-strings containing
nested strings with the same quote type. Now, Black will crash on such
strings until
support for the new f-string syntax is implemented. (<a
href="https://github.com/psf/black/issues/4270">#4270</a>)</li>
<li>Fix a bug where line-ranges exceeding the last code line would not
work as expected
(<a
href="https://github.com/psf/black/issues/4273">#4273</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Fix catastrophic performance on docstrings that contain large
numbers of leading tab
characters. This fixes
<a
href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21503">CVE-2024-21503</a>.
(<a
href="https://github.com/psf/black/issues/4278">#4278</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Note what happens when <code>--check</code> is used with
<code>--quiet</code> (<a
href="https://github.com/psf/black/issues/4236">#4236</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/psf/black/commit/552baf822992936134cbd31a38f69c8cfe7c0f05"><code>552baf8</code></a>
Prepare release 24.3.0 (<a
href="https://github.com/psf/black/issues/4279">#4279</a>)</li>
<li><a
href="https://github.com/psf/black/commit/f00093672628d212b8965a8993cee8bedf5fe9b8"><code>f000936</code></a>
Fix catastrophic performance in lines_with_leading_tabs_expanded() (<a
href="https://github.com/psf/black/issues/4278">#4278</a>)</li>
<li><a
href="https://github.com/psf/black/commit/7b5a657285f38126bf28483478bbd9ea928077ec"><code>7b5a657</code></a>
Fix --line-ranges behavior when ranges are at EOF (<a
href="https://github.com/psf/black/issues/4273">#4273</a>)</li>
<li><a
href="https://github.com/psf/black/commit/1abcffc81816257985678f08c61584ed4287f22a"><code>1abcffc</code></a>
Use regex where we ignore case on windows (<a
href="https://github.com/psf/black/issues/4252">#4252</a>)</li>
<li><a
href="https://github.com/psf/black/commit/719e67462c80574c81a96faa144886de6da84489"><code>719e674</code></a>
Fix 4227: Improve documentation for --quiet --check (<a
href="https://github.com/psf/black/issues/4236">#4236</a>)</li>
<li><a
href="https://github.com/psf/black/commit/e5510afc06cd238cd0cba4095283943a870a7e7b"><code>e5510af</code></a>
update plugin url for Thonny (<a
href="https://github.com/psf/black/issues/4259">#4259</a>)</li>
<li><a
href="https://github.com/psf/black/commit/6af7d1109693c4ad3af08ecbc34649c232b47a6d"><code>6af7d11</code></a>
Fix AST safety check false negative (<a
href="https://github.com/psf/black/issues/4270">#4270</a>)</li>
<li><a
href="https://github.com/psf/black/commit/f03ee113c9f3dfeb477f2d4247bfb7de2e5f465c"><code>f03ee11</code></a>
Ensure <code>blib2to3.pygram</code> is initialized before use (<a
href="https://github.com/psf/black/issues/4224">#4224</a>)</li>
<li><a
href="https://github.com/psf/black/commit/e4bfedbec2e8b10cc6b7b31442478f05db0ce06d"><code>e4bfedb</code></a>
fix: Don't move comments while splitting delimiters (<a
href="https://github.com/psf/black/issues/4248">#4248</a>)</li>
<li><a
href="https://github.com/psf/black/commit/d0287e1f7558d97e6c0ebd6dc5bcb5b970e2bf8c"><code>d0287e1</code></a>
Make trailing comma logic more concise (<a
href="https://github.com/psf/black/issues/4202">#4202</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/psf/black/compare/24.2.0...24.3.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `markdown` from 3.5.2 to 3.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Python-Markdown/markdown/releases">markdown's
releases</a>.</em></p>
<blockquote>
<h2>Release 3.6</h2>
<h3>Changed</h3>
<h4>Refactor TOC Sanitation</h4>
<ul>
<li>All postprocessors are now run on heading content.</li>
<li>Footnote references are now stripped from heading content. Fixes <a
href="https://github.com/Python-Markdown/markdown/issues/660">#660</a>.</li>
<li>A more robust <code>striptags</code> is provided to convert headings
to plain text.
Unlike, the <code>markupsafe</code> implementation, HTML entities are
not unescaped.</li>
<li>The plain text <code>name</code>, rich <code>html</code>, and
unescaped raw <code>data-toc-label</code> are
saved to <code>toc_tokens</code>, allowing users to access the full rich
text content of
the headings directly from <code>toc_tokens</code>.</li>
<li>The value of <code>data-toc-label</code> is sanitized separate from
heading content
before being written to <code>name</code>. This fixes a bug which
allowed markup through
in certain circumstances. To access the raw unsanitized data, retrieve
the
value from <code>token['data-toc-label']</code> directly.</li>
<li>An <code>html.unescape</code> call is made just prior to calling
<code>slugify</code> so that
<code>slugify</code> only operates on Unicode characters. Note that
<code>html.unescape</code> is
not run on <code>name</code>, <code>html</code>, or
<code>data-toc-label</code>.</li>
<li>The functions <code>get_name</code> and
<code>stashedHTML2text</code> defined in the <code>toc</code> extension
are both <strong>deprecated</strong>. Instead, third party extensions
should use some
combination of the new functions <code>run_postprocessors</code>,
<code>render_inner_html</code> and
<code>striptags</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Include <code>scripts/*.py</code> in the generated source tarballs
(<a
href="https://github.com/Python-Markdown/markdown/issues/1430">#1430</a>).</li>
<li>Ensure lines after heading in loose list are properly detabbed (<a
href="https://github.com/Python-Markdown/markdown/issues/1443">#1443</a>).</li>
<li>Give smarty tree processor higher priority than toc (<a
href="https://github.com/Python-Markdown/markdown/issues/1440">#1440</a>).</li>
<li>Permit carets (<code>^</code>) and square brackets (<code>]</code>)
but explicitly exclude
backslashes (<code>\</code>) from abbreviations (<a
href="https://github.com/Python-Markdown/markdown/issues/1444">#1444</a>).</li>
<li>In attribute lists (<code>attr_list</code>,
<code>fenced_code</code>), quoted attribute values are
now allowed to contain curly braces (<code>}</code>) (<a
href="https://github.com/Python-Markdown/markdown/issues/1414">#1414</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md">markdown's
changelog</a>.</em></p>
<blockquote>
<h2>[3.6] -- 2024-03-14</h2>
<h3>Changed</h3>
<h4>Refactor TOC Sanitation</h4>
<ul>
<li>All postprocessors are now run on heading content.</li>
<li>Footnote references are now stripped from heading content. Fixes <a
href="https://github.com/Python-Markdown/markdown/issues/660">#660</a>.</li>
<li>A more robust <code>striptags</code> is provided to convert headings
to plain text.
Unlike, the <code>markupsafe</code> implementation, HTML entities are
not unescaped.</li>
<li>The plain text <code>name</code>, rich <code>html</code>, and
unescaped raw <code>data-toc-label</code> are
saved to <code>toc_tokens</code>, allowing users to access the full rich
text content of
the headings directly from <code>toc_tokens</code>.</li>
<li>The value of <code>data-toc-label</code> is sanitized separate from
heading content
before being written to <code>name</code>. This fixes a bug which
allowed markup through
in certain circumstances. To access the raw unsanitized data, retrieve
the
value from <code>token['data-toc-label']</code> directly.</li>
<li>An <code>html.unescape</code> call is made just prior to calling
<code>slugify</code> so that
<code>slugify</code> only operates on Unicode characters. Note that
<code>html.unescape</code> is
not run on <code>name</code>, <code>html</code>, or
<code>data-toc-label</code>.</li>
<li>The functions <code>get_name</code> and
<code>stashedHTML2text</code> defined in the <code>toc</code> extension
are both <strong>deprecated</strong>. Instead, third party extensions
should use some
combination of the new functions <code>run_postprocessors</code>,
<code>render_inner_html</code> and
<code>striptags</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Include <code>scripts/*.py</code> in the generated source tarballs
(<a
href="https://github.com/Python-Markdown/markdown/issues/1430">#1430</a>).</li>
<li>Ensure lines after heading in loose list are properly detabbed (<a
href="https://github.com/Python-Markdown/markdown/issues/1443">#1443</a>).</li>
<li>Give smarty tree processor higher priority than toc (<a
href="https://github.com/Python-Markdown/markdown/issues/1440">#1440</a>).</li>
<li>Permit carets (<code>^</code>) and square brackets (<code>]</code>)
but explicitly exclude
backslashes (<code>\</code>) from abbreviations (<a
href="https://github.com/Python-Markdown/markdown/issues/1444">#1444</a>).</li>
<li>In attribute lists (<code>attr_list</code>,
<code>fenced_code</code>), quoted attribute values are
now allowed to contain curly braces (<code>}</code>) (<a
href="https://github.com/Python-Markdown/markdown/issues/1414">#1414</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/e524b8fe938738cb4492411a34cce89051cb9695"><code>e524b8f</code></a>
Bump version to 3.6</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/3d8afc6f89e169522f44c1bbec15f66dc359eccb"><code>3d8afc6</code></a>
Allow attr_list quoted values to contain curly braces</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/9edba85fc14f034b7109534220702bf60178ff15"><code>9edba85</code></a>
Refactor abbr escaping</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/e4ab4a610edc6332ce81a53aa4ae6f97516ce461"><code>e4ab4a6</code></a>
Refactor TOC sanitation</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/a18765c25cccab23f400edeac94d20f4be00492b"><code>a18765c</code></a>
Explicitly omit carot and backslash from abbr</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/421f1e88ff4661b4433b97ec57b040a2a74e5aed"><code>421f1e8</code></a>
Give smarty tree processor higher priority than toc</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/c334a3e47e6565469344154f966cf0eb9aca0de3"><code>c334a3e</code></a>
Ensure lines after heading in loose list are properly detabbed</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/ea92856855a6314488acb121f21f8fa02860e008"><code>ea92856</code></a>
Update the license template so GitHub can detect it</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/a2effd6d5191808c8b2e347965f6fcf4aa709e78"><code>a2effd6</code></a>
Disable mkdocstrings show_symbol_type_toc option to work around
searching iss...</li>
<li><a
href="https://github.com/Python-Markdown/markdown/commit/91f9a1205d32f3bc6a27ca5f993409c3b97c1931"><code>91f9a12</code></a>
Restore Attribute symbol type in mkdocstrings template</li>
<li>Additional commits viewable in <a
href="https://github.com/Python-Markdown/markdown/compare/3.5.2...3.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `mkdocs-material` from 9.5.12 to 9.5.16
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/squidfunk/mkdocs-material/releases">mkdocs-material's
releases</a>.</em></p>
<blockquote>
<h2>mkdocs-material-9.5.16</h2>
<ul>
<li>Updated Russian translations</li>
<li>Improved error handling and reporting in social plugin</li>
<li>Improved error handling and reporting in privacy plugin</li>
<li>Fixed blog plugin not allowing to use time in format strings</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6983">#6983</a>:
Social plugin crashes because of Google Fonts API change</li>
</ul>
<p>Thanks to <a
href="https://github.com/kamilkrzyskow"><code>@​kamilkrzyskow</code></a>,
<a href="https://github.com/Guts"><code>@​Guts</code></a>, <a
href="https://github.com/szg-alex-payne"><code>@​szg-alex-payne</code></a>
and <a
href="https://github.com/natakazakova"><code>@​natakazakova</code></a>
for their contributions</p>
<h2>mkdocs-material-9.5.15</h2>
<ul>
<li>Reverted fix for transparent iframes (9.5.14)</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6929">#6929</a>:
Interference of social plugin and auto dark mode</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6938">#6938</a>:
Giscus shows dark background in light mode (9.5.14 regression)</li>
</ul>
<h2>mkdocs-material-9.5.14</h2>
<ul>
<li>Added support for hiding versions from selector when using mike</li>
<li>Added init system to improve signal handling in Docker image</li>
<li>Fixed edge cases in exclusion logic of info plugin</li>
<li>Fixed inability to reset pipeline in search plugin</li>
<li>Fixed syntax error in Finnish translations</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6917">#6917</a>:
UTF-8 encoding problems in blog plugin on Windows</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6889">#6889</a>:
Transparent iframes get background color</li>
</ul>
<p>Thanks to <a
href="https://github.com/kamilkrzyskow"><code>@​kamilkrzyskow</code></a>,
<a href="https://github.com/yubiuser"><code>@​yubiuser</code></a> and <a
href="https://github.com/todeveni"><code>@​todeveni</code></a> for their
contributions</p>
<h2>mkdocs-material-9.5.13</h2>
<ul>
<li>Updated Slovak translations</li>
<li>Improved info plugin interop with projects plugin</li>
<li>Improved info plugin inclusion/exclusion logic</li>
<li>Fixed info plugin not gathering files recursively</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6750">#6750</a>:
Ensure info plugin packs up all necessary files</li>
</ul>
<p>Thanks to <a
href="https://github.com/kamilkrzyskow"><code>@​kamilkrzyskow</code></a>
and <a href="https://github.com/scepka"><code>@​scepka</code></a> for
their contributions</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG">mkdocs-material's
changelog</a>.</em></p>
<blockquote>
<p>mkdocs-material-9.5.16+insiders-4.53.4 (2024-03-31)</p>
<ul>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6973">#6973</a>:
Escaping issue in tags extra files deprecation helper</li>
</ul>
<p>mkdocs-material-9.5.16 (2024-03-31)</p>
<ul>
<li>Updated Russian translations</li>
<li>Improved error handling and reporting in social plugin</li>
<li>Improved error handling and reporting in privacy plugin</li>
<li>Fixed blog plugin not allowing to use time in format strings</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6983">#6983</a>:
Social plugin crashes because of Google Fonts API change</li>
</ul>
<p>mkdocs-material-9.5.15+insiders-4.53.3 (2024-03-23)</p>
<ul>
<li>Added support for font variants in social plugin</li>
<li>Improved resilience of font resolution in social plugin</li>
<li>Fixed tag listing sometimes not being auto-populated</li>
<li>Fixed tag listing scope not being correctly resolved</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6941">#6941</a>:
Meta plugin adding duplicate entries</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6928">#6928</a>:
Social plugin crashes for some fonts</li>
</ul>
<p>mkdocs-material-9.5.15 (2024-03-23)</p>
<ul>
<li>Reverted fix for transparent iframes (9.5.14)</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6929">#6929</a>:
Interference of social plugin and auto dark mode</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6938">#6938</a>:
Giscus shows dark background in light mode (9.5.14 regression)</li>
</ul>
<p>mkdocs-material-9.5.14+insiders-4.53.2 (2024-03-18)</p>
<ul>
<li>Fixed abort on first non-matching configuration in preview
extension</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6914">#6914</a>:
Meta files take precedence over front matter</li>
</ul>
<p>mkdocs-material-9.5.14 (2024-03-18)</p>
<ul>
<li>Added support for hiding versions from selector when using mike</li>
<li>Added init system to improve signal handling in Docker image</li>
<li>Fixed edge cases in exclusion logic of info plugin</li>
<li>Fixed inability to reset pipeline in search plugin</li>
<li>Fixed syntax error in Finnish translations</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6917">#6917</a>:
UTF-8 encoding problems in blog plugin on Windows</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6889">#6889</a>:
Transparent iframes get background color</li>
</ul>
<p>mkdocs-material-9.5.13+insiders-4.53.1 (2024-03-06)</p>
<ul>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6877">#6877</a>:
Projects plugin computes incorrect path to assets</li>
<li>Fixed <a
href="https://github.com/squidfunk/mkdocs-material/issues/6869">#6869</a>:
Blog plugin should emit warning on invalid related link</li>
</ul>
<p>mkdocs-material-9.5.13 (2024-03-06)</p>
<ul>
<li>Updated Slovak translations</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/895652409795662dc809c6e020e082b2238fe0a3"><code>8956524</code></a>
Updated Insiders changelog</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/0db4e667da098cede42f78fb3325b3f95c50bbfa"><code>0db4e66</code></a>
Updated changelog</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/29cf44b71ca0e579c693c79d8e74c820a42b5910"><code>29cf44b</code></a>
Improved resilience of privacy plugin</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/6c9ba875bfd5d93007b48debd3b4041773dd5eef"><code>6c9ba87</code></a>
Prepare 9.5.16 release</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/f2bfab91fee62419d4719387c8b9924166f96d5e"><code>f2bfab9</code></a>
Updated dependencies</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/9e40207bb6e1218948721de87591b38ce6c497cd"><code>9e40207</code></a>
Updated dependencies</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/a2cb35d4c5da25a90cb746e6b06a0c5ee7096b4b"><code>a2cb35d</code></a>
Improved error handling on social plugin (<a
href="https://github.com/squidfunk/mkdocs-material/issues/6818">#6818</a>)</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/abfac1a93e4cfc13924c48837cfc45dc724551f6"><code>abfac1a</code></a>
Switched to Babel's <code>format_datetime</code> to allow for time in
formatted dates (#...</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/01b2dd17e3e8d86b70ef8b9ae94096c47034ecc8"><code>01b2dd1</code></a>
Updated Russian translations</li>
<li><a
href="https://github.com/squidfunk/mkdocs-material/commit/ad7233640f2c679b7f149def57c96e1ec12b9ad9"><code>ad72336</code></a>
Fixed social plugin Google Fonts integration</li>
<li>Additional commits viewable in <a
href="https://github.com/squidfunk/mkdocs-material/compare/9.5.12...9.5.16">compare
view</a></li>
</ul>
</details>
<br />

Updates `mypy` from 1.8.0 to 1.9.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python/mypy/blob/master/CHANGELOG.md">mypy's
changelog</a>.</em></p>
<blockquote>
<h1>Mypy Release Notes</h1>
<h2>Mypy 1.9</h2>
<p>We’ve just uploaded mypy 1.9 to the Python Package Index (<a
href="https://pypi.org/project/mypy/">PyPI</a>). Mypy is a static type
checker for Python. This release includes new features, performance
improvements and bug fixes. You can install it as follows:</p>
<pre><code>python3 -m pip install -U mypy
</code></pre>
<p>You can read the full documentation for this release on <a
href="http://mypy.readthedocs.io">Read the Docs</a>.</p>
<h4>Breaking Changes</h4>
<p>Because the version of typeshed we use in mypy 1.9 doesn't support
3.7, neither does mypy 1.9. (Jared Hance, PR <a
href="https://github.com/python/mypy/pull/16883">16883</a>)</p>
<p>We are planning to enable
<a
href="https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-local-partial-types">local
partial types</a> (enabled via the
<code>--local-partial-types</code> flag) later this year by default.
This change
was announced years ago, but now it's finally happening. This is a
major backward-incompatible change, so we'll probably include it as
part of the upcoming mypy 2.0 release. This makes daemon and
non-daemon mypy runs have the same behavior by default.</p>
<p>Local partial types can also be enabled in the mypy config file:</p>
<pre><code>local_partial_types = True
</code></pre>
<p>We are looking at providing a tool to make it easier to migrate
projects to use <code>--local-partial-types</code>, but it's not yet
clear whether
this is practical. The migration usually involves adding some
explicit type annotations to module-level and class-level variables.</p>
<h4>Basic Support for Type Parameter Defaults (PEP 696)</h4>
<p>This release contains new experimental support for type parameter
defaults (<a href="https://peps.python.org/pep-0696">PEP 696</a>).
Please try it
out! This feature was contributed by Marc Mueller.</p>
<p>Since this feature will be officially introduced in the next Python
feature release (3.13), you will need to import <code>TypeVar</code>,
<code>ParamSpec</code>
or <code>TypeVarTuple</code> from <code>typing_extensions</code> to use
defaults for now.</p>
<p>This example adapted from the PEP defines a default for
<code>BotT</code>:</p>
<pre lang="python"><code>from typing import Generic
from typing_extensions import TypeVar
<p>class Bot: ...</p>
<p>BotT = TypeVar(&quot;BotT&quot;, bound=Bot, default=Bot)
&lt;/tr&gt;&lt;/table&gt;
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python/mypy/commit/5ff46f8b3706d005fabab2227ec84476d605bfd4"><code>5ff46f8</code></a>
Remove +dev.</li>
<li><a
href="https://github.com/python/mypy/commit/155909ad1bde747d89fcd091621d7cd9b1e15818"><code>155909a</code></a>
[Release 1.9] Unsupport targetting 3.7. (<a
href="https://github.com/python/mypy/issues/16883">#16883</a>)
(<a
href="https://github.com/python/mypy/issues/16900">#16900</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/6615cabe57c661114d0ed44784f67301619faadf"><code>6615cab</code></a>
[Release 1.9] Stubtest: ignore a new protocol dunder (<a
href="https://github.com/python/mypy/issues/16895">#16895</a>)
(<a
href="https://github.com/python/mypy/issues/16899">#16899</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/b956e6a57c4dd36d670097a3eccf7dc092348fec"><code>b956e6a</code></a>
stubtest: Private parameters can be omitted (<a
href="https://github.com/python/mypy/issues/16507">#16507</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/ede0b200a10186a095378516d840389f8da4edd4"><code>ede0b20</code></a>
Bump ruff to 0.2.0 (<a
href="https://github.com/python/mypy/issues/16870">#16870</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/7bdd61f2d89ecd2cee4ebe6eb2375a72b29f0b10"><code>7bdd61f</code></a>
stubgen: Fix crash on star unpack of TypeVarTuple (<a
href="https://github.com/python/mypy/issues/16869">#16869</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/8c2ef9dde8aa803e04038427ad84f09664d9d93f"><code>8c2ef9d</code></a>
Update hashes in sync-typeshed.py following recent typeshed sync</li>
<li><a
href="https://github.com/python/mypy/commit/0dd4b6f7576be3d3857fecefb298decdf0711ac7"><code>0dd4b6f</code></a>
Revert use of <code>ParamSpec</code> for
<code>functools.wraps</code></li>
<li><a
href="https://github.com/python/mypy/commit/dd12a2d810f2bbe7a8686674397043b18575480f"><code>dd12a2d</code></a>
Revert typeshed ctypes change</li>
<li><a
href="https://github.com/python/mypy/commit/d132999ba631b332d0684173897e5947591f4acc"><code>d132999</code></a>
Revert sum literal integer change (<a
href="https://github.com/python/mypy/issues/13961">#13961</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/python/mypy/compare/v1.8.0...1.9.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `types-markdown` from 3.5.0.20240129 to 3.6.0.20240316
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/python/typeshed/commits">compare view</a></li>
</ul>
</details>
<br />

Updates `types-python-dateutil` from 2.8.19.20240311 to 2.9.0.20240316
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/python/typeshed/commits">compare view</a></li>
</ul>
</details>
<br />

Updates `uv` from 0.1.14 to 0.1.26
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/uv/releases">uv's
releases</a>.</em></p>
<blockquote>
<h2>0.1.26</h2>
<h2>Release Notes</h2>
<h3>Bug fixes</h3>
<ul>
<li>Bump simple cache version (<a
href="https://github.com/astral-sh/uv/pull/2712">#2712</a>)</li>
</ul>
<h2>Install uv 0.1.26</h2>
<h3>Install prebuilt binaries via shell script</h3>
<pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/astral-sh/uv/releases/download/0.1.26/uv-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<pre lang="sh"><code>powershell -c &quot;irm
https://github.com/astral-sh/uv/releases/download/0.1.26/uv-installer.ps1
| iex&quot;
</code></pre>
<h2>Download uv 0.1.26</h2>
<table>
<thead>
<tr>
<th>File</th>
<th>Platform</th>
<th>Checksum</th>
</tr>
</thead>
<tbody>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-apple-darwin.tar.gz">uv-aarch64-apple-darwin.tar.gz</a></td>
<td>Apple Silicon macOS</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-apple-darwin.tar.gz">uv-x86_64-apple-darwin.tar.gz</a></td>
<td>Intel macOS</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-pc-windows-msvc.zip">uv-i686-pc-windows-msvc.zip</a></td>
<td>x86 Windows</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-pc-windows-msvc.zip">uv-x86_64-pc-windows-msvc.zip</a></td>
<td>x64 Windows</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-unknown-linux-gnu.tar.gz">uv-aarch64-unknown-linux-gnu.tar.gz</a></td>
<td>ARM64 Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-unknown-linux-gnu.tar.gz">uv-i686-unknown-linux-gnu.tar.gz</a></td>
<td>x86 Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-powerpc64-unknown-linux-gnu.tar.gz">uv-powerpc64-unknown-linux-gnu.tar.gz</a></td>
<td>PPC64 Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-powerpc64le-unknown-linux-gnu.tar.gz">uv-powerpc64le-unknown-linux-gnu.tar.gz</a></td>
<td>PPC64LE Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-s390x-unknown-linux-gnu.tar.gz">uv-s390x-unknown-linux-gnu.tar.gz</a></td>
<td>S390x Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-s390x-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-unknown-linux-gnu.tar.gz">uv-x86_64-unknown-linux-gnu.tar.gz</a></td>
<td>x64 Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-armv7-unknown-linux-gnueabihf.tar.gz">uv-armv7-unknown-linux-gnueabihf.tar.gz</a></td>
<td>ARMv7 Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-unknown-linux-musl.tar.gz">uv-aarch64-unknown-linux-musl.tar.gz</a></td>
<td>ARM64 MUSL Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-aarch64-unknown-linux-musl.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-unknown-linux-musl.tar.gz">uv-i686-unknown-linux-musl.tar.gz</a></td>
<td>x86 MUSL Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-i686-unknown-linux-musl.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-unknown-linux-musl.tar.gz">uv-x86_64-unknown-linux-musl.tar.gz</a></td>
<td>x64 MUSL Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-x86_64-unknown-linux-musl.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-arm-unknown-linux-musleabihf.tar.gz">uv-arm-unknown-linux-musleabihf.tar.gz</a></td>
<td>ARMv6 MUSL Linux (Hardfloat)</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-arm-unknown-linux-musleabihf.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-armv7-unknown-linux-musleabihf.tar.gz">uv-armv7-unknown-linux-musleabihf.tar.gz</a></td>
<td>ARMv7 MUSL Linux</td>
<td><a
href="https://github.com/astral-sh/uv/releases/download/0.1.26/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256">checksum</a></td>
</tr>
</tbody>
</table>
<h2>0.1.25</h2>
<h2>Release Notes</h2>
<h3>Breaking changes</h3>
<ul>
<li>Limit overrides and constraints to <code>requirements.txt</code>
format (<a
href="https://github.com/astral-sh/uv/pull/2632">#2632</a>)</li>
</ul>
<h3>Enhancements</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/uv/blob/main/CHANGELOG.md">uv's
changelog</a>.</em></p>
<blockquote>
<h2>0.1.26</h2>
<h3>Bug fixes</h3>
<ul>
<li>Bump simple cache version (<a
href="https://github.com/astral-sh/uv/pull/2712">#2712</a>)</li>
</ul>
<h2>0.1.25</h2>
<h3>Breaking changes</h3>
<ul>
<li>Limit overrides and constraints to <code>requirements.txt</code>
format (<a
href="https://github.com/astral-sh/uv/pull/2632">#2632</a>)</li>
</ul>
<h3>Enhancements</h3>
<ul>
<li>Accept <code>setup.py</code> and <code>setup.cfg</code> files in
compile (<a
href="https://github.com/astral-sh/uv/pull/2634">#2634</a>)</li>
<li>Add <code>--no-binary</code> and <code>--only-binary</code> support
to <code>requirements.txt</code> (<a
href="https://github.com/astral-sh/uv/pull/2680">#2680</a>)</li>
<li>Allow prereleases, locals, and URLs in non-editable path
requirements (<a
href="https://github.com/astral-sh/uv/pull/2671">#2671</a>)</li>
<li>Use PEP 517 to extract dynamic <code>pyproject.toml</code> metadata
(<a
href="https://github.com/astral-sh/uv/pull/2633">#2633</a>)</li>
<li>Add <code>Editable project location</code> and
<code>Required-by</code> to <code>pip show</code> (<a
href="https://github.com/astral-sh/uv/pull/2589">#2589</a>)</li>
<li>Avoid <code>prepare_metadata_for_build_wheel</code> calls for Hatch
packages with dynamic dependencies (<a
href="https://github.com/astral-sh/uv/pull/2645">#2645</a>)</li>
<li>Fall back to PEP 517 hooks for non-compliant PEP 621 metadata (<a
href="https://github.com/astral-sh/uv/pull/2662">#2662</a>)</li>
<li>Support <code>file://localhost/</code> schemes (<a
href="https://github.com/astral-sh/uv/pull/2657">#2657</a>)</li>
<li>Use normal resolver in <code>pip sync</code> (<a
href="https://github.com/astral-sh/uv/pull/2696">#2696</a>)</li>
</ul>
<h3>CLI</h3>
<ul>
<li>Disallow <code>pyproject.toml</code> from <code>pip uninstall
-r</code> (<a
href="https://github.com/astral-sh/uv/pull/2663">#2663</a>)</li>
<li>Unhide <code>--emit-index-url</code> and
<code>--emit-find-links</code> (<a
href="https://github.com/astral-sh/uv/pull/2691">#2691</a>)</li>
<li>Use dense formatting for requirement version specifiers in
diagnostics (<a
href="https://github.com/astral-sh/uv/pull/2601">#2601</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Add an in-memory cache for Git references (<a
href="https://github.com/astral-sh/uv/pull/2682">#2682</a>)</li>
<li>Do not force-recompile <code>.pyc</code> files (<a
href="https://github.com/astral-sh/uv/pull/2642">#2642</a>)</li>
<li>Read package metadata from <code>pyproject.toml</code> when it is
statically defined (<a
href="https://github.com/astral-sh/uv/pull/2676">#2676</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Don't error on multiple matching index URLs (<a
href="https://github.com/astral-sh/uv/pull/2627">#2627</a>)</li>
<li>Extract local versions from direct URL requirements (<a
href="https://github.com/astral-sh/uv/pull/2624">#2624</a>)</li>
<li>Respect <code>--no-index</code> with <code>--find-links</code> in
<code>pip sync</code> (<a
href="https://github.com/astral-sh/uv/pull/2692">#2692</a>)</li>
<li>Use <code>Scripts</code> folder for virtualenv activation prompt (<a
href="https://github.com/astral-sh/uv/pull/2690">#2690</a>)</li>
</ul>
<h2>0.1.24</h2>
<h3>Breaking changes</h3>
<ul>
<li><code>uv pip uninstall</code> no longer supports specifying targets
with the <code>-e</code> / <code>--editable</code> flag (<a
href="https://github.com/astral-sh/uv/pull/2577">#2577</a>)</li>
</ul>
<h3>Enhancements</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/uv/commit/7b685a8158f0e444526732d25667aa6a7bc418cf"><code>7b685a8</code></a>
uv-cache: bump built-wheels cache version (<a
href="https://github.com/astral-sh/uv/issues/2715">#2715</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/ffa1b0117690190ec18c8c3301b6af2d3f1882d5"><code>ffa1b01</code></a>
Bump version to 0.1.26 (<a
href="https://github.com/astral-sh/uv/issues/2713">#2713</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/c72d3d73d5649d96fd5d8ca47e38c11219756fe7"><code>c72d3d7</code></a>
uv-cache: bump simple cache version (<a
href="https://github.com/astral-sh/uv/issues/2712">#2712</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/4e59bfd16e8a0465fd25fab7d0553e2da05f5fda"><code>4e59bfd</code></a>
Bump version to 0.1.25 (<a
href="https://github.com/astral-sh/uv/issues/2709">#2709</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/f8f7f848f5d9e6a89fce79559f52880b9c7a212f"><code>f8f7f84</code></a>
Remove <code>Tags</code> from <code>tracing</code> (<a
href="https://github.com/astral-sh/uv/issues/2704">#2704</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/4cc91cc6bb4ed158048d3dcdc0ac5a10c5b22a6b"><code>4cc91cc</code></a>
Add convenience methods to <code>Manifest</code> to iterate over
requirements (<a
href="https://github.com/astral-sh/uv/issues/2701">#2701</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/b6ab919945bea94210d07de92bcb17c3fd344523"><code>b6ab919</code></a>
Make tags non-required for fetching wheel metadata (<a
href="https://github.com/astral-sh/uv/issues/2700">#2700</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/cf3093283100ef7ff916ce2b7e9cc0061adb2886"><code>cf30932</code></a>
Allow prereleases, locals, and URLs in non-editable path requirements
(<a
href="https://github.com/astral-sh/uv/issues/2671">#2671</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/4b69ad428125208aedfd27630f559b24c65e7e5b"><code>4b69ad4</code></a>
Remove some unused dependencies (<a
href="https://github.com/astral-sh/uv/issues/2698">#2698</a>)</li>
<li><a
href="https://github.com/astral-sh/uv/commit/f8fa887c0b65ec437051b6f2f574272132af6139"><code>f8fa887</code></a>
Use <code>Resolver</code> in <code>pip sync</code> (<a
href="https://github.com/astral-sh/uv/issues/2696">#2696</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/uv/compare/0.1.14...0.1.26">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest` from 8.0.2 to 8.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest/releases">pytest's
releases</a>.</em></p>
<blockquote>
<h2>8.1.1</h2>
<h1>pytest 8.1.1 (2024-03-08)</h1>
<p>::: {.note}
::: {.title}
Note
:::</p>
<p>This release is not a usual bug fix release -- it contains features
and improvements, being a follow up
to <code>8.1.0</code>, which has been yanked from PyPI.
:::</p>
<h2>Features</h2>
<ul>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11475">#11475</a>:
Added the new <code>consider_namespace_packages</code>{.interpreted-text
role=&quot;confval&quot;} configuration option, defaulting to
<code>False</code>.</p>
<p>If set to <code>True</code>, pytest will attempt to identify modules
that are part of <a
href="https://packaging.python.org/en/latest/guides/packaging-namespace-packages">namespace
packages</a> when importing modules.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11653">#11653</a>:
Added the new <code>verbosity_test_cases</code>{.interpreted-text
role=&quot;confval&quot;} configuration option for fine-grained control
of test execution verbosity.
See <code>Fine-grained verbosity
&lt;pytest.fine_grained_verbosity&gt;</code>{.interpreted-text
role=&quot;ref&quot;} for more details.</p>
</li>
</ul>
<h2>Improvements</h2>
<ul>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/10865">#10865</a>:
<code>pytest.warns</code>{.interpreted-text role=&quot;func&quot;} now
validates that <code>warnings.warn</code>{.interpreted-text
role=&quot;func&quot;} 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
<code>warnings.filterwarnings</code>{.interpreted-text
role=&quot;func&quot;} is used to filter those warnings (see [CPython <a
href="https://github.com/pytest-dev/pytest/issues/103577">#103577</a>](<a
href="https://github.com/python/cpython/issues/103577">python/cpython#103577</a>)
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.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11311">#11311</a>:
When using <code>--override-ini</code> for paths in invocations without
a configuration file defined, the current working directory is used
as the relative directory.</p>
<p>Previoulsy this would raise an
<code>AssertionError</code>{.interpreted-text
role=&quot;class&quot;}.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11475">#11475</a>:
<code>--import-mode=importlib
&lt;import-mode-importlib&gt;</code>{.interpreted-text
role=&quot;ref&quot;} now tries to import modules using the standard
import mechanism (but still without changing
:py<code>sys.path</code>{.interpreted-text role=&quot;data&quot;}),
falling back to importing modules directly only if that fails.</p>
<p>This means that installed packages will be imported under their
canonical name if possible first, for example
<code>app.core.models</code>, instead of having the module name always
be derived from their path (for example
<code>.env310.lib.site_packages.app.core.models</code>).</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11801">#11801</a>:
Added the <code>iter_parents()
&lt;_pytest.nodes.Node.iter_parents&gt;</code>{.interpreted-text
role=&quot;func&quot;} helper method on nodes.
It is similar to <code>listchain
&lt;_pytest.nodes.Node.listchain&gt;</code>{.interpreted-text
role=&quot;func&quot;}, but goes from bottom to top, and returns an
iterator, not a list.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11850">#11850</a>:
Added support for <code>sys.last_exc</code>{.interpreted-text
role=&quot;data&quot;} for post-mortem debugging on Python&gt;=3.12.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11962">#11962</a>:
In case no other suitable candidates for configuration file are found, a
<code>pyproject.toml</code> (even without a
<code>[tool.pytest.ini_options]</code> table) will be considered as the
configuration file and define the <code>rootdir</code>.</p>
</li>
<li>
<p><a
href="https://github.com/pytest-dev/pytest/issues/11978">#11978</a>:
Add <code>--log-file-mode</code> option to the logging plugin, enabling
appending to log-files. This option accepts either
<code>&quot;w&quot;</code> or <code>&quot;a&quot;</code> and defaults to
<code>&quot;w&quot;</code>.</p>
<p>Previously, the mode was hard-coded to be <code>&quot;w&quot;</code>
which truncates the file before logging.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest/commit/81653ee385f4c62ee7e64502a7b7530096553115"><code>81653ee</code></a>
Adjust changelog manually for 8.1.1</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/e60b4b9ed80f761e3a51868a01338911a567b093"><code>e60b4b9</code></a>
Prepare release version 8.1.1</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/15fbe57c44fed6737f5c6dad99cf4437b6755a6c"><code>15fbe57</code></a>
[8.1.x] Revert legacy path removals (<a
href="https://github.com/pytest-dev/pytest/issues/12093">#12093</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/86c3aab005a98de7e12ee5e37782837f5db70ac3"><code>86c3aab</code></a>
[8.1.x] Do not import duplicated modules with --importmode=importlib (<a
href="https://github.com/pytest-dev/pytest/issues/12077">#12077</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/5b82b0cd20c3adcc21f34ae30c595c7355a87e23"><code>5b82b0c</code></a>
[8.1.x] Yank version 8.1.0 (<a
href="https://github.com/pytest-dev/pytest/issues/12076">#12076</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/0a536810dc5f51dac99bdb90dde06704b5aa034e"><code>0a53681</code></a>
Merge pull request <a
href="https://github.com/pytest-dev/pytest/issues/12054">#12054</a>
from pytest-dev/release-8.1.0</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/b9a167f9bbbd6eda4f0360c5bf5b7f5af50f2bc4"><code>b9a167f</code></a>
Prepare release version 8.1.0</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/00043f7f1047b29fdaeb18e169fe9d6146988cb8"><code>00043f7</code></a>
Merge pull request <a
href="https://github.com/pytest-dev/pytest/issues/12038">#12038</a>
from bluetech/fixtures-rm-arg2index</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/f4e10251a4a003495b5228cea421d4de5fa0ce89"><code>f4e1025</code></a>
Merge pull request <a
href="https://github.com/pytest-dev/pytest/issues/12048">#12048</a>
from bluetech/fixture-teardown-excgroup</li>
<li><a
href="https://github.com/pytest-dev/pytest/commit/43492f5707b38dab9b62dfb829bb41a13579629f"><code>43492f5</code></a>
Merge pull request <a
href="https://github.com/pytest-dev/pytest/issues/12051">#12051</a>
from jakkdl/test_debugging_pythonbreakpoint</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest/compare/8.0.2...8.1.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-mock` from 3.12.0 to 3.14.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-mock/releases">pytest-mock's
releases</a>.</em></p>
<blockquote>
<h2>v3.14.0</h2>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-mock/pull/415">#415</a>:
<code>MockType</code> and <code>AsyncMockType</code> can be imported
from <code>pytest_mock</code> for type annotation purposes.</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/issues/420">#420</a>:
Fixed a regression which would cause <code>mocker.patch.object</code> to
not being properly cleared between tests.</li>
</ul>
<h2>v3.13.0</h2>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-mock/pull/417">#417</a>:
<code>spy</code> now has <code>spy_return_list</code>, which is a list
containing all the values returned by the spied function.</li>
<li><code>pytest-mock</code> now requires
<code>pytest&gt;=6.2.5</code>.</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/pull/410">#410</a>:
pytest-mock's <code>setup.py</code> file is removed.
If you relied on this file, e.g. to install pytest using <code>setup.py
install</code>,
please see <a
href="https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html#summary">Why
you shouldn't invoke setup.py directly</a> for alternatives.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst">pytest-mock's
changelog</a>.</em></p>
<blockquote>
<h2>3.14.0 (2024-03-21)</h2>
<ul>
<li>
<p><code>[#415](https://github.com/pytest-dev/pytest-mock/issues/415)
&lt;https://github.com/pytest-dev/pytest-mock/pull/415&gt;</code>_:
<code>MockType</code> and <code>AsyncMockType</code> can be imported
from <code>pytest_mock</code> for type annotation purposes.</p>
</li>
<li>
<p><code>[#420](https://github.com/pytest-dev/pytest-mock/issues/420)
&lt;https://github.com/pytest-dev/pytest-mock/issues/420&gt;</code>_:
Fixed a regression which would cause <code>mocker.patch.object</code> to
not being properly cleared between tests.</p>
</li>
</ul>
<h2>3.13.0 (2024-03-21)</h2>
<ul>
<li><code>[#417](https://github.com/pytest-dev/pytest-mock/issues/417)
&lt;https://github.com/pytest-dev/pytest-mock/pull/417&gt;</code>_:
<code>spy</code> now has <code>spy_return_list</code>, which is a list
containing all the values returned by the spied function.</li>
<li><code>pytest-mock</code> now requires
<code>pytest&gt;=6.2.5</code>.</li>
<li><code>[#410](https://github.com/pytest-dev/pytest-mock/issues/410)
&lt;https://github.com/pytest-dev/pytest-mock/pull/410&gt;</code><em>:
pytest-mock's <code>setup.py</code> file is removed.
If you relied on this file, e.g. to install pytest using <code>setup.py
install</code>,
please see <code>Why you shouldn't invoke setup.py directly
&lt;https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html#summary&gt;</code></em>
for alternatives.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/8733134b6194395e9cd3c745adcc9a9c09b0279e"><code>8733134</code></a>
Update CHANGELOG for 3.14.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/5257e3c0df0a18bca4028daa9e6d2d91870ff576"><code>5257e3c</code></a>
Refactor MockCache to have a narrow interface</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/4faf92ae233afadac3831ab570531e540dc87830"><code>4faf92a</code></a>
Fix regression with mocker.patch not being undone correctly</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/6bd8712a14a1a11d348354318fdbad3fd9bbdb78"><code>6bd8712</code></a>
Drop pre-Python 3.8 support code</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/366966bff1e3ca2e1455d704dd59991da5593877"><code>366966b</code></a>
Export <code>MockType</code>/<code>AsyncMockType</code> for type
annotations (<a
href="https://github.com/pytest-dev/pytest-mock/issues/415">#415</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/852116b0af33db27fe595847c091631dcf059a1c"><code>852116b</code></a>
Merge pull request <a
href="https://github.com/pytest-dev/pytest-mock/issues/418">#418</a>
from pytest-dev/release-3.13.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/ef9461b8b5bdcdd416841b986cf4e1d336c84266"><code>ef9461b</code></a>
Add instructions on how to start deploy from command-line</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/5b9d2858f507e04cc97a3c206f55d7d5505ae71c"><code>5b9d285</code></a>
Release 3.13.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/6d5d6dc2274cea96b6919a4a2a6dc7a3394ef11d"><code>6d5d6dc</code></a>
Implement <code>spy_return_list</code> (<a
href="https://github.com/pytest-dev/pytest-mock/issues/417">#417</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-mock/commit/dc28a0ec7b66372fbc6e0cf1bbe443ce7ca465cd"><code>dc28a0e</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://github.com/pytest-dev/pytest-mock/issues/416">#416</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-mock/compare/v3.12.0...v3.14.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-asyncio` from 0.23.5 to 0.23.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-asyncio/releases">pytest-asyncio's
releases</a>.</em></p>
<blockquote>
<h2>pytest-asyncio 0.23.6</h2>
<h1>0.23.6 (2024-03-19)</h1>
<ul>
<li>Fix compatibility with pytest 8.2 <a
href="https://github.com/pytest-dev/pytest-asyncio/pull/800">#800</a></li>
</ul>
<h2>Known issues</h2>
<p>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 <a
href="https://github.com/pytest-dev/pytest-asyncio/issues/706">#706</a>).
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.</p>
<h2>pytest-asyncio 0.23.5.post1</h2>
<h1>0.23.5 (2024-02-09)</h1>
<ul>
<li>Declare compatibility with pytest 8 <a
href="https://github.com/pytest-dev/pytest-asyncio/issues/737">#737</a></li>
<li>Fix typing errors with recent versions of mypy <a
href="https://github.com/pytest-dev/pytest-asyncio/issues/769">#769</a></li>
<li>Prevent DeprecationWarning about internal use of
<code>asyncio.get_event_loop()</code> from affecting test cases <a
href="https://github.com/pytest-dev/pytest-asyncio/issues/757">#757</a></li>
</ul>
<h2>Known issues</h2>
<p>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 <a
href="https://github.com/pytest-dev/pytest-asyncio/issues/706">#706</a>).
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.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/c34da04b82153ce052109bad31ccdbc0be7938e1"><code>c34da04</code></a>
[docs] Mentioned pytest 8.2 compatibility fix in changelog.</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/143f745d279afc070cf5cf6144fbf34d960fae72"><code>143f745</code></a>
Fix compatibility with pytest 8.2 FixtureDef.unittest removal</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/13d4b79f7ff0d9d0ea70880b3276f85dea7f1f15"><code>13d4b79</code></a>
Remove unused function <code>_removesuffix</code></li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/cdd2c4906835b6f627d681fbee5d487554884e5f"><code>cdd2c49</code></a>
Use <code>FixtureRequest</code> instead of <code>SubRequest</code></li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/c3429fa4d72239be9b428342f0f1407e0840b9ec"><code>c3429fa</code></a>
Build(deps): Bump packaging from 23.2 to 24.0 in /dependencies/docs</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/5f2338dfc9f9b5ac2c27d3bef490fa3e2cd7c156"><code>5f2338d</code></a>
Build(deps): Bump pypa/gh-action-pypi-publish from 1.8.12 to 1.8.14</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/726c6e0f3c185f10d8a842bcd1d781de32a3b2f5"><code>726c6e0</code></a>
Build(deps): Bump coverage from 7.4.3 to 7.4.4 in
/dependencies/default</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/8bd8288709717165b352c7f2f207c8e4ef624a01"><code>8bd8288</code></a>
Build(deps): Bump pytest from 8.0.2 to 8.1.1 in
/dependencies/default</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/ef3b3477070d6a270e1bb2c1d438c64dba42724c"><code>ef3b347</code></a>
Build(deps): Bump packaging from 23.2 to 24.0 in
/dependencies/default</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/b22d84e1f0d53920352be4c66d1b6c7f7a9ce005"><code>b22d84e</code></a>
[docs] Fixes the example showing how to run all tests in a
session-scoped loop.</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.5...v0.23.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `time-machine` from 2.14.0 to 2.14.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst">time-machine's
changelog</a>.</em></p>
<blockquote>
<h2>2.14.1 (2024-03-22)</h2>
<ul>
<li>
<p>Fix segmentation fault when the first <code>travel()</code> call in a
process uses a <code>timedelta</code>.</p>
<p>Thanks to Marcin Sulikowski for the report in <code>Issue
[#431](https://github.com/adamchainz/time-machine/issues/431)
&lt;https://github.com/adamchainz/time-machine/issues/431&gt;</code>__.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/adamchainz/time-machine/commit/cc1716c669a6eba84f639a1c8653e58bc07374ee"><code>cc1716c</code></a>
Version 2.14.1</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/ee93b04d17c8b21ba78ac67c928e1efa07183282"><code>ee93b04</code></a>
Fix timedelta segmentation fault (<a
href="https://github.com/adamchainz/time-machine/issues/433">#433</a>)</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/8e28b9e74c3d6a50b7d6ec09a9e50903d4dc8bdd"><code>8e28b9e</code></a>
Add flake8-logging to Flake8 setup</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/825c7f1ec15f8ca57e378489f463e33d329a22ef"><code>825c7f1</code></a>
Drop Black target version</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/f151428adfe767aefa1194ea31d6244de7ee0316"><code>f151428</code></a>
GitHub Actions coverage summary</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/2bf3160377dc23f4aa5d5b385deb2a2705c03f4a"><code>2bf3160</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://github.com/adamchainz/time-machine/issues/430">#430</a>)</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/e03c83f66442e34049798d23cee1ec7a06aac55b"><code>e03c83f</code></a>
Upgrade requirements (<a
href="https://github.com/adamchainz/time-machine/issues/429">#429</a>)</li>
<li><a
href="https://github.com/adamchainz/time-machine/commit/627907904a8f4b797077e3f02a4a010e98fe41e4"><code>6279079</code></a>
[pre-commit.ci] pre-commit autoupdate (<a href=…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants