Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pydantic for openSUSE:Factory
checked in at 2024-01-22 20:30:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pydantic (Old)
and /work/SRC/openSUSE:Factory/.python-pydantic.new.16006 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pydantic"
Mon Jan 22 20:30:52 2024 rev:21 rq:1140422 version:1.10.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pydantic/python-pydantic.changes
2024-01-07 21:38:59.141145544 +0100
+++
/work/SRC/openSUSE:Factory/.python-pydantic.new.16006/python-pydantic.changes
2024-01-22 20:30:53.373908384 +0100
@@ -1,0 +2,8 @@
+Mon Jan 22 09:12:28 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 1.10.14:
+ * Update install.md
+ * Fixes ci to only deploy docs on release
+ * Fix cached_property handling in dataclasses when copied
+
+-------------------------------------------------------------------
Old:
----
pydantic-1.10.13.tar.gz
New:
----
pydantic-1.10.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pydantic.spec ++++++
--- /var/tmp/diff_new_pack.V7Jw6O/_old 2024-01-22 20:30:54.413946410 +0100
+++ /var/tmp/diff_new_pack.V7Jw6O/_new 2024-01-22 20:30:54.413946410 +0100
@@ -19,7 +19,7 @@
%{?sle15_python_module_pythons}
Name: python-pydantic
-Version: 1.10.13
+Version: 1.10.14
Release: 0
Summary: Data validation and settings management using python type
hinting
License: MIT
++++++ pydantic-1.10.13.tar.gz -> pydantic-1.10.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/.github/workflows/ci.yml
new/pydantic-1.10.14/.github/workflows/ci.yml
--- old/pydantic-1.10.13/.github/workflows/ci.yml 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/.github/workflows/ci.yml 2024-01-19
16:29:06.000000000 +0100
@@ -454,7 +454,7 @@
publish_docs:
needs: [check]
- if: "success() && (github.ref == 'refs/heads/1.10.X-fixes' ||
startsWith(github.ref, 'refs/tags/'))"
+ if: "success() && startsWith(github.ref, 'refs/tags/')"
runs-on: ubuntu-latest
steps:
@@ -481,18 +481,14 @@
- run: make docs
- - run: mike deploy -b docs-site dev-v1 --push
- if: github.ref == 'refs/heads/1.10.X-fixes'
-
- name: check version
- if: "startsWith(github.ref, 'refs/tags/')"
id: check-version
uses: samuelcolvin/[email protected]
with:
version_file_path: 'pydantic/version.py'
- run: mike deploy -b docs-site ${{
steps.check-version.outputs.VERSION_MAJOR_MINOR }} --update-aliases --push
- if: "startsWith(github.ref, 'refs/tags/') &&
!fromJSON(steps.check-version.outputs.IS_PRERELEASE)"
+ if: "!fromJSON(steps.check-version.outputs.IS_PRERELEASE)"
release:
needs: [check]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/HISTORY.md
new/pydantic-1.10.14/HISTORY.md
--- old/pydantic-1.10.13/HISTORY.md 2023-09-27 18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/HISTORY.md 2024-01-19 16:29:06.000000000 +0100
@@ -1,3 +1,10 @@
+## v1.10.14 (2024-01-19)
+
+* Update install.md by @dmontagu in
https://github.com/pydantic/pydantic/pull/7690
+* Fixes ci to only deploy docs on release by @sydney-runkle in
https://github.com/pydantic/pydantic/pull/7740
+* Ubuntu fixes for V1 by @sydney-runkle in
https://github.com/pydantic/pydantic/pull/8540 and
https://github.com/pydantic/pydantic/pull/8587
+* Fix cached_property handling in dataclasses when copied by @rdbisme in
https://github.com/pydantic/pydantic/pull/8407
+
## v1.10.13 (2023-09-27)
* Fix: Add max length check to `pydantic.validate_email`, #7673 by @hramezani
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/docs/extra/redirects.js
new/pydantic-1.10.14/docs/extra/redirects.js
--- old/pydantic-1.10.13/docs/extra/redirects.js 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/docs/extra/redirects.js 2024-01-19
16:29:06.000000000 +0100
@@ -88,8 +88,16 @@
'history': '/changelog/',
}
+function sanitizeURL(url) {
+ // escape untrusted source by creating an anchor element and letting the
browser parse it
+ let a = document.createElement('a');
+ a.href = url;
+ return a.href;
+}
+
function main() {
- const fragment = location.hash.substr(1)
+ // escape nonstandard characters to avoid XSS attacks
+ const fragment = location.hash.substr(1).replace(/[^a-zA-Z0-9-_]/g, '')
if (fragment === '' || location.pathname !== '/') {
// no fragment or not called from root
return
@@ -105,7 +113,7 @@
.replace(/(v\d)-(\d+-\d{4})/, '$1$2')
}
- window.location = new_url
+ window.location = sanitizeURL(new_url)
}
main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/docs/install.md
new/pydantic-1.10.14/docs/install.md
--- old/pydantic-1.10.13/docs/install.md 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/docs/install.md 2024-01-19 16:29:06.000000000
+0100
@@ -76,5 +76,5 @@
```bash
pip install git+https://github.com/pydantic/[email protected]#egg=pydantic
# or with extras
-pip install
git+https;://github.com/pydantic/[email protected]#egg=pydantic[email,dotenv]
+pip install
git+https://github.com/pydantic/[email protected]#egg=pydantic[email,dotenv]
```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/docs/requirements.txt
new/pydantic-1.10.14/docs/requirements.txt
--- old/pydantic-1.10.13/docs/requirements.txt 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/docs/requirements.txt 2024-01-19 16:29:06.000000000
+0100
@@ -5,9 +5,9 @@
hypothesis==6.54.4
markdown-include==0.8.0
mdx-truly-sane-lists==1.3
-mkdocs==1.4.2
+mkdocs==1.5.3
mkdocs-exclude==1.0.2
-mkdocs-material==9.0.5
+mkdocs-material==9.5.1
pyupgrade==2.37.3
sqlalchemy
orjson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/mkdocs.yml
new/pydantic-1.10.14/mkdocs.yml
--- old/pydantic-1.10.13/mkdocs.yml 2023-09-27 18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/mkdocs.yml 2024-01-19 16:29:06.000000000 +0100
@@ -76,8 +76,8 @@
- pymdownx.extra
- mdx_truly_sane_lists
- pymdownx.emoji:
- emoji_index: !!python/name:materialx.emoji.twemoji
- emoji_generator: !!python/name:materialx.emoji.to_svg
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.tabbed:
alternate_style: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/dataclasses.py
new/pydantic-1.10.14/pydantic/dataclasses.py
--- old/pydantic-1.10.13/pydantic/dataclasses.py 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/pydantic/dataclasses.py 2024-01-19
16:29:06.000000000 +0100
@@ -36,6 +36,13 @@
import sys
from contextlib import contextmanager
from functools import wraps
+
+try:
+ from functools import cached_property
+except ImportError:
+ # cached_property available only for python3.8+
+ pass
+
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Dict, Generator,
Optional, Type, TypeVar, Union, overload
from typing_extensions import dataclass_transform
@@ -409,6 +416,17 @@
return model
+if sys.version_info >= (3, 8):
+
+ def _is_field_cached_property(obj: 'Dataclass', k: str) -> bool:
+ return isinstance(getattr(type(obj), k, None), cached_property)
+
+else:
+
+ def _is_field_cached_property(obj: 'Dataclass', k: str) -> bool:
+ return False
+
+
def _dataclass_validate_values(self: 'Dataclass') -> None:
# validation errors can occur if this function is called twice on an
already initialised dataclass.
# for example if Extra.forbid is enabled, it would consider
__pydantic_initialised__ an invalid extra property
@@ -417,9 +435,13 @@
if getattr(self, '__pydantic_has_field_info_default__', False):
# We need to remove `FieldInfo` values since they are not valid as
input
# It's ok to do that because they are obviously the default values!
- input_data = {k: v for k, v in self.__dict__.items() if not
isinstance(v, FieldInfo)}
+ input_data = {
+ k: v
+ for k, v in self.__dict__.items()
+ if not (isinstance(v, FieldInfo) or
_is_field_cached_property(self, k))
+ }
else:
- input_data = self.__dict__
+ input_data = {k: v for k, v in self.__dict__.items() if not
_is_field_cached_property(self, k)}
d, _, validation_error = validate_model(self.__pydantic_model__,
input_data, cls=self.__class__)
if validation_error:
raise validation_error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/error_wrappers.py
new/pydantic-1.10.14/pydantic/error_wrappers.py
--- old/pydantic-1.10.13/pydantic/error_wrappers.py 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/pydantic/error_wrappers.py 2024-01-19
16:29:06.000000000 +0100
@@ -101,7 +101,6 @@
) -> Generator['ErrorDict', None, None]:
for error in errors:
if isinstance(error, ErrorWrapper):
-
if loc:
error_loc = loc + error.loc_tuple()
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/fields.py
new/pydantic-1.10.14/pydantic/fields.py
--- old/pydantic-1.10.13/pydantic/fields.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/pydantic/fields.py 2024-01-19 16:29:06.000000000
+0100
@@ -178,7 +178,6 @@
self.extra = kwargs
def __repr_args__(self) -> 'ReprArgs':
-
field_defaults_to_hide: Dict[str, Any] = {
'repr': True,
**self.__field_constraints__,
@@ -405,7 +404,6 @@
alias: Optional[str] = None,
field_info: Optional[FieldInfo] = None,
) -> None:
-
self.name: str = name
self.has_alias: bool = alias is not None
self.alias: str = alias if alias is not None else name
@@ -852,7 +850,6 @@
def validate(
self, v: Any, values: Dict[str, Any], *, loc: 'LocStr', cls:
Optional['ModelOrDc'] = None
) -> 'ValidateReturn':
-
assert self.type_.__class__ is not DeferredType
if self.type_.__class__ is ForwardRef:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/main.py
new/pydantic-1.10.14/pydantic/main.py
--- old/pydantic-1.10.13/pydantic/main.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/pydantic/main.py 2024-01-19 16:29:06.000000000
+0100
@@ -737,7 +737,6 @@
exclude_defaults: bool,
exclude_none: bool,
) -> Any:
-
if isinstance(v, BaseModel):
if to_dict:
v_dict = v.dict(
@@ -830,7 +829,6 @@
exclude_defaults: bool = False,
exclude_none: bool = False,
) -> 'TupleGenerator':
-
# Merge field set excludes with explicit exclude parameter with
explicit overriding field set options.
# The extra "is not None" guards are not logically necessary but
optimizes performance for the simple case.
if exclude is not None or self.__exclude_fields__ is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/schema.py
new/pydantic-1.10.14/pydantic/schema.py
--- old/pydantic-1.10.13/pydantic/schema.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/pydantic/schema.py 2024-01-19 16:29:06.000000000
+0100
@@ -198,7 +198,6 @@
def get_field_info_schema(field: ModelField, schema_overrides: bool = False)
-> Tuple[Dict[str, Any], bool]:
-
# If no title is explicitly set, we don't set title in the schema for
enums.
# The behaviour is the same as `BaseModel` reference, where the default
title
# is in the definitions part of the schema.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/types.py
new/pydantic-1.10.14/pydantic/types.py
--- old/pydantic-1.10.13/pydantic/types.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/pydantic/types.py 2024-01-19 16:29:06.000000000
+0100
@@ -481,6 +481,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SET TYPES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
# This types superclass should be Set[T], but cython chokes on that...
class ConstrainedSet(set): # type: ignore
# Needed for pydantic to detect that this is a set
@@ -569,6 +570,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LIST TYPES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
# This types superclass should be List[T], but cython chokes on that...
class ConstrainedList(list): # type: ignore
# Needed for pydantic to detect that this is a list
@@ -1094,7 +1096,6 @@
@classmethod
def validate(cls, v: StrIntFloat) -> 'ByteSize':
-
try:
return cls(int(v))
except ValueError:
@@ -1116,7 +1117,6 @@
return cls(int(float(scalar) * unit_mult))
def human_readable(self, decimal: bool = False) -> str:
-
if decimal:
divisor = 1000
units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
@@ -1135,7 +1135,6 @@
return f'{num:0.1f}{final_unit}'
def to(self, unit: str) -> float:
-
try:
unit_div = BYTE_SIZES[unit.lower()]
except KeyError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/pydantic/version.py
new/pydantic-1.10.14/pydantic/version.py
--- old/pydantic-1.10.13/pydantic/version.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/pydantic/version.py 2024-01-19 16:29:06.000000000
+0100
@@ -1,6 +1,6 @@
__all__ = 'compiled', 'VERSION', 'version_info'
-VERSION = '1.10.13'
+VERSION = '1.10.14'
try:
import cython # type: ignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_dataclasses.py
new/pydantic-1.10.14/tests/test_dataclasses.py
--- old/pydantic-1.10.13/tests/test_dataclasses.py 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/tests/test_dataclasses.py 2024-01-19
16:29:06.000000000 +0100
@@ -5,6 +5,12 @@
import sys
from collections.abc import Hashable
from datetime import datetime
+
+try:
+ from functools import cached_property
+except ImportError:
+ pass
+
from pathlib import Path
from typing import Callable, ClassVar, Dict, FrozenSet, List, Optional, Set,
Union
@@ -1631,3 +1637,32 @@
B = copy.deepcopy(A)
assert B is not A
assert B(1) == A(1)
+
+
[email protected](sys.version_info < (3, 8), reason='cached_property was
introduced in python3.8 stdlib')
+def test_cached_property():
+ @dataclasses.dataclass(frozen=True)
+ class A:
+ name: str
+
+ @cached_property
+ def _name(self):
+ return 'name'
+
+ class MyModel(BaseModel, arbitrary_types_allowed=True, frozen=True,
extra=Extra.forbid):
+ scheduler: A
+
+ models = {
+ 'AX': MyModel(scheduler=A('a')),
+ }
+
+ sched = A('sched')
+
+ models_2 = {
+ 'AY': models['AX'].copy(update=dict(scheduler=sched)),
+ }
+
+ models = {**models, **models_2}
+
+ models['AY'].scheduler._name
+ MyModel.parse_obj(models['AY'].dict())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_fastapi.sh
new/pydantic-1.10.14/tests/test_fastapi.sh
--- old/pydantic-1.10.13/tests/test_fastapi.sh 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/tests/test_fastapi.sh 2024-01-19 16:29:06.000000000
+0100
@@ -7,6 +7,9 @@
git fetch --tags
git checkout 0.99.1
+# temp fix for flask dependency issue
+# see:
https://stackoverflow.com/questions/77213053/importerror-cannot-import-name-url-quote-from-werkzeug-urls
+pip install Werkzeug==2.2.2
pip install -r requirements.txt
./scripts/test.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_generics.py
new/pydantic-1.10.14/tests/test_generics.py
--- old/pydantic-1.10.13/tests/test_generics.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/tests/test_generics.py 2024-01-19 16:29:06.000000000
+0100
@@ -745,7 +745,6 @@
def test_generic_model_redefined_without_cache_fail(create_module,
monkeypatch):
-
# match identity checker otherwise we never get to the redefinition check
monkeypatch.setattr('pydantic.generics.all_identical', lambda left, right:
False)
@@ -975,7 +974,6 @@
pass
class Model(GenericModel, Generic[T, KT, VT]):
-
map_field: GenericMapping[KT, VT]
list_field: GenericList[T]
@@ -1323,7 +1321,6 @@
pass
class Model(GenericModel, Generic[T]):
-
field: GenericList[T]
model = Model[int](field=[5])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_main.py
new/pydantic-1.10.14/tests/test_main.py
--- old/pydantic-1.10.13/tests/test_main.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/tests/test_main.py 2024-01-19 16:29:06.000000000
+0100
@@ -2186,7 +2186,6 @@
def test_class_kwargs_config_and_attr_conflict():
-
with pytest.raises(
TypeError, match='Specifying config in two places is ambiguous, use
either Config attribute or class kwargs'
):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_rich_repr.py
new/pydantic-1.10.14/tests/test_rich_repr.py
--- old/pydantic-1.10.13/tests/test_rich_repr.py 2023-09-27
18:38:55.000000000 +0200
+++ new/pydantic-1.10.14/tests/test_rich_repr.py 2024-01-19
16:29:06.000000000 +0100
@@ -25,7 +25,6 @@
def test_rich_repr_color() -> None:
-
color = Color((10, 20, 30, 0.1))
rich_repr = list(color.__rich_repr__())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pydantic-1.10.13/tests/test_typing.py
new/pydantic-1.10.14/tests/test_typing.py
--- old/pydantic-1.10.13/tests/test_typing.py 2023-09-27 18:38:55.000000000
+0200
+++ new/pydantic-1.10.14/tests/test_typing.py 2024-01-19 16:29:06.000000000
+0100
@@ -103,7 +103,6 @@
@pytest.mark.skipif(sys.version_info < (3, 10), reason='NewType class was
added in python 3.10.')
def test_convert_generics_unsettable_args():
class User(NewType):
-
__origin__ = type(list[str])
__args__ = (list['Hero'],)