Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Python dependencies (major) (#69)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [anyio](https://togithub.com/agronholm/anyio) ([changelog](https://anyio.readthedocs.io/en/stable/versionhistory.html)) | `==3.7.1` -> `==4.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/anyio/4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/anyio/4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/anyio/3.7.1/4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/anyio/3.7.1/4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [certifi](https://togithub.com/certifi/python-certifi) | `==2023.11.17` -> `==2024.2.2` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/certifi/2024.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/certifi/2024.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/certifi/2023.11.17/2024.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/certifi/2023.11.17/2024.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [flake8](https://togithub.com/pycqa/flake8) ([changelog](https://flake8.pycqa.org/en/latest/release-notes/index.html)) | `5.0.4` -> `7.0.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/flake8/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/flake8/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/flake8/5.0.4/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/flake8/5.0.4/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [httpcore](https://togithub.com/encode/httpcore) | `==0.18.0` -> `==1.0.4` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/httpcore/1.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/httpcore/1.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/httpcore/0.18.0/1.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/httpcore/0.18.0/1.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pyOpenSSL](https://pyopenssl.org/) ([source](https://togithub.com/pyca/pyopenssl)) | `23.3.0` -> `24.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pyOpenSSL/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pyOpenSSL/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pyOpenSSL/23.3.0/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pyOpenSSL/23.3.0/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pytest](https://togithub.com/pytest-dev/pytest) ([changelog](https://docs.pytest.org/en/stable/changelog.html)) | `7.4.4` -> `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/7.4.4/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest/7.4.4/8.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pytest-cov](https://togithub.com/pytest-dev/pytest-cov) ([changelog](https://pytest-cov.readthedocs.io/en/latest/changelog.html)) | `4.1.0` -> `5.0.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest-cov/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest-cov/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest-cov/4.1.0/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest-cov/4.1.0/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>agronholm/anyio (anyio)</summary> ### [`v4.3.0`](https://togithub.com/agronholm/anyio/releases/tag/4.3.0) [Compare Source](https://togithub.com/agronholm/anyio/compare/4.2.0...4.3.0) - Added support for the Python 3.12 `walk_up` keyword argument in `anyio.Path.relative_to()` (PR by Colin Taylor) - Fixed passing `total_tokens` to `anyio.CapacityLimiter()` as a keyword argument not working on the `trio` backend ([#​515](https://togithub.com/agronholm/anyio/issues/515)) - Fixed `Process.aclose()` not performing the minimum level of necessary cleanup when cancelled. Previously: - Cancellation of `Process.aclose()` could leak an orphan process - Cancellation of `run_process()` could very briefly leak an orphan process. - Cancellation of `Process.aclose()` or `run_process()` on Trio could leave standard streams unclosed (PR by Ganden Schaffner) - Fixed `Process.stdin.aclose()`, `Process.stdout.aclose()`, and `Process.stderr.aclose()` not including a checkpoint on asyncio (PR by Ganden Schaffner) - Fixed documentation on how to provide your own typed attributes ### [`v4.2.0`](https://togithub.com/agronholm/anyio/releases/tag/4.2.0) [Compare Source](https://togithub.com/agronholm/anyio/compare/4.1.0...4.2.0) - Add support for `byte`-based paths in `connect_unix`, `create_unix_listeners`, `create_unix_datagram_socket`, and `create_connected_unix_datagram_socket`. (PR by Lura Skye) - Enabled the `Event` and `CapacityLimiter` classes to be instantiated outside an event loop thread - Broadly improved/fixed the type annotations. Among other things, many functions and methods that take variadic positional arguments now make use of PEP 646 `TypeVarTuple` to allow the positional arguments to be validated by static type checkers. These changes affected numerous methods and functions, including: - `anyio.run()` - `TaskGroup.start_soon()` - `anyio.from_thread.run()` - `anyio.from_thread.run_sync()` - `anyio.to_thread.run_sync()` - `anyio.to_process.run_sync()` - `BlockingPortal.call()` - `BlockingPortal.start_task_soon()` - `BlockingPortal.start_task()` (also resolves [#​560](https://togithub.com/agronholm/anyio/issues/560)) - Fixed various type annotations of `anyio.Path` to match Typeshed: - `anyio.Path.__lt__()` - `anyio.Path.__le__()` - `anyio.Path.__gt__()` - `anyio.Path.__ge__()` - `anyio.Path.__truediv__()` - `anyio.Path.__rtruediv__()` - `anyio.Path.hardlink_to()` - `anyio.Path.samefile()` - `anyio.Path.symlink_to()` - `anyio.Path.with_segments()` (PR by Ganden Schaffner) - Fixed adjusting the total number of tokens in a `CapacityLimiter` on asyncio failing to wake up tasks waiting to acquire the limiter in certain edge cases (fixed with help from Egor Blagov) - Fixed `loop_factory` and `use_uvloop` options not being used on the asyncio backend ([#​643](https://togithub.com/agronholm/anyio/issues/643)) - Fixed cancellation propagating on asyncio from a task group to child tasks if the task hosting the task group is in a shielded cancel scope ([#​642](https://togithub.com/agronholm/anyio/issues/642)) ### [`v4.1.0`](https://togithub.com/agronholm/anyio/releases/tag/4.1.0) [Compare Source](https://togithub.com/agronholm/anyio/compare/4.0.0...4.1.0) - Adapted to API changes made in Trio v0.23: - Call `trio.to_thread.run_sync()` using the `abandon_on_cancel` keyword argument instead of `cancellable` - Removed a checkpoint when exiting a task group - Renamed the `cancellable` argument in `anyio.to_thread.run_sync()` to `abandon_on_cancel` (and deprecated the old parameter name) - Bumped minimum version of Trio to v0.23 - Added support for voluntary thread cancellation via `anyio.from_thread.check_cancelled()` - Bumped minimum version of trio to v0.23 - Exposed the `ResourceGuard` class in the public API ([#​627](https://togithub.com/agronholm/anyio/issues/627)) - Fixed `RuntimeError: Runner is closed` when running higher-scoped async generator fixtures in some cases ([#​619](https://togithub.com/agronholm/anyio/issues/619)) - Fixed discrepancy between `asyncio` and `trio` where reraising a cancellation exception in an `except*` block would incorrectly bubble out of its cancel scope ([#​634](https://togithub.com/agronholm/anyio/issues/634)) ### [`v4.0.0`](https://togithub.com/agronholm/anyio/releases/tag/4.0.0) [Compare Source](https://togithub.com/agronholm/anyio/compare/3.7.1...4.0.0) - **BACKWARDS INCOMPATIBLE** Replaced AnyIO's own `ExceptionGroup` class with the PEP 654 `BaseExceptionGroup` and `ExceptionGroup` - **BACKWARDS INCOMPATIBLE** Changes to cancellation semantics: - Any exceptions raising out of a task groups are now nested inside an `ExceptionGroup` (or `BaseExceptionGroup` if one or more `BaseException` were included) - Fixed task group not raising a cancellation exception on asyncio at exit if no child tasks were spawned and an outer cancellation scope had been cancelled before - Ensured that exiting a `TaskGroup` always hits a yield point, regardless of whether there are running child tasks to be waited on - On asyncio, cancel scopes will defer cancelling tasks that are scheduled to resume with a finished future - On asyncio and Python 3.9/3.10, cancel scopes now only suppress cancellation exceptions if the cancel message matches the scope - Task groups on all backends now raise a single cancellation exception when an outer cancel scope is cancelled, and no exceptions other than cancellation exceptions are raised in the group - **BACKWARDS INCOMPATIBLE** Changes the pytest plugin to run all tests and fixtures in the same task, allowing fixtures to set context variables for tests and other fixtures - **BACKWARDS INCOMPATIBLE** Changed `anyio.Path.relative_to()` and `anyio.Path.is_relative_to()` to only accept one argument, as passing multiple arguments is deprecated as of Python 3.12 - **BACKWARDS INCOMPATIBLE** Dropped support for spawning tasks from old-style coroutine functions (`@asyncio.coroutine`) - **BACKWARDS INCOMPATIBLE** The `policy` option on the `asyncio` backend was changed to `loop_factory` to accommodate `asyncio.Runner` - Changed `anyio.run()` to use `asyncio.Runner` (or a back-ported version of it on Pythons older than 3.11) on the `asyncio` backend - Dropped support for Python 3.7 - Added support for Python 3.12 - Bumped minimum version of trio to v0.22 - Added the `anyio.Path.is_junction()` and `anyio.Path.walk()` methods - Added `create_unix_datagram_socket` and `create_connected_unix_datagram_socket` to create UNIX datagram sockets (PR by Jean Hominal) - Fixed `from_thread.run` and `from_thread.run_sync` not setting sniffio on asyncio. As a result: - Fixed `from_thread.run_sync` failing when used to call sniffio-dependent functions on asyncio - Fixed `from_thread.run` failing when used to call sniffio-dependent functions on asyncio from a thread running trio or curio - Fixed deadlock when using `from_thread.start_blocking_portal(backend="asyncio")` in a thread running trio or curio (PR by Ganden Schaffner) - Improved type annotations: - The `item_type` argument of `create_memory_object_stream` was deprecated. To indicate the item type handled by the stream, use `create_memory_object_stream[T_Item]()` instead. Type checking should no longer fail when annotating memory object streams with uninstantiable item types (PR by Ganden Schaffner) - Added the `CancelScope.cancelled_caught` property which tells users if the cancel scope suppressed a cancellation exception - Fixed `fail_after()` raising an unwarranted `TimeoutError` when the cancel scope was cancelled before reaching its deadline - Fixed `MemoryObjectReceiveStream.receive()` causing the receiving task on asyncio to remain in a cancelled state if the operation was cancelled after an item was queued to be received by the task (but before the task could actually receive the item) - Fixed `TaskGroup.start()` on asyncio not responding to cancellation from the outside - Fixed tasks started from `BlockingPortal` not notifying synchronous listeners (`concurrent.futures.wait()`) when they're cancelled - Removed unnecessary extra waiting cycle in `Event.wait()` on asyncio in the case where the event was not yet set - Fixed processes spawned by `anyio.to_process()` being "lost" as unusable to the process pool when processes that have idled over 5 minutes are pruned at part of the `to_process.run_sync()` call, leading to increased memory consumption (PR by Anael Gorfinkel) Changes since 4.0.0rc1: - Fixed the type annotation of `TaskGroup.start_soon()` to accept any awaitables (already in v3.7.0 but was missing from 4.0.0rc1) - Changed `CancelScope` to also consider the cancellation count (in addition to the cancel message) on asyncio to determine if a cancellation exception should be swallowed on scope exit, to combat issues where third party libraries catch the `CancelledError` and raise another, thus erasing the original cancel message - Worked around a [CPython bug](https://togithub.com/python/cpython/issues/108668) that caused `TLSListener.handle_handshake_error()` on asyncio to log `"NoneType: None"` instead of the error (PR by Ganden Schaffner) - Re-added the `item_type` argument to `create_memory_object_stream()` (but using it raises a deprecation warning and does nothing with regards to the static types of the returned streams) - Fixed processes spawned by `anyio.to_process()` being "lost" as unusable to the process pool when processes that have idled over 5 minutes are pruned at part of the `to_process.run_sync()` call, leading to increased memory consumption (PR by Anael Gorfinkel) </details> <details> <summary>certifi/python-certifi (certifi)</summary> ### [`v2024.2.2`](https://togithub.com/certifi/python-certifi/compare/2023.11.17...2024.02.02) [Compare Source](https://togithub.com/certifi/python-certifi/compare/2023.11.17...2024.02.02) </details> <details> <summary>pycqa/flake8 (flake8)</summary> ### [`v7.0.0`](https://togithub.com/pycqa/flake8/compare/6.1.0...7.0.0) [Compare Source](https://togithub.com/pycqa/flake8/compare/6.1.0...7.0.0) ### [`v6.1.0`](https://togithub.com/pycqa/flake8/compare/6.0.0...6.1.0) [Compare Source](https://togithub.com/pycqa/flake8/compare/6.0.0...6.1.0) ### [`v6.0.0`](https://togithub.com/pycqa/flake8/compare/5.0.4...6.0.0) [Compare Source](https://togithub.com/pycqa/flake8/compare/5.0.4...6.0.0) </details> <details> <summary>encode/httpcore (httpcore)</summary> ### [`v1.0.4`](https://togithub.com/encode/httpcore/blob/HEAD/CHANGELOG.md#104-February-21st-2024) [Compare Source](https://togithub.com/encode/httpcore/compare/1.0.3...1.0.4) - Add `target` request extension. ([#​888](https://togithub.com/encode/httpcore/issues/888)) - Fix support for connection `Upgrade` and `CONNECT` when some data in the stream has been read. ([#​882](https://togithub.com/encode/httpcore/issues/882)) ### [`v1.0.3`](https://togithub.com/encode/httpcore/blob/HEAD/CHANGELOG.md#103-February-13th-2024) [Compare Source](https://togithub.com/encode/httpcore/compare/1.0.2...1.0.3) - Fix support for async cancellations. ([#​880](https://togithub.com/encode/httpcore/issues/880)) - Fix trace extension when used with socks proxy. ([#​849](https://togithub.com/encode/httpcore/issues/849)) - Fix SSL context for connections using the "wss" scheme ([#​869](https://togithub.com/encode/httpcore/issues/869)) ### [`v1.0.2`](https://togithub.com/encode/httpcore/blob/HEAD/CHANGELOG.md#102-November-10th-2023) [Compare Source](https://togithub.com/encode/httpcore/compare/1.0.1...1.0.2) - Fix `float("inf")` timeouts in `Event.wait` function. ([#​846](https://togithub.com/encode/httpcore/issues/846)) ### [`v1.0.1`](https://togithub.com/encode/httpcore/blob/HEAD/CHANGELOG.md#101-November-3rd-2023) [Compare Source](https://togithub.com/encode/httpcore/compare/1.0.0...1.0.1) - Fix pool timeout to account for the total time spent retrying. ([#​823](https://togithub.com/encode/httpcore/issues/823)) - Raise a neater RuntimeError when the correct async deps are not installed. ([#​826](https://togithub.com/encode/httpcore/issues/826)) - Add support for synchronous TLS-in-TLS streams. ([#​840](https://togithub.com/encode/httpcore/issues/840)) ### [`v1.0.0`](https://togithub.com/encode/httpcore/blob/HEAD/CHANGELOG.md#100-October-6th-2023) [Compare Source](https://togithub.com/encode/httpcore/compare/0.18.0...1.0.0) From version 1.0 our async support is now optional, as the package has minimal dependencies by default. For async support use either `pip install 'httpcore[asyncio]'` or `pip install 'httpcore[trio]'`. The project versioning policy is now explicitly governed by SEMVER. See https://semver.org/. - Async support becomes fully optional. ([#​809](https://togithub.com/encode/httpcore/issues/809)) - Add support for Python 3.12. ([#​807](https://togithub.com/encode/httpcore/issues/807)) </details> <details> <summary>pyca/pyopenssl (pyOpenSSL)</summary> ### [`v24.1.0`](https://togithub.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst#2410-2024-03-09) [Compare Source](https://togithub.com/pyca/pyopenssl/compare/24.0.0...24.1.0) Backward-incompatible changes: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Removed the deprecated `OpenSSL.crypto.PKCS12` and `OpenSSL.crypto.NetscapeSPKI`. `OpenSSL.crypto.PKCS12` may be replaced by the [PKCS#12](https://togithub.com/PKCS/pyopenssl/issues/12) APIs in the `cryptography` package. Deprecations: ^^^^^^^^^^^^^ Changes: ^^^^^^^^ ### [`v24.0.0`](https://togithub.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst#2400-2024-01-22) [Compare Source](https://togithub.com/pyca/pyopenssl/compare/23.3.0...24.0.0) Backward-incompatible changes: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Deprecations: ^^^^^^^^^^^^^ Changes: ^^^^^^^^ - Added `OpenSSL.SSL.Connection.get_selected_srtp_profile` to determine which SRTP profile was negotiated. `#​1279 <https://github.com/pyca/pyopenssl/pull/1279>`\_. </details> <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 - [#​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. - [#​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 - [#​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 #​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. - [#​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"}. - [#​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`). - [#​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. - [#​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. - [#​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`. - [#​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. - [#​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 - [#​11475](https://togithub.com/pytest-dev/pytest/issues/11475): Fixed regression where `--importmode=importlib` would import non-test modules more than once. - [#​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. - [#​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. - [#​12014](https://togithub.com/pytest-dev/pytest/issues/12014): Fix the `stacklevel` used when warning about marks used on fixtures. - [#​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 - [#​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 - [#​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. - [#​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 [#​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 [#​12069](https://togithub.com/pytest-dev/pytest/issues/12069). ## Features - [#​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. - [#​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 - [#​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 #​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. - [#​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"}. - [#​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`). - [#​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. - [#​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. - [#​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`. - [#​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. - [#​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 - [#​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. - [#​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. - [#​12014](https://togithub.com/pytest-dev/pytest/issues/12014): Fix the `stacklevel` used when warning about marks used on fixtures. - [#​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 - [#​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 - [#​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 - [#​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`). - [#​11953](https://togithub.com/pytest-dev/pytest/issues/11953): Fix an `IndexError` crash raising from `getstatementrange_ast`. - [#​12021](https://togithub.com/pytest-dev/pytest/issues/12021): Reverted a fix to \[--maxfail]{.title-ref} handling in pytest 8.0.0 because it caused a regression in pytest-xdist whereby session fixture teardowns may get executed multiple times when the max-fails is reached. ### [`v8.0.1`](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.1) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/8.0.0...8.0.1) # pytest 8.0.1 (2024-02-16) ## Bug Fixes - [#​11875](https://togithub.com/pytest-dev/pytest/issues/11875): Correctly handle errors from `getpass.getuser`{.interpreted-text role="func"} in Python 3.13. - [#​11879](https://togithub.com/pytest-dev/pytest/issues/11879): Fix an edge case where `ExceptionInfo._stringify_exception` could crash `pytest.raises`{.interpreted-text role="func"}. - [#​11906](https://togithub.com/pytest-dev/pytest/issues/11906): Fix regression with `pytest.warns`{.interpreted-text role="func"} using custom warning subclasses which have more than one parameter in their \[\__init\_\_]{.title-ref}. - [#​11907](https://togithub.com/pytest-dev/pytest/issues/11907): Fix a regression in pytest 8.0.0 whereby calling `pytest.skip`{.interpreted-text role="func"} and similar control-flow exceptions within a `pytest.warns()`{.interpreted-text role="func"} block would get suppressed instead of propagating. - [#​11929](https://togithub.com/pytest-dev/pytest/issues/11929): Fix a regression in pytest 8.0.0 whereby autouse fixtures defined in a module get ignored by the doctests in the module. - [#​11937](https://togithub.com/pytest-dev/pytest/issues/11937): Fix a regression in pytest 8.0.0 whereby items would be collected in reverse order in some circumstances. ### [`v8.0.0`](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.0): pytest 8.0.0 (2024-01-27) [Compare Source](https://togithub.com/pytest-dev/pytest/compare/7.4.4...8.0.0) See [8.0.0rc1](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.0rc1) and [8.0.0rc2](https://togithub.com/pytest-dev/pytest/releases/tag/8.0.0rc2) for the full changes since pytest 7.4! #### Bug Fixes - [#​11842](https://togithub.com/pytest-dev/pytest/issues/11842): Properly escape the `reason` of a `skip <pytest.mark.skip ref>`{.interpreted-text role="ref"} mark when writing JUnit XML files. - [#​11861](https://togithub.com/pytest-dev/pytest/issues/11861): Avoid microsecond exceeds `1_000_000` when using `log-date-format` with `%f` specifier, which might cause the test suite to crash. </details> <details> <summary>pytest-dev/pytest-cov (pytest-cov)</summary> ### [`v5.0.0`](https://togithub.com/pytest-dev/pytest-cov/blob/HEAD/CHANGELOG.rst#500-2024-03-24) [Compare Source](https://togithub.com/pytest-dev/pytest-cov/compare/v4.1.0...v5.0.0) - Removed support for xdist rsync (now deprecated). Contributed by Matthias Reichenbach in `#​623 <https://github.com/pytest-dev/pytest-cov/pull/623>`\_. - Switched docs theme to Furo. - Various legacy Python cleanup and CI improvements. Contributed by Christian Clauss and Hugo van Kemenade in `#​630 <https://github.com/pytest-dev/pytest-cov/pull/630>`*, `#​631 <https://github.com/pytest-dev/pytest-cov/pull/631>`*, `#​632 <https://github.com/pytest-dev/pytest-cov/pull/632>`\_ and `#​633 <https://github.com/pytest-dev/pytest-cov/pull/633>`\_. - Added a `pyproject.toml` example in the docs. Contributed by Dawn James in `#​626 <https://github.com/pytest-dev/pytest-cov/pull/626>`\_. - Modernized project's pre-commit hooks to use ruff. Initial POC contributed by Christian Clauss in `#​584 <https://github.com/pytest-dev/pytest-cov/pull/584>`\_. </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 1am and before 2am on saturday" 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. 👻 **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/spark-k8s-toolkit-py). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNzMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- Loading branch information