charmcraft:CRAFT-2502/autoformat

Last commit made on 2024-03-19
Get this branch:
git clone -b CRAFT-2502/autoformat https://git.launchpad.net/charmcraft

Branch merges

Branch information

Name:
CRAFT-2502/autoformat
Repository:
lp:charmcraft

Recent commits

f439ea8... by Alex Lowe

style: autoformat even ignored ruff linters

556dc4f... by Alex Lowe

ci(spread): rebalance spread runners (#1611)

We have far more tests running on 22.04 than on 20.04.

f858294... by "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>

chore(deps): update dependency craft-providers to v1.23.1 (#1610)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| craft-providers | `==1.23.0` -> `==1.23.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/craft-providers/1.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/craft-providers/1.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/craft-providers/1.23.0/1.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/craft-providers/1.23.0/1.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### 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/canonical/charmcraft).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

dcf8692... by Alex Lowe

fix: move bundle extension to a function (#1608)

685b159... by Alex Lowe

build(deps): update requirements (#1607)

There were several more renovate updates, this just rolls them together.

a1d285c... by Alex Lowe

test(spread): move flaky parallel-build test to weeklies (#1600)

Workaround for #1332

d937f27... by "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>

chore(deps): update dependency python-dateutil to v2.9.0.post0 (#1602)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

<details>
<summary>dateutil/dateutil (python-dateutil)</summary>

###
[`v2.9.0.post0`](https://togithub.com/dateutil/dateutil/releases/tag/2.9.0.post0)

[Compare
Source](https://togithub.com/dateutil/dateutil/compare/2.9.0...2.9.0.post0)

### Version 2.9.0.post0 (2024-03-01)

#### Bugfixes

- Pinned `setuptools_scm` to `<8`, which should make the generated
`_version.py` file compatible with all supported versions of Python.

###
[`v2.9.0`](https://togithub.com/dateutil/dateutil/releases/tag/2.9.0)

[Compare
Source](https://togithub.com/dateutil/dateutil/compare/2.8.2...2.9.0)

### Version 2.9.0 (2024-02-29)

#### Data updates

- Updated tzdata version to 2024a. (gh pr
[#&#8203;1342](https://togithub.com/dateutil/dateutil/issues/1342))

#### Features

- Made all `dateutil` submodules lazily imported using [PEP
562](https://www.python.org/dev/peps/pep-0562/). On Python 3.7+, things
like `import dateutil; dateutil.tz.gettz("America/New_York")` will now
work without explicitly importing `dateutil.tz`, with the import
occurring behind the scenes on first use. The old behavior remains on
Python 3.6 and earlier. Fixed by Orson Adams. (gh issue
[#&#8203;771](https://togithub.com/dateutil/dateutil/issues/771), gh pr
[#&#8203;1007](https://togithub.com/dateutil/dateutil/issues/1007))

#### Bugfixes

- Removed a call to `datetime.utcfromtimestamp`, which is deprecated as
of Python 3.12. Reported by Hugo van Kemenade (gh pr
[#&#8203;1284](https://togithub.com/dateutil/dateutil/issues/1284)),
fixed by Thomas Grainger (gh pr
[#&#8203;1285](https://togithub.com/dateutil/dateutil/issues/1285)).

#### Documentation changes

- Added note into docs and tests where relativedelta would return last
day of the month only if the same day on a different month resolves to a
date that doesn't exist. Reported by
[@&#8203;hawkEye-01](https://togithub.com/hawkEye-01) (gh issue
[#&#8203;1167](https://togithub.com/dateutil/dateutil/issues/1167)).
Fixed by [@&#8203;Mifrill](https://togithub.com/Mifrill) (gh pr
[#&#8203;1168](https://togithub.com/dateutil/dateutil/issues/1168))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/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.

🔕 **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/canonical/charmcraft).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzguMSIsInVwZGF0ZWRJblZlciI6IjM3LjIzOC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

e12524a... by "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>

chore(deps): update dependency packaging to v24 (#1605)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

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

### [`v24.0`](https://togithub.com/pypa/packaging/releases/tag/24.0)

[Compare
Source](https://togithub.com/pypa/packaging/compare/23.2...24.0)

#### What's Changed

- Fix specifier matching when the specifier is long and has an epoch by
[@&#8203;SpecLad](https://togithub.com/SpecLad) in
[https://github.com/pypa/packaging/pull/712](https://togithub.com/pypa/packaging/pull/712)
- Clarify version split/join usage by
[@&#8203;uranusjr](https://togithub.com/uranusjr) in
[https://github.com/pypa/packaging/pull/725](https://togithub.com/pypa/packaging/pull/725)
- Default optional metadata values to None by
[@&#8203;dstufft](https://togithub.com/dstufft) in
[https://github.com/pypa/packaging/pull/734](https://togithub.com/pypa/packaging/pull/734)
- Stop using deprecated/removed keys by
[@&#8203;dstufft](https://togithub.com/dstufft) in
[https://github.com/pypa/packaging/pull/739](https://togithub.com/pypa/packaging/pull/739)
- Correctly use the ExceptionGroup shim only when needed by
[@&#8203;dstufft](https://togithub.com/dstufft) in
[https://github.com/pypa/packaging/pull/736](https://togithub.com/pypa/packaging/pull/736)
- Update CHANGELOG entry about `validate` kwarg by
[@&#8203;pradyunsg](https://togithub.com/pradyunsg) in
[https://github.com/pypa/packaging/pull/731](https://togithub.com/pypa/packaging/pull/731)
- Support --disable-gil builds (PEP 703) in packaging.tags by
[@&#8203;colesbury](https://togithub.com/colesbury) in
[https://github.com/pypa/packaging/pull/728](https://togithub.com/pypa/packaging/pull/728)
- Skip `test_glibc_version_string_ctypes_raise_oserror` if `ctypes` is
unavailable by [@&#8203;kevinchang96](https://togithub.com/kevinchang96)
in
[https://github.com/pypa/packaging/pull/741](https://togithub.com/pypa/packaging/pull/741)
- Enable CodeQL by [@&#8203;joycebrum](https://togithub.com/joycebrum)
in
[https://github.com/pypa/packaging/pull/743](https://togithub.com/pypa/packaging/pull/743)
- PEP 703: Rename `Py_NOGIL` to `Py_GIL_DISABLED` by
[@&#8203;hugovk](https://togithub.com/hugovk) in
[https://github.com/pypa/packaging/pull/747](https://togithub.com/pypa/packaging/pull/747)
- Replace PEP references with PUG links by
[@&#8203;jeanas](https://togithub.com/jeanas) in
[https://github.com/pypa/packaging/pull/750](https://togithub.com/pypa/packaging/pull/750)
- Remove coverage ignore for non-existent file by
[@&#8203;shenanigansd](https://togithub.com/shenanigansd) in
[https://github.com/pypa/packaging/pull/752](https://togithub.com/pypa/packaging/pull/752)
- Update URLs by
[@&#8203;DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos)
in
[https://github.com/pypa/packaging/pull/764](https://togithub.com/pypa/packaging/pull/764)
- Configure dependabot by
[@&#8203;joycebrum](https://togithub.com/joycebrum) in
[https://github.com/pypa/packaging/pull/757](https://togithub.com/pypa/packaging/pull/757)
- Hash pin github actions by
[@&#8203;joycebrum](https://togithub.com/joycebrum) in
[https://github.com/pypa/packaging/pull/758](https://togithub.com/pypa/packaging/pull/758)
- Apply some refurb suggestions by
[@&#8203;DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos)
in
[https://github.com/pypa/packaging/pull/763](https://togithub.com/pypa/packaging/pull/763)
- Appply some bugbear suggestions by
[@&#8203;DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos)
in
[https://github.com/pypa/packaging/pull/761](https://togithub.com/pypa/packaging/pull/761)
- Apply some ruff suggestions by
[@&#8203;DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos)
in
[https://github.com/pypa/packaging/pull/772](https://togithub.com/pypa/packaging/pull/772)
- Add riscv64 as a supported manylinux architecture by
[@&#8203;markdryan](https://togithub.com/markdryan) in
[https://github.com/pypa/packaging/pull/751](https://togithub.com/pypa/packaging/pull/751)

#### New Contributors

- [@&#8203;colesbury](https://togithub.com/colesbury) made their first
contribution in
[https://github.com/pypa/packaging/pull/728](https://togithub.com/pypa/packaging/pull/728)
- [@&#8203;kevinchang96](https://togithub.com/kevinchang96) made their
first contribution in
[https://github.com/pypa/packaging/pull/741](https://togithub.com/pypa/packaging/pull/741)
- [@&#8203;jeanas](https://togithub.com/jeanas) made their first
contribution in
[https://github.com/pypa/packaging/pull/750](https://togithub.com/pypa/packaging/pull/750)
- [@&#8203;shenanigansd](https://togithub.com/shenanigansd) made their
first contribution in
[https://github.com/pypa/packaging/pull/752](https://togithub.com/pypa/packaging/pull/752)
- [@&#8203;markdryan](https://togithub.com/markdryan) made their first
contribution in
[https://github.com/pypa/packaging/pull/751](https://togithub.com/pypa/packaging/pull/751)

**Full Changelog**:
https://github.com/pypa/packaging/compare/23.2...24.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/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.

🔕 **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/canonical/charmcraft).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzguMSIsInVwZGF0ZWRJblZlciI6IjM3LjIzOC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

f414390... by "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>

chore(deps): update development dependencies (non-major) (#1604)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [hypothesis](https://hypothesis.works)
([source](https://togithub.com/HypothesisWorks/hypothesis/tree/HEAD/hypothesis-python),
[changelog](https://togithub.com/HypothesisWorks/hypothesis/blob/master/hypothesis-python/docs/changes.rst))
| `==6.98.9` -> `==6.99.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/hypothesis/6.99.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/hypothesis/6.99.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/hypothesis/6.98.9/6.99.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/hypothesis/6.98.9/6.99.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest](https://togithub.com/pytest-dev/pytest)
([changelog](https://docs.pytest.org/en/stable/changelog.html)) |
`==8.0.1` -> `==8.1.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest/8.0.1/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest/8.0.1/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [types-Deprecated](https://togithub.com/python/typeshed)
([changelog](https://togithub.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/Deprecated.md))
| `==1.2.9.20240106` -> `==1.2.9.20240311` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/types-Deprecated/1.2.9.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/types-Deprecated/1.2.9.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/types-Deprecated/1.2.9.20240106/1.2.9.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/types-Deprecated/1.2.9.20240106/1.2.9.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [types-PyYAML](https://togithub.com/python/typeshed)
([changelog](https://togithub.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/PyYAML.md))
| `==6.0.12.12` -> `==6.0.12.20240311` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/types-PyYAML/6.0.12.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/types-PyYAML/6.0.12.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/types-PyYAML/6.0.12.12/6.0.12.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/types-PyYAML/6.0.12.12/6.0.12.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [types/pyright](https://togithub.com/RobertCraigie/pyright-python) |
`==1.1.352` -> `==1.1.353` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/types%2fpyright/1.1.353?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/types%2fpyright/1.1.353?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/types%2fpyright/1.1.352/1.1.353?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/types%2fpyright/1.1.352/1.1.353?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [types/types-requests](https://togithub.com/python/typeshed)
([changelog](https://togithub.com/typeshed-internal/stub_uploader/blob/main/data/changelogs/requests.md))
| `<2.31.0.7` -> `<2.31.0.20240312` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/types%2ftypes-requests/2.31.0.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/types%2ftypes-requests/2.31.0.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/types%2ftypes-requests/2.31.0.6/2.31.0.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/types%2ftypes-requests/2.31.0.6/2.31.0.20240311?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pytest-dev/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.

</details>

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

###
[`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)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/UTC,
Automerge - At any time (no schedule defined).

🚦 **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/charmcraft).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzguMSIsInVwZGF0ZWRJblZlciI6IjM3LjIzOC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

545b8db... by "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>

chore(deps): update bugfixes (#1601)

[![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.2` ->
`==7.4.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.4.2/7.4.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.4.2/7.4.3?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/)
|
| [importlib-metadata](https://togithub.com/python/importlib_metadata) |
`==7.0.1` -> `==7.0.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/importlib-metadata/7.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/importlib-metadata/7.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/importlib-metadata/7.0.1/7.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/importlib-metadata/7.0.1/7.0.2?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/)
|
| 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/)
|
| [setuptools](https://togithub.com/pypa/setuptools)
([changelog](https://setuptools.pypa.io/en/stable/history.html)) |
`==69.1.0` -> `==69.1.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/setuptools/69.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/setuptools/69.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/setuptools/69.1.0/69.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/setuptools/69.1.0/69.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`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:

</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>python/importlib_metadata (importlib-metadata)</summary>

###
[`v7.0.2`](https://togithub.com/python/importlib_metadata/compare/v7.0.1...v7.0.2)

[Compare
Source](https://togithub.com/python/importlib_metadata/compare/v7.0.1...v7.0.2)

</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>pypa/setuptools (setuptools)</summary>

###
[`v69.1.1`](https://togithub.com/pypa/setuptools/compare/v69.1.0...v69.1.1)

[Compare
Source](https://togithub.com/pypa/setuptools/compare/v69.1.0...v69.1.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/UTC,
Automerge - At any time (no schedule defined).

🚦 **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/charmcraft).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzguMSIsInVwZGF0ZWRJblZlciI6IjM3LjIzOC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>