Sync from SUSE:SLFO:Main python-pydantic revision a730f09cfb0cf2adb3b19284a375608b

This commit is contained in:
Adrian Schröter 2024-09-13 16:23:18 +02:00
parent 02b77c844a
commit 2e1415973e
7 changed files with 702 additions and 43 deletions

3
_multibuild Normal file
View File

@ -0,0 +1,3 @@
<multibuild>
<package>test</package>
</multibuild>

View File

@ -1,12 +0,0 @@
Index: pydantic-1.10.2/setup.cfg
===================================================================
--- pydantic-1.10.2.orig/setup.cfg
+++ pydantic-1.10.2/setup.cfg
@@ -11,6 +11,7 @@ filterwarnings =
# for Python 3.11
ignore:path is deprecated.*:DeprecationWarning:certifi
ignore:module 'sre_constants' is deprecated:DeprecationWarning:pkg_resources
+ ignore:.*urllib3.contrib.pyopenssl.*:DeprecationWarning
[flake8]
max-line-length = 120

BIN
pydantic-1.10.7.tar.gz (Stored with Git LFS)

Binary file not shown.

BIN
pydantic-2.7.3.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,3 +1,264 @@
-------------------------------------------------------------------
Thu Jun 6 14:14:46 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 2.7.3:
* Bump `pydantic-core` to `v2.18.4`
* Fix u style unicode strings in python @samuelcolvin in
pydantic/jiter#110
* Replace `__spec__.parent` with `__package__`
* Fix validation of `int`s with leading unary minus
* Fix `str` subclass validation for enums
* Support `BigInt`s in `Literal`s and `Enum`s
* Fix: uuid - allow `str` subclass as input
-------------------------------------------------------------------
Thu May 30 04:56:19 UTC 2024 - Steve Kowalik <steven.kowalik@suse.com>
- Add patch support-pytest-8.patch:
* Support changes in pytest 8.x.
-------------------------------------------------------------------
Sat Apr 27 07:45:31 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 2.7.1:
* Bump `pydantic-core` to `v2.18.2`
* Ftp and Websocket connection strings support
* Use field description for RootModel schema description when
there is `…`
* Fix `validation_alias` behavior with `model_construct` for
`AliasChoices` and `AliasPath`
* Revert `typing.Literal` and import it outside the
TYPE_CHECKING block
* Fix `Secret` serialization schema, applicable for unions
* Fix `strict` application to `function-after` with
`use_enum_values`
* Address case where `model_construct` on a class which defines
`model_post_init` fails with `AttributeError`
* Fix `model_json_schema` with config types
* Support multiple zeros as an `int`
* Fix validation of `int`s with leading unary plus
* Fix interaction between `extra != 'ignore'` and
`from_attributes=True`
* Handle error from `Enum`'s `missing` function as
`ValidationError`
* Fix memory leak with `Iterable` validation
* Adopt `jiter` `v0.2.0`
* Extract attribute docstrings from `FieldInfo.description`
* Add a `with_config` decorator to comply with typing spec
* Allow an optional separator splitting the value and unit of
the result of `ByteSize.human_readable`
* Add generic `Secret` base type
* Make use of `Sphinx` inventories for cross references in docs
* Add environment variable to disable plugins
* Add support for `deprecated` fields
* Allow `field_serializer('*')`
* Handle a case when `model_config` is defined as a model
property
* Update `create_model()` to support `typing.Annotated` as
input
* Add `ClickhouseDsn` support
* Add support for `re.Pattern[str]` to `pattern` field
* Support for `serialize_as_any` runtime setting
* Add support for `typing.Self`
* Ability to pass `context` to serialization
* Add feedback widget to docs with flarelytics integration
* Support for parsing partial JSON strings in Python
* Add support for field level number to str coercion option
* Update `warnings` parameter for serialization utilities to
allow raising a warning
-------------------------------------------------------------------
Sat Mar 16 11:56:01 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 2.6.4:
* Fix usage of `AliasGenerator` with `computed_field` decorator
* Fix nested discriminated union schema gen, pt 2
* Fix bug with no_strict_optional=True caused by API deferral
-------------------------------------------------------------------
Thu Mar 7 03:28:00 UTC 2024 - Steve Kowalik <steven.kowalik@suse.com>
- Update to 2.6.3 (bsc#1222806, CVE-2024-3772):
* Fix inheriting `Field` annotations in dataclasses
* Fix warning for tuple of wrong size in `Union`
* Fix `computed_field` JSON serializer `exclude_none` behavior
* Check for `email-validator` version >= 2.0
* Add `NatsDsn`
* Add `ConfigDict.ser_json_inf_nan`
* Support `AliasGenerator` usage
* Support `yyyy-MM-DD` datetime parsing
* Added bits conversions to the `ByteSize` class
* Add `eval_type_backport` to handle union operator
* Add support for `dataclass` fields `init`
* Implement pickling for `ValidationError`
* Add unified tuple validator that can handle "variadic" tuples via PEP-646
* Drop Python3.7 support
* Make `@validate_call` return a function instead of a custom descriptor
* Introducing `classproperty` decorator for `model_computed_fields`
* Move `getattr` warning in deprecated `BaseConfig`
* Only hash `model_fields`, not whole `__dict__`
* Fix overload position of `computed_field`
* Fix issue `unittest.mock` deprecation warnings
* Fix `to_snake` conversion
* Add support for field `alias` in `dataclass` signature
* Fix ordering of keys in `__dict__` with `model_construct` call
* Fix usage of `@deprecated`
* Add more support for private attributes in `model_construct` call
* Support `pydantic.Field(repr=False)` in dataclasses
* Override `dataclass_transform` behavior for `RootModel`
* Refactor signature generation for simplicity
* Fix ordering bug of PlainValidator annotation
* Fix `exclude_none` for json serialization of `computed_field`s
* Support yyyy-MM-DD string for datetimes
* Fix memory leak with recursive definitions creating reference cycles
* Add `ConfigDict.ser_json_inf_nan`
* Fix validation of `Literal` from JSON keys when used as `dict` key
* Fix bug re `custom_init` on members of `Union`
* Fix `JsonValue` `bool` serialization
* Fix handling of unhashable inputs with `Literal` in `Union`s
Fix package description limit
* Allow plugins to catch non `ValidationError` errors
* Added `validation_error_cause` to config
* Allow `str` as argument to `Discriminator`
* Add `SchemaSerializer.__reduce__` method to enable pickle serialization
* Properly rebuild the `FieldInfo` when a forward ref gets evaluated
* Fix failure to load `SecretStr` from JSON (regression in v2.4)
* Fix `defer_build` behavior with `TypeAdapter`
* Fix: update `TypeVar` handling when default is not set
* Raise an error when deleting frozen (model) fields
* Use generated alias for aliases that are not specified otherwise
* Fix: support `pydantic.Field(kw_only=True)` with inherited dataclasses
* Support `validate_call` decorator for methods in classes with `__slots__`
* Fix pydantic dataclass problem with `dataclasses.field` default
* Support `|` operator (Union) in PydanticRecursiveRef
* Add support for `NotRequired` generics in `TypedDict`
* Added fix for signature of inherited dataclass
* `PrivateAttr` is passed from `Annotated` default position
* Don't decode bytes (which may not be UTF8) when displaying SecretBytes
* Use `classmethod` instead of `classmethod[Any, Any, Any]`
* Clearer error on invalid Plugin
* Correct pydantic dataclasses import
* Fix `definition-ref` bug with `Dict` keys
* Don't accept `NaN` in float and decimal constraints
* Add `lax_str` and `lax_int` support for enum values not inherited
from str/int
* Fix: proper pluralization in `ValidationError` messages
* Disallow the string `'-'` as `datetime` input
* Fix: NaN and Inf float serialization
* Implement optional `number` to `str` coercion
* Add `BaseModel.model_validate_strings` and `TypeAdapter.validate_strings`
* Add Pydantic `plugins` experimental implementation
* Do not override `model_post_init` in subclass with private attrs
* Fix config detection for `TypedDict` from grandparent classes
* Fix hash function generation for frozen models with unusual MRO
* Make `strict` config overridable in field for Path
* Use `ser_json_<timedelta|bytes>` on default in `GenerateJsonSchema`
* Adding a check that alias is validated as an identifier for Python
* Raise an error when computed field overrides field
* Enforce behavior of private attributes having double leading underscore
* Fix generic dataclass fields mutation bug (when using `TypeAdapter`)
* Fix `TypeError` on `model_validator` in `wrap` mode
* Fixed a regular expression denial of service issue by limiting whitespaces
* Fix handling of `UUID` values having `UUID.version=None`
* Fix `__iter__` returning private `cached_property` info
* Make ModelWrapValidator protocols generic
* Make shadowing attributes a warning instead of an error
* Document `Base64Str` and `Base64Bytes`
* Fix `config.defer_build` for serialization first cases
* Support `__get_validators__`
* Replace MiMalloc w/ default allocator
* Cleaner error for invalid input to `Path` fields
* Add section about Constrained classes to the Migration Guide
* Fix issue where generic models couldn't be parametrized with BaseModel
* add field_serializer to computed_field
* fix dataclass annotated before validator called twice
* Add benchmark representing FastAPI startup time
* Fix json_encoders for Enum subclasses
* Revert "Fix default port for mongosrv DSNs (#6827)"
* Do not require `validate_assignment` to use `Field.frozen`
* Fix generic computed fields
* Handle non-json native enum values
* Include Field extra keys name in warning
* Skip FieldInfo merging when unnecessary
* Add `StringConstraints` for use as Annotated metadata
* Fix incorrect subclass check for secretstr
* Mypy plugin for settings
* fast-path checking finite decimals
* Fix pydantic dataclasses that use slots with default values
* Fix inheritance of hash function for frozen models
* Error if an invalid field name is used with Field
* Add `GenericModel` to `MOVED_IN_V2`
* remove email validation from the north star benchmark
* Fix default port for mongosrv DSNs
* Fix serialization issue with `InstanceOf`
* Add back support for `json_encoders`
* Use `WeakValueDictionary` to fix generic memory leak
* Add `config.defer_build` to optionally make model building lazy
* Revise the section on required / optional / nullable fields.
* Replace TransformSchema with GetPydanticSchema
* Fix serialization for IPvAny
* Touch up Decimal validator
* Handle function validators in a discriminated union
* Fix pydantic dataclass problem with dataclasses.field default_factory
* Produce more accurate signatures for pydantic dataclasses
* Ignore unrecognized fields from dataclasses metadata
- Drop patches Fix-Python-3.12-test-failures.patch and
ignore-urllib3-pyopenssl-warning.patch
- Switch to pyproject macros.
- Inject mulitbuild.
-------------------------------------------------------------------
Mon Jan 22 09:12:28 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 1.10.14:
* Update install.md
* Fixes ci to only deploy docs on release
* Fix cached_property handling in dataclasses when copied
-------------------------------------------------------------------
Thu Nov 16 09:58:50 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 1.10.13:
* Fix: Add max length check to `pydantic.validate_email`
* Docs: Fix pip commands to install v1
* Fixes the `maxlen` property being dropped on `deque`
validation. Happened only if the deque item has been typed.
Changes the `_validate_sequence_like` func, #6581 by
* Importing create_model in tools.py through relative path
instead of absolute path - so that it doesn't import V2 code
when copied over to V2 branch, #6361 by @SharathHuddar
* Add Pydantic `Json` field support to settings management,
* Fixed literal validator errors for unhashable values
* Fixed bug with generics receiving forward refs
* Update install method of FastAPI for internal tests in CI,
#6117 by @Kludex
- add Fix-Python-3.12-test-failures.patch: fix test fails with
Python 3.12
-------------------------------------------------------------------
Wed Jul 5 13:07:17 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 1.10.9:
* Fix trailing zeros not ignored in Decimal validation
* Fix mypy plugin for v1.4.0
* Add future and past date hypothesis strategies
* Discourage usage of Cython 3 with Pydantic 1.x
-------------------------------------------------------------------
Thu May 25 07:32:32 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
- Update to v1.10.8
* Fix a bug in `Literal` usage with `typing-extension==4.6.0`, #5826
by @hramezani
* This solves the (closed) issue #3849 where aliased fields that use
discriminated union fail to validate when the data contains the
non-aliased field name, #5736 by @benwah
* Update email-validator dependency to >=2.0.0post2, #5627 by
@adriangb
* update `AnyClassMethod` for changes in
[python/typeshed#9771](https://github.com/python/typeshed/issues/9771),
#5505 by @ITProKyle
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Mar 27 10:00:20 UTC 2023 - Dirk Müller <dmueller@suse.com> Mon Mar 27 10:00:20 UTC 2023 - Dirk Müller <dmueller@suse.com>
@ -144,7 +405,7 @@ Fri Sep 9 00:47:25 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
Tue Jul 19 09:20:43 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com> Tue Jul 19 09:20:43 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
- Add patch remove-pkg_resources.patch: - Add patch remove-pkg_resources.patch:
* Use packaging, not pkg_resources for versions. * Use packaging, not pkg_resources for versions.
------------------------------------------------------------------- -------------------------------------------------------------------
Sat Jun 18 13:37:28 UTC 2022 - Michael Ströder <michael@stroeder.com> Sat Jun 18 13:37:28 UTC 2022 - Michael Ströder <michael@stroeder.com>
@ -176,7 +437,7 @@ Sat Jun 18 13:37:28 UTC 2022 - Michael Ströder <michael@stroeder.com>
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Feb 2 04:12:37 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com> Wed Feb 2 04:12:37 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
- Skip some truculent tests. - Skip some truculent tests.
- Clean up non-required Python 3.6 {Build,}Requires. - Clean up non-required Python 3.6 {Build,}Requires.
------------------------------------------------------------------- -------------------------------------------------------------------
@ -200,7 +461,7 @@ Wed Jan 5 16:08:23 UTC 2022 - Ben Greiner <code@bnavigator.de>
Thu May 13 11:07:30 UTC 2021 - Markéta Machová <mmachova@suse.com> Thu May 13 11:07:30 UTC 2021 - Markéta Machová <mmachova@suse.com>
- Update to 1.8.2 (bsc#1186019, CVE-2021-29510) - Update to 1.8.2 (bsc#1186019, CVE-2021-29510)
* Security fix: Fix date and datetime parsing so passing either 'infinity' * Security fix: Fix date and datetime parsing so passing either 'infinity'
or float('inf') (or their negative values) does not cause an infinite loop or float('inf') (or their negative values) does not cause an infinite loop
* Allow passing json_encoders in class kwargs * Allow passing json_encoders in class kwargs
* support arbitrary types with custom __eq__ * support arbitrary types with custom __eq__
@ -361,19 +622,19 @@ Thu Mar 19 13:25:26 UTC 2020 - Marketa Calabkova <mcalabkova@suse.com>
* Implement root_validator and rename root errors from __obj__ to __root__ * Implement root_validator and rename root errors from __obj__ to __root__
* Added initvars support to post_init_post_parse * Added initvars support to post_init_post_parse
* complete rewrite of URL parsing logic * complete rewrite of URL parsing logic
* BaseSettings now uses the special env settings to define which * BaseSettings now uses the special env settings to define which
environment variables to read, not aliases environment variables to read, not aliases
* add support for assert statements inside validators * add support for assert statements inside validators
* Change the precedence of aliases so child model aliases override * Change the precedence of aliases so child model aliases override
parent aliases, including using alias_generator parent aliases, including using alias_generator
* Add a mypy plugin for type checking BaseModel.__init__ and more * Add a mypy plugin for type checking BaseModel.__init__ and more
* Add support for typing.Literal for Python 3.8 * Add support for typing.Literal for Python 3.8
* Add a ByteSize type for converting byte string (1GB) to plain bytes * Add a ByteSize type for converting byte string (1GB) to plain bytes
* Add support for required Optional with name: Optional[AnyType] = Field(...) * Add support for required Optional with name: Optional[AnyType] = Field(...)
and refactor ModelField creation to preserve required parameter value and refactor ModelField creation to preserve required parameter value
* Add __eq__ to SecretStr and SecretBytes to allow "value equals" * Add __eq__ to SecretStr and SecretBytes to allow "value equals"
* Add support for nested generic models * Add support for nested generic models
* alias precedence logic changed so aliases on a field always take * alias precedence logic changed so aliases on a field always take
priority over an alias from alias_generator priority over an alias from alias_generator
* many more fixes and improvements * many more fixes and improvements

View File

@ -1,7 +1,7 @@
# #
# spec file for package python-pydantic # spec file for package python-pydantic
# #
# Copyright (c) 2023 SUSE LLC # Copyright (c) 2024 SUSE LLC
# Copyright (c) 2019, Martin Hauke <mardnh@gmx.de> # Copyright (c) 2019, Martin Hauke <mardnh@gmx.de>
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
@ -17,29 +17,50 @@
# #
%define skip_python2 1 %global flavor @BUILD_FLAVOR@%{nil}
Name: python-pydantic %if "%{flavor}" == "test"
Version: 1.10.7 %define psuffix -test
%bcond_without test
%else
%define psuffix %{nil}
%bcond_with test
%endif
%{?sle15_python_module_pythons}
Name: python-pydantic%{psuffix}
Version: 2.7.3
Release: 0 Release: 0
Summary: Data validation and settings management using python type hinting Summary: Data validation and settings management using python type hinting
License: MIT License: MIT
URL: https://github.com/pydantic/pydantic URL: https://github.com/pydantic/pydantic
Source: https://github.com/pydantic/pydantic/archive/v%{version}.tar.gz#/pydantic-%{version}.tar.gz Source: https://github.com/pydantic/pydantic/archive/v%{version}.tar.gz#/pydantic-%{version}.tar.gz
# PATCH-FIX-OPENSUSE Ignore DeprecationWarning until requests-toolbelt is fixed # PATCH-FIX-UPSTREAM gh#pydantic/pydantic#9527
# (Pulled in by email-validator) Patch0: support-pytest-8.patch
Patch0: ignore-urllib3-pyopenssl-warning.patch BuildRequires: %{python_module hatch-fancy-pypi-readme}
BuildRequires: %{python_module email-validator >= 1.0.3} BuildRequires: %{python_module hatchling}
BuildRequires: %{python_module packaging} BuildRequires: %{python_module packaging}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
%if %{with test}
BuildRequires: %{python_module Faker}
BuildRequires: %{python_module cloudpickle}
BuildRequires: %{python_module dirty-equals}
BuildRequires: %{python_module email-validator >= 2.0}
BuildRequires: %{python_module pydantic == %{version}}
BuildRequires: %{python_module pytest-benchmark}
BuildRequires: %{python_module pytest-examples}
BuildRequires: %{python_module pytest-mock} BuildRequires: %{python_module pytest-mock}
BuildRequires: %{python_module pytest} BuildRequires: %{python_module pytest}
BuildRequires: %{python_module python-dotenv >= 0.10.4} BuildRequires: %{python_module python-dotenv >= 0.10.4}
BuildRequires: %{python_module setuptools} %endif
BuildRequires: %{python_module typing_extensions >= 4.2.0} Requires: python-annotated-types >= 0.4.0
BuildRequires: fdupes %if 0%{?python_version_nodots} < 310
BuildRequires: python-rpm-macros Requires: python-eval-type-backport
Requires: python-typing_extensions >= 4.2.0 %endif
Suggests: python-email-validator >= 1.0.3 Requires: python-pydantic-core == 2.18.4
Suggests: python-python-dotenv >= 0.10.4 Requires: python-typing_extensions >= 4.6.1
Suggests: python-email-validator >= 2.0
BuildArch: noarch BuildArch: noarch
%python_subpackages %python_subpackages
@ -50,21 +71,25 @@ Data validation and settings management using Python type hinting.
%autosetup -p1 -n pydantic-%{version} %autosetup -p1 -n pydantic-%{version}
%build %build
%python_build %pyproject_wheel
%install %install
%python_install %if %{without test}
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib} %python_expand %fdupes %{buildroot}%{$python_sitelib}
%endif
%check %check
# Disable DeprecationWarning to avoid error with the latest setuptools %if %{with test}
# and pkg_resources deprecation %pytest
%pytest -k 'not test_multiple_env_file' -W ignore::DeprecationWarning %endif
%if %{without test}
%files %{python_files} %files %{python_files}
%license LICENSE %license LICENSE
%doc README.md HISTORY.md %doc README.md HISTORY.md
%{python_sitelib}/pydantic %{python_sitelib}/pydantic
%{python_sitelib}/pydantic-%{version}*-info %{python_sitelib}/pydantic-%{version}.dist-info
%endif
%changelog %changelog

382
support-pytest-8.patch Normal file
View File

@ -0,0 +1,382 @@
From 7fb31529124f51cceb32d1d7b8ae9b58c0606b17 Mon Sep 17 00:00:00 2001
From: Steve Kowalik <steven@wedontsleep.org>
Date: Thu, 30 May 2024 14:14:04 +1000
Subject: [PATCH] Ignore other warnings when checking warnings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Building on Michał's amazing work in PR#9040, extend the pattern to also
ignore other warnings that are emitted by pytest.warns() when running
under Pytest 8.x. This also continues to support Pytest 7.x.
Co-authored-by: Michał Górny <mgorny@gentoo.org>
Fixes: #9025
---
tests/conftest.py | 2 +-
tests/test_config.py | 84 +++++++++++---------
tests/test_deprecated.py | 156 ++++++++++++++++++++++----------------
tests/test_json_schema.py | 9 ++-
tests/test_validators.py | 1 +
5 files changed, 146 insertions(+), 106 deletions(-)
diff --git a/tests/conftest.py b/tests/conftest.py
index e0c0dee018..421afade2e 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -49,7 +49,7 @@ def _create_module_file(code, tmp_path, name):
def disable_error_urls():
# Don't add URLs during docs tests when printing
# Otherwise we'll get version numbers in the URLs that will update frequently
- os.environ['PYDANTIC_ERRORS_OMIT_URL'] = 'true'
+ os.environ['PYDANTIC_ERRORS_INCLUDE_URL'] = 'false'
@pytest.fixture
diff --git a/tests/test_config.py b/tests/test_config.py
index 1a5e31628a..31b2320326 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1,6 +1,7 @@
import json
import re
import sys
+import warnings
from contextlib import nullcontext as does_not_raise
from decimal import Decimal
from inspect import signature
@@ -349,45 +350,54 @@ class Model(BaseModel):
assert m == m.model_copy()
def test_config_class_is_deprecated(self):
- with pytest.warns(
- PydanticDeprecatedSince20, match='Support for class-based `config` is deprecated, use ConfigDict instead.'
- ):
-
- class Config(BaseConfig):
- pass
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+
+ class Config(BaseConfig):
+ pass
def test_config_class_attributes_are_deprecated(self):
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='Support for class-based `config` is deprecated, use ConfigDict instead.',
- ):
- assert BaseConfig.validate_assignment is False
-
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='Support for class-based `config` is deprecated, use ConfigDict instead.',
- ):
- assert BaseConfig().validate_assignment is False
-
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='Support for class-based `config` is deprecated, use ConfigDict instead.',
- ):
-
- class Config(BaseConfig):
- pass
-
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='Support for class-based `config` is deprecated, use ConfigDict instead.',
- ):
- assert Config.validate_assignment is False
-
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='Support for class-based `config` is deprecated, use ConfigDict instead.',
- ):
- assert Config().validate_assignment is False
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+ assert BaseConfig.validate_assignment is False
+
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+ assert BaseConfig().validate_assignment is False
+
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+
+ class Config(BaseConfig):
+ pass
+
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+ assert Config.validate_assignment is False
+
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='Support for class-based `config` is deprecated, use ConfigDict instead.',
+ ):
+ assert Config().validate_assignment is False
@pytest.mark.filterwarnings('ignore:.* is deprecated.*:DeprecationWarning')
def test_config_class_missing_attributes(self):
diff --git a/tests/test_deprecated.py b/tests/test_deprecated.py
index fda6879597..2e58e8b433 100644
--- a/tests/test_deprecated.py
+++ b/tests/test_deprecated.py
@@ -1,5 +1,6 @@
import platform
import re
+import warnings
from datetime import date, timedelta
from pathlib import Path
from types import SimpleNamespace
@@ -273,8 +274,12 @@ class Model(BaseModel):
x: int
y: int
- with pytest.warns(PydanticDeprecatedSince20, match='The `parse_raw` method is deprecated'):
- model = Model.parse_raw('{"x": 1, "y": 2}')
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(PydanticDeprecatedSince20, match='The `parse_raw` method is deprecated'):
+ model = Model.parse_raw('{"x": 1, "y": 2}')
assert model.model_dump() == {'x': 1, 'y': 2}
@@ -284,9 +289,13 @@ class Model(BaseModel):
x: int
y: int
- with pytest.warns(PydanticDeprecatedSince20, match='The `parse_raw` method is deprecated'):
- with pytest.raises(ValidationError, match='1 validation error for Model') as exc_info:
- Model.parse_raw('invalid')
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(PydanticDeprecatedSince20, match='The `parse_raw` method is deprecated'):
+ with pytest.raises(ValidationError, match='1 validation error for Model') as exc_info:
+ Model.parse_raw('invalid')
# insert_assert(exc_info.value.errors(include_url=False))
assert exc_info.value.errors(include_url=False) == [
@@ -435,10 +444,14 @@ class Model(BaseModel):
def test_field_include_deprecation():
m = '`include` is deprecated and does nothing. It will be removed, use `exclude` instead'
- with pytest.warns(PydanticDeprecatedSince20, match=m):
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(PydanticDeprecatedSince20, match=m):
- class Model(BaseModel):
- x: int = Field(include=True)
+ class Model(BaseModel):
+ x: int = Field(include=True)
def test_unique_items_items():
@@ -664,10 +677,14 @@ def test_parse_obj():
def test_parse_file(tmp_path):
path = tmp_path / 'test.json'
path.write_text('{"x": 12}')
- with pytest.warns(
- PydanticDeprecatedSince20, match='^The `parse_file` method is deprecated; load the data from file,'
- ):
- assert SimpleModel.parse_file(str(path)).model_dump() == {'x': 12}
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(
+ PydanticDeprecatedSince20, match='^The `parse_file` method is deprecated; load the data from file,'
+ ):
+ assert SimpleModel.parse_file(str(path)).model_dump() == {'x': 12}
def test_construct():
@@ -736,61 +753,68 @@ def test_deprecated_module(tmp_path: Path) -> None:
class Model(BaseModel):
x: int
- assert hasattr(parse_obj_as, '__deprecated__')
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='`parse_obj_as` is deprecated. Use `pydantic.TypeAdapter.validate_python` instead.',
- ):
- parse_obj_as(Model, {'x': 1})
-
- assert hasattr(schema_json_of, '__deprecated__')
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='`schema_json_of` is deprecated. Use `pydantic.TypeAdapter.json_schema` instead.',
- ):
- schema_json_of(Model)
-
- assert hasattr(schema_of, '__deprecated__')
- with pytest.warns(
- PydanticDeprecatedSince20, match='`schema_of` is deprecated. Use `pydantic.TypeAdapter.json_schema` instead.'
- ):
- schema_of(Model)
-
- assert hasattr(load_str_bytes, '__deprecated__')
- with pytest.warns(PydanticDeprecatedSince20, match='`load_str_bytes` is deprecated.'):
- load_str_bytes('{"x": 1}')
-
- assert hasattr(load_file, '__deprecated__')
- file = tmp_path / 'main.py'
- file.write_text('{"x": 1}')
- with pytest.warns(PydanticDeprecatedSince20, match='`load_file` is deprecated.'):
- load_file(file)
-
- assert hasattr(pydantic_encoder, '__deprecated__')
- with pytest.warns(
- PydanticDeprecatedSince20,
- match='`pydantic_encoder` is deprecated, use `pydantic_core.to_jsonable_python` instead.',
- ):
- pydantic_encoder(Model(x=1))
-
- assert hasattr(custom_pydantic_encoder, '__deprecated__')
- with pytest.warns(
- PydanticDeprecatedSince20, match='`custom_pydantic_encoder` is deprecated, use `BaseModel.model_dump` instead.'
- ):
- custom_pydantic_encoder({int: lambda x: str(x)}, Model(x=1))
-
- assert hasattr(timedelta_isoformat, '__deprecated__')
- with pytest.warns(PydanticDeprecatedSince20, match='`timedelta_isoformat` is deprecated.'):
- timedelta_isoformat(timedelta(seconds=1))
-
- with pytest.warns(
- PydanticDeprecatedSince20, match='The `validate_arguments` method is deprecated; use `validate_call` instead.'
- ):
-
- def test(a: int, b: int):
- pass
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ assert hasattr(parse_obj_as, '__deprecated__')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='`parse_obj_as` is deprecated. Use `pydantic.TypeAdapter.validate_python` instead.',
+ ):
+ parse_obj_as(Model, {'x': 1})
+
+ assert hasattr(schema_json_of, '__deprecated__')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='`schema_json_of` is deprecated. Use `pydantic.TypeAdapter.json_schema` instead.',
+ ):
+ schema_json_of(Model)
+
+ assert hasattr(schema_of, '__deprecated__')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='`schema_of` is deprecated. Use `pydantic.TypeAdapter.json_schema` instead.',
+ ):
+ schema_of(Model)
+
+ assert hasattr(load_str_bytes, '__deprecated__')
+ with pytest.warns(PydanticDeprecatedSince20, match='`load_str_bytes` is deprecated.'):
+ load_str_bytes('{"x": 1}')
+
+ assert hasattr(load_file, '__deprecated__')
+ file = tmp_path / 'main.py'
+ file.write_text('{"x": 1}')
+ with pytest.warns(PydanticDeprecatedSince20, match='`load_file` is deprecated.'):
+ load_file(file)
+
+ assert hasattr(pydantic_encoder, '__deprecated__')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='`pydantic_encoder` is deprecated, use `pydantic_core.to_jsonable_python` instead.',
+ ):
+ pydantic_encoder(Model(x=1))
+
+ assert hasattr(custom_pydantic_encoder, '__deprecated__')
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='`custom_pydantic_encoder` is deprecated, use `BaseModel.model_dump` instead.',
+ ):
+ custom_pydantic_encoder({int: lambda x: str(x)}, Model(x=1))
+
+ assert hasattr(timedelta_isoformat, '__deprecated__')
+ with pytest.warns(PydanticDeprecatedSince20, match='`timedelta_isoformat` is deprecated.'):
+ timedelta_isoformat(timedelta(seconds=1))
+
+ with pytest.warns(
+ PydanticDeprecatedSince20,
+ match='The `validate_arguments` method is deprecated; use `validate_call` instead.',
+ ):
+
+ def test(a: int, b: int):
+ pass
- validate_arguments()(test)
+ validate_arguments()(test)
def test_deprecated_color():
diff --git a/tests/test_json_schema.py b/tests/test_json_schema.py
index e6c60557a5..85d833c15c 100644
--- a/tests/test_json_schema.py
+++ b/tests/test_json_schema.py
@@ -5,6 +5,7 @@
import re
import sys
import typing
+import warnings
from datetime import date, datetime, time, timedelta
from decimal import Decimal
from enum import Enum, IntEnum
@@ -1385,8 +1386,12 @@ class Model(BaseModel):
class MyGenerator(GenerateJsonSchema):
ignored_warning_kinds = ()
- with pytest.warns(PydanticJsonSchemaWarning, match=warning_match):
- model_schema = Model.model_json_schema(schema_generator=MyGenerator)
+ with warnings.catch_warnings():
+ # we need to explicitly ignore the other warning in pytest-8
+ # TODO: rewrite it to use two nested pytest.warns() when pytest-7 is no longer supported
+ warnings.simplefilter('ignore')
+ with pytest.warns(PydanticJsonSchemaWarning, match=warning_match):
+ model_schema = Model.model_json_schema(schema_generator=MyGenerator)
assert model_schema == {
'properties': {'callback': {'title': 'Callback', 'type': 'integer'}},
'title': 'Model',
diff --git a/tests/test_validators.py b/tests/test_validators.py
index 52a8bda88f..b286c49b1b 100644
--- a/tests/test_validators.py
+++ b/tests/test_validators.py
@@ -2554,6 +2554,7 @@ class Model(BaseModel):
assert Model(x=1, y=2).model_dump() == {'x': 2, 'y': 3}
+@pytest.mark.filterwarnings('ignore:Pydantic V1 style `@root_validator` validators are deprecated.*:pydantic.warnings.PydanticDeprecatedSince20')
def test_root_validator_allow_reuse_same_field():
with pytest.warns(UserWarning, match='`root_val` overrides an existing Pydantic `@root_validator` decorator'):