forked from pool/python-pydantic
Accepting request 1184776 from devel:languages:python
- update to 2.8.0: * Update citation version automatically with new releases * Bump pyright to `v1.1.367` and add type checking tests for pipeline API * Update `pydantic.v1` stub to `v1.10.17` * General package updates to prep for `v2.8.0b1` * Bump `pydantic-core` to `v2.20.0` * Add support for Python 3.13 * Update `pdm` version used for `pdm.lock` to v2.16.1 * Update to `ruff` `v0.4.8` * Experimental: support `defer_build` for `TypeAdapter` * Implement `deprecated` field in json schema * Experimental: Add pipeline API * Add support for programmatic title generation * Implement `fail_fast` feature * Add `ser_json_inf_nan='strings'` mode to produce valid JSON * Replace `__spec__.parent` with `__package__` * Fix Outputted Model JSON Schema for `Sequence` type * Fix typing of `_frame_depth` * Make `ImportString` json schema compatible * Hide private attributes (`PrivateAttr`) from `__init__` signature in type checkers * Make detection of `TypeVar` defaults robust to the CPython `PEP-696` implementation * Fix usage of `PlainSerializer` with builtin types * Add more robust custom validation examples * Fix ignored `strict` specification for `StringConstraint(strict=False)` * Use `Self` where possible * Do not alter `RootModel.model_construct` signature in the OBS-URL: https://build.opensuse.org/request/show/1184776 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-pydantic?expand=0&rev=29
This commit is contained in:
commit
10800831eb
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:a5fc6c585a6af719d2759719a0eaf01419378fb947e76d170afba6e465ed598f
|
|
||||||
size 2749073
|
|
3
pydantic-2.8.0.tar.gz
Normal file
3
pydantic-2.8.0.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:258c07f1b36b4840577fba9ad8ace243f3fb787c9619c003896b86cfeb519c06
|
||||||
|
size 2788643
|
@ -1,3 +1,68 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 1 16:29:01 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- update to 2.8.0:
|
||||||
|
* Update citation version automatically with new releases
|
||||||
|
* Bump pyright to `v1.1.367` and add type checking tests for
|
||||||
|
pipeline API
|
||||||
|
* Update `pydantic.v1` stub to `v1.10.17`
|
||||||
|
* General package updates to prep for `v2.8.0b1`
|
||||||
|
* Bump `pydantic-core` to `v2.20.0`
|
||||||
|
* Add support for Python 3.13
|
||||||
|
* Update `pdm` version used for `pdm.lock` to v2.16.1
|
||||||
|
* Update to `ruff` `v0.4.8`
|
||||||
|
* Experimental: support `defer_build` for `TypeAdapter`
|
||||||
|
* Implement `deprecated` field in json schema
|
||||||
|
* Experimental: Add pipeline API
|
||||||
|
* Add support for programmatic title generation
|
||||||
|
* Implement `fail_fast` feature
|
||||||
|
* Add `ser_json_inf_nan='strings'` mode to produce valid JSON
|
||||||
|
* Replace `__spec__.parent` with `__package__`
|
||||||
|
* Fix Outputted Model JSON Schema for `Sequence` type
|
||||||
|
* Fix typing of `_frame_depth`
|
||||||
|
* Make `ImportString` json schema compatible
|
||||||
|
* Hide private attributes (`PrivateAttr`) from `__init__`
|
||||||
|
signature in type checkers
|
||||||
|
* Make detection of `TypeVar` defaults robust to the CPython
|
||||||
|
`PEP-696` implementation
|
||||||
|
* Fix usage of `PlainSerializer` with builtin types
|
||||||
|
* Add more robust custom validation examples
|
||||||
|
* Fix ignored `strict` specification for
|
||||||
|
`StringConstraint(strict=False)`
|
||||||
|
* Use `Self` where possible
|
||||||
|
* Do not alter `RootModel.model_construct` signature in the
|
||||||
|
`mypy` plugin
|
||||||
|
* Fixed type hint of `validation_context`
|
||||||
|
* Support context being passed to TypeAdapter's
|
||||||
|
`dump_json`/`dump_python`
|
||||||
|
* Updates type signature for `Field()` constructor
|
||||||
|
* Improve builtin alias generators
|
||||||
|
* Fix typing of `TypeAdapter`
|
||||||
|
* Add fallback default value for private fields in
|
||||||
|
`__setstate__` of BaseModel
|
||||||
|
* Support `PEP 746`
|
||||||
|
* Allow validator and serializer functions to have default
|
||||||
|
values
|
||||||
|
* Fix bug with mypy plugin's handling of covariant `TypeVar`
|
||||||
|
fields
|
||||||
|
* Fix multiple annotation / constraint application logic
|
||||||
|
* Respect `regex` flags in validation and json schema
|
||||||
|
* Fix type hint on `IpvAnyAddress`
|
||||||
|
* Allow a field specifier on `__pydantic_extra__`
|
||||||
|
* Use normalized case for file path comparison
|
||||||
|
* Modify constraint application logic to allow field
|
||||||
|
constraints on `Optional[Decimal]`
|
||||||
|
* `validate_call` type params fix
|
||||||
|
* Check all warnings returned by pytest.warns()
|
||||||
|
* Reuse `re.Pattern` object in regex patterns to allow for
|
||||||
|
regex flags
|
||||||
|
- drop support-pytest-8.patch (upstream)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Jun 30 20:44:51 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- drop optional email-validator dependency
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Jun 24 15:45:05 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
Mon Jun 24 15:45:05 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
@ -27,14 +27,12 @@
|
|||||||
%endif
|
%endif
|
||||||
%{?sle15_python_module_pythons}
|
%{?sle15_python_module_pythons}
|
||||||
Name: python-pydantic%{psuffix}
|
Name: python-pydantic%{psuffix}
|
||||||
Version: 2.7.4
|
Version: 2.8.0
|
||||||
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-UPSTREAM gh#pydantic/pydantic#9527
|
|
||||||
Patch0: support-pytest-8.patch
|
|
||||||
BuildRequires: %{python_module hatch-fancy-pypi-readme}
|
BuildRequires: %{python_module hatch-fancy-pypi-readme}
|
||||||
BuildRequires: %{python_module hatchling}
|
BuildRequires: %{python_module hatchling}
|
||||||
BuildRequires: %{python_module packaging}
|
BuildRequires: %{python_module packaging}
|
||||||
@ -47,20 +45,20 @@ BuildRequires: %{python_module Faker}
|
|||||||
BuildRequires: %{python_module cloudpickle}
|
BuildRequires: %{python_module cloudpickle}
|
||||||
BuildRequires: %{python_module dirty-equals}
|
BuildRequires: %{python_module dirty-equals}
|
||||||
BuildRequires: %{python_module email-validator >= 2.0}
|
BuildRequires: %{python_module email-validator >= 2.0}
|
||||||
BuildRequires: %{python_module pydantic == %{version}}
|
BuildRequires: %{python_module pydantic = %{version}}
|
||||||
BuildRequires: %{python_module pytest-benchmark}
|
BuildRequires: %{python_module pytest-benchmark}
|
||||||
BuildRequires: %{python_module pytest-examples}
|
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 rich}
|
||||||
%endif
|
%endif
|
||||||
Requires: python-annotated-types >= 0.4.0
|
Requires: python-annotated-types >= 0.4.0
|
||||||
%if 0%{?python_version_nodots} < 310
|
%if 0%{?python_version_nodots} < 310
|
||||||
Requires: python-eval-type-backport
|
Requires: python-eval-type-backport
|
||||||
%endif
|
%endif
|
||||||
Requires: python-pydantic-core == 2.18.4
|
Requires: python-pydantic-core = 2.20.0
|
||||||
Requires: python-typing_extensions >= 4.6.1
|
Requires: python-typing-extensions >= 4.6.1
|
||||||
Suggests: python-email-validator >= 2.0
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
|
|
||||||
|
@ -1,382 +0,0 @@
|
|||||||
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'):
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user