Made all dateutil submodules lazily imported using PEP 562. 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 #771, gh pr #1007)
Bugfixes
Removed a call to datetime.utcfromtimestamp, which is deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh pr #1284), fixed by Thomas Grainger (gh pr #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 @hawkEye-01 (gh issue #1167). Fixed by @Mifrill (gh pr #1168)
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 #771, gh pr #1007)
Bugfixes
Removed a call to datetime.utcfromtimestamp, which is deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh pr #1284), fixed by Thomas Grainger (gh pr #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 @hawkEye-01 (gh issue #1167). Fixed by @Mifrill (gh pr #1168)
Commits
1ae8077 Merge pull request #1346 from pganssle/release_2.9.0.post0
[orm] [usecase] Added support for the PEP 695TypeAliasType construct as well as the
python 3.12 native type keyword to work with ORM Annotated Declarative
form when using these constructs to link to a PEP 593Annotated
container, allowing the resolution of the Annotated to proceed when
these constructs are used in a _orm.Mapped typing container.
[orm] [bug] Fixed Declarative issue where typing a relationship using
_orm.Relationship rather than _orm.Mapped would
inadvertently pull in the "dynamic" relationship loader strategy for that
attribute.
[orm] [bug] Fixed issue in ORM annotated declarative where using
_orm.mapped_column() with an _orm.mapped_column.index
or _orm.mapped_column.unique setting of False would be
overridden by an incoming Annotated element that featured that
parameter set to True, even though the immediate
_orm.mapped_column() element is more specific and should take
precedence. The logic to reconcile the booleans has been enhanced to
accommodate a local value of False as still taking precedence over an
incoming True value from the annotated element.
[orm] [bug] [regression] Fixed regression from version 2.0.28 caused by the fix for #11085
where the newer method of adjusting post-cache bound parameter values would
interefere with the implementation for the _orm.subqueryload() loader
option, which has some more legacy patterns in use internally, when
the additional loader criteria feature were used with this loader option.
[engine] [bug] Fixed issue in engine_insertmanyvalues feature where using a primary
key column with an "inline execute" default generator such as an explicit
Sequence with an explcit schema name, while at the same time
using the
_engine.Connection.execution_options.schema_translate_map
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
CVE-2024-21503.
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.
Stable style
Don't move comments along with delimiters, which could cause crashes (#4248)
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. (#4270)
Fix a bug where line-ranges exceeding the last code line would not work as expected
(#4273)
Performance
Fix catastrophic performance on docstrings that contain large numbers of leading tab
characters. This fixes
CVE-2024-21503.
(#4278)
Documentation
Note what happens when --check is used with --quiet (#4236)
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
CVE-2024-21503.
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.
Stable style
Don't move comments along with delimiters, which could cause crashes (#4248)
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. (#4270)
Fix a bug where line-ranges exceeding the last code line would not work as expected
(#4273)
Performance
Fix catastrophic performance on docstrings that contain large numbers of leading tab
characters. This fixes
CVE-2024-21503.
(#4278)
Documentation
Note what happens when --check is used with --quiet (#4236)
We’ve just uploaded mypy 1.9 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:
python3 -m pip install -U mypy
You can read the full documentation for this release on Read the Docs.
Breaking Changes
Because the version of typeshed we use in mypy 1.9 doesn't support 3.7, neither does mypy 1.9. (Jared Hance, PR 16883)
We are planning to enable
local partial types (enabled via the
--local-partial-types 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.
Local partial types can also be enabled in the mypy config file:
local_partial_types = True
We are looking at providing a tool to make it easier to migrate
projects to use --local-partial-types, 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.
Basic Support for Type Parameter Defaults (PEP 696)
This release contains new experimental support for type parameter
defaults (PEP 696). Please try it
out! This feature was contributed by Marc Mueller.
Since this feature will be officially introduced in the next Python
feature release (3.13), you will need to import TypeVar, ParamSpec
or TypeVarTuple from typing_extensions to use defaults for now.
This example adapted from the PEP defines a default for BotT:
from typing import Generic
from typing_extensions import TypeVar
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: 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 when importing modules.
#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: 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](python/cpython#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: 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: --import-mode=importlib <import-mode-importlib>{.interpreted-text role="ref"} now tries to import modules using the standard import mechanism (but still without changing :pysys.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: 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: Added support for sys.last_exc{.interpreted-text role="data"} for post-mortem debugging on Python>=3.12.
#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: 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.
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 #706). For example, a test suite may require all fixtures and tests to run in the same event loop, but have async fixtures that are set up and torn down for each module. If you're affected by this issue, please continue using the v0.21 release, until it is resolved.
Fix typing errors with recent versions of mypy #769
Prevent DeprecationWarning about internal use of asyncio.get_event_loop() from affecting test cases #757
Known issues
As of v0.23, pytest-asyncio attaches an asyncio event loop to each item of the test suite (i.e. session, packages, modules, classes, functions) and allows tests to be run in those loops when marked accordingly. Pytest-asyncio currently assumes that async fixture scope is correlated with the new event loop scope. This prevents fixtures from being evaluated independently from the event loop scope and breaks some existing test suites (see #706). For example, a test suite may require all fixtures and tests to run in the same event loop, but have async fixtures that are set up and torn down for each module. If you're affected by this issue, please continue using the v0.21 release, until it is resolved.
Commits
c34da04 [docs] Mentioned pytest 8.2 compatibility fix in changelog.
143f745 Fix compatibility with pytest 8.2 FixtureDef.unittest removal
Removed support for xdist rsync (now deprecated).
Contributed by Matthias Reichenbach in [#623](https://github.com/pytest-dev/pytest-cov/issues/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/issues/630) <https://github.com/pytest-dev/pytest-cov/pull/630>,
[#631](https://github.com/pytest-dev/pytest-cov/issues/631) <https://github.com/pytest-dev/pytest-cov/pull/631>,
[#632](https://github.com/pytest-dev/pytest-cov/issues/632) <https://github.com/pytest-dev/pytest-cov/pull/632>_ and
[#633](https://github.com/pytest-dev/pytest-cov/issues/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/issues/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/issues/584) <https://github.com/pytest-dev/pytest-cov/pull/584>_.
#415: MockType and AsyncMockType can be imported from pytest_mock for type annotation purposes.
#420: Fixed a regression which would cause mocker.patch.object to not being properly cleared between tests.
v3.13.0
#417: spy now has spy_return_list, which is a list containing all the values returned by the spied function.
pytest-mock now requires pytest>=6.2.5.
#410: pytest-mock's setup.py file is removed.
If you relied on this file, e.g. to install pytest using setup.py install,
please see Why you shouldn't invoke setup.py directly for alternatives.
[#415](https://github.com/pytest-dev/pytest-mock/issues/415) <https://github.com/pytest-dev/pytest-mock/pull/415>_: MockType and AsyncMockType can be imported from pytest_mock for type annotation purposes.
[#420](https://github.com/pytest-dev/pytest-mock/issues/420) <https://github.com/pytest-dev/pytest-mock/issues/420>_: Fixed a regression which would cause mocker.patch.object to not being properly cleared between tests.
3.13.0 (2024-03-21)
[#417](https://github.com/pytest-dev/pytest-mock/issues/417) <https://github.com/pytest-dev/pytest-mock/pull/417>_: spy now has spy_return_list, which is a list containing all the values returned by the spied function.
pytest-mock now requires pytest>=6.2.5.
[#410](https://github.com/pytest-dev/pytest-mock/issues/410) <https://github.com/pytest-dev/pytest-mock/pull/410>: pytest-mock's setup.py file is removed.
If you relied on this file, e.g. to install pytest using setup.py install,
please see Why you shouldn't invoke setup.py directly <https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html#summary> for alternatives.
Fix: in some cases, even with [run] relative_files=True, a data file
could be created with absolute path names. When combined with other relative
data files, it was random whether the absolute file names would be made
relative or not. If they weren't, then a file would be listed twice in
reports, as detailed in issue 1752_. This is now fixed: absolute file
names are always made relative when combining. Thanks to Bruno Rodrigues dos
Santos for support.
Fix: the last case of a match/case statement had an incorrect message if the
branch was missed. It said the pattern never matched, when actually the
branch is missed if the last case always matched.
Fix: clicking a line number in the HTML report now positions more accurately.
Fix: the report:format setting was defined as a boolean, but should be a
string. Thanks, Tanaydin Sirin <pull 1754_>_. It is also now documented
on the :ref:configuration page <config_report_format>.
Bumps the all-dependencies group with 13 updates:
2.8.2
2.9.0.post0
2.0.27
2.0.29
24.2.0
24.3.0
1.8.0
1.9.0
7.4.4
8.1.1
0.23.5
0.23.6
4.1.0
5.0.0
3.12.0
3.14.0
0.23.0
1.0.1
0.3.0
0.3.4
2.8.19.20240106
2.9.0.20240316
7.4.3
7.4.4
23.2
24.0
Updates
python-dateutil
from 2.8.2 to 2.9.0.post0Release notes
Sourced from python-dateutil's releases.
Changelog
Sourced from python-dateutil's changelog.
Commits
1ae8077
Merge pull request #1346 from pganssle/release_2.9.0.post0ee6de9d
Update news to prepare for release9780d32
Pinsetuptools_scm
to <8db9d018
Merge pull request #1343 from pganssle/release_2.9.0423ca2f
Run updatezinfo before buildedd3fd4
Update NEWS filefe02d02
Run towncrier with Python 3.119c7524a
Fix MANIFEST.in pattern6de58f5
Update classifiers to include Python 3.128fe0cab
Merge pull request #1342 from pganssle/update_zoneinfoUpdates
sqlalchemy
from 2.0.27 to 2.0.29Release notes
Sourced from sqlalchemy's releases.
... (truncated)
Commits
Updates
black
from 24.2.0 to 24.3.0Release notes
Sourced from black's releases.
Changelog
Sourced from black's changelog.
Commits
552baf8
Prepare release 24.3.0 (#4279)f000936
Fix catastrophic performance in lines_with_leading_tabs_expanded() (#4278)7b5a657
Fix --line-ranges behavior when ranges are at EOF (#4273)1abcffc
Use regex where we ignore case on windows (#4252)719e674
Fix 4227: Improve documentation for --quiet --check (#4236)e5510af
update plugin url for Thonny (#4259)6af7d11
Fix AST safety check false negative (#4270)f03ee11
Ensureblib2to3.pygram
is initialized before use (#4224)e4bfedb
fix: Don't move comments while splitting delimiters (#4248)d0287e1
Make trailing comma logic more concise (#4202)Updates
mypy
from 1.8.0 to 1.9.0Changelog
Sourced from mypy's changelog.
... (truncated)
Commits
5ff46f8
Remove +dev.155909a
[Release 1.9] Unsupport targetting 3.7. (#16883) (#16900)6615cab
[Release 1.9] Stubtest: ignore a new protocol dunder (#16895) (#16899)b956e6a
stubtest: Private parameters can be omitted (#16507)ede0b20
Bump ruff to 0.2.0 (#16870)7bdd61f
stubgen: Fix crash on star unpack of TypeVarTuple (#16869)8c2ef9d
Update hashes in sync-typeshed.py following recent typeshed sync0dd4b6f
Revert use ofParamSpec
forfunctools.wraps
dd12a2d
Revert typeshed ctypes changed132999
Revert sum literal integer change (#13961)Updates
pytest
from 7.4.4 to 8.1.1Release notes
Sourced from pytest's releases.
... (truncated)
Commits
81653ee
Adjust changelog manually for 8.1.1e60b4b9
Prepare release version 8.1.115fbe57
[8.1.x] Revert legacy path removals (#12093)86c3aab
[8.1.x] Do not import duplicated modules with --importmode=importlib (#12077)5b82b0c
[8.1.x] Yank version 8.1.0 (#12076)0a53681
Merge pull request #12054 from pytest-dev/release-8.1.0b9a167f
Prepare release version 8.1.000043f7
Merge pull request #12038 from bluetech/fixtures-rm-arg2indexf4e1025
Merge pull request #12048 from bluetech/fixture-teardown-excgroup43492f5
Merge pull request #12051 from jakkdl/test_debugging_pythonbreakpointUpdates
pytest-asyncio
from 0.23.5 to 0.23.6Release notes
Sourced from pytest-asyncio's releases.
Commits
c34da04
[docs] Mentioned pytest 8.2 compatibility fix in changelog.143f745
Fix compatibility with pytest 8.2 FixtureDef.unittest removal13d4b79
Remove unused function_removesuffix
cdd2c49
UseFixtureRequest
instead ofSubRequest
c3429fa
Build(deps): Bump packaging from 23.2 to 24.0 in /dependencies/docs5f2338d
Build(deps): Bump pypa/gh-action-pypi-publish from 1.8.12 to 1.8.14726c6e0
Build(deps): Bump coverage from 7.4.3 to 7.4.4 in /dependencies/default8bd8288
Build(deps): Bump pytest from 8.0.2 to 8.1.1 in /dependencies/defaultef3b347
Build(deps): Bump packaging from 23.2 to 24.0 in /dependencies/defaultb22d84e
[docs] Fixes the example showing how to run all tests in a session-scoped loop.Updates
pytest-cov
from 4.1.0 to 5.0.0Changelog
Sourced from pytest-cov's changelog.
Commits
5295ce0
Bump version: 4.1.0 → 5.0.01181b06
Update changelog.9757222
Fix a minor grammar error (#636)9f5cd81
Cleanup releasing instructions. Closes #616.93b5047
Add test for pyproject.toml loading without explicit --cov-config. Ref #508.ff50860
docs: add config instructions for pyproject.toml.4a5a4b5
Keep GitHub Actions up to date with GitHub's Dependabot1d7f559
Fix or remove URLs that are causing docs tests to fail6a5af8e
Update changelog.d9fe8df
Switch to furo. Closes #618.Updates
pytest-mock
from 3.12.0 to 3.14.0Release notes
Sourced from pytest-mock's releases.
Changelog
Sourced from pytest-mock's changelog.
Commits
8733134
Update CHANGELOG for 3.14.05257e3c
Refactor MockCache to have a narrow interface4faf92a
Fix regression with mocker.patch not being undone correctly6bd8712
Drop pre-Python 3.8 support code366966b
ExportMockType
/AsyncMockType
for type annotations (#415)852116b
Merge pull request #418 from pytest-dev/release-3.13.0ef9461b
Add instructions on how to start deploy from command-line5b9d285
Release 3.13.06d5d6dc
Implementspy_return_list
(#417)dc28a0e
[pre-commit.ci] pre-commit autoupdate (#416)Updates
pytest-xprocess
from 0.23.0 to 1.0.1Release notes
Sourced from pytest-xprocess's releases.
Changelog
Sourced from pytest-xprocess's changelog.
Commits
889b632
release 1.0.1 (#150)f1eaf73
update manifest file (#149)527d6d8
release 1.0.1 (#147)566fe4e
Add support for callback only process starter (#146)01564b6
[pre-commit.ci] pre-commit autoupdate (#143)04dec86
[pre-commit.ci] pre-commit autoupdate (#140)0dbfb86
release 0.23.0 (#139)Updates
ruff
from 0.3.0 to 0.3.4Release notes
Sourced from ruff's releases.
... (truncated)
Changelog
Sourced from ruff's changelog.
... (truncated)
Commits
5062572
Bump version to v0.3.4 (#10515)dc6f639
Renamelist-reassign-reversed
tolist-reverse-copy
(#10514)01fe268
[refurb
] Implementlist_assign_reversed
lint (FURB187) (#10212)c62184d
'Revert "F821: Fix false negatives in .py files when `from future import ...9b3c732
Docs: Link inline settings when not part of options section (#10499)caa1450
Don't treat annotations as redefinitions in.pyi
files (#10512)60fd98e
Update Rust to v1.77 (#10510)ac150b9
Spruce up docs for flake8-pyi rules (part 2) (#10494)d9ac170
FixE231
bug: Inconsistent catch compared to pycodestyle, such as when dict...c5ea420
chore: remove repetitive words (#10502)Updates
types-python-dateutil
from 2.8.19.20240106 to 2.9.0.20240316Commits
Updates
coverage
from 7.4.3 to 7.4.4Changelog
Sourced from coverage's changelog.
Commits
bc5e2d7
docs: sample HTML for 7.4.49b0008b
docs: prep for 7.4.4a536161
docs: thanks, Bruno Rodrigues dos Santose06e4f9
chore: make doc_upgradef30818e
chore: make upgrade1b19799
fix: ensure absolute paths are relative when combined #17521ef020d
build: more cheats for convenient URLs3d57a07
docs: document the report:format setting8e30221
fix: correct the type of report:format in config.py (#1754)6289be8
refactor: use dataclasses, no namedtupleUpdates
packaging
from 23.2 to 24.0Release notes
Sourced from packaging's releases.