From 669547490f549a905e40e4e59d37abcbba575d11 Mon Sep 17 00:00:00 2001 From: Michael Milton Date: Fri, 15 Jul 2022 12:51:10 +1000 Subject: [PATCH 1/3] Update to PEP 681 dataclasses --- pydantic/dataclasses.py | 9 +++++---- pydantic/main.py | 13 ++----------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/pydantic/dataclasses.py b/pydantic/dataclasses.py index 692bfb9f3a..39bdf5c335 100644 --- a/pydantic/dataclasses.py +++ b/pydantic/dataclasses.py @@ -4,9 +4,10 @@ from .error_wrappers import ValidationError from .errors import DataclassTypeError from .fields import Field, FieldInfo, Required, Undefined -from .main import __dataclass_transform__, create_model, validate_model +from .main import create_model, validate_model from .typing import resolve_annotations from .utils import ClassAttribute +from typing_extensions import dataclass_transform if TYPE_CHECKING: from .config import BaseConfig @@ -206,7 +207,7 @@ def _process_class( return cls -@__dataclass_transform__(kw_only_default=True, field_descriptors=(Field, FieldInfo)) +@dataclass_transform(kw_only_default=True, field_descriptors=(Field, FieldInfo)) @overload def dataclass( *, @@ -221,7 +222,7 @@ def dataclass( ... -@__dataclass_transform__(kw_only_default=True, field_descriptors=(Field, FieldInfo)) +@dataclass_transform(kw_only_default=True, field_descriptors=(Field, FieldInfo)) @overload def dataclass( _cls: Type[Any], @@ -237,7 +238,7 @@ def dataclass( ... -@__dataclass_transform__(kw_only_default=True, field_descriptors=(Field, FieldInfo)) +@dataclass_transform(kw_only_default=True, field_descriptors=(Field, FieldInfo)) def dataclass( _cls: Optional[Type[Any]] = None, *, diff --git a/pydantic/main.py b/pydantic/main.py index 0c20d9e69d..94859c362e 100644 --- a/pydantic/main.py +++ b/pydantic/main.py @@ -23,6 +23,7 @@ no_type_check, overload, ) +from typing_extensions import dataclass_transform from .class_validators import ValidatorGroup, extract_root_validators, extract_validators, inherit_validators from .config import BaseConfig, Extra, inherit_config, prepare_config @@ -94,16 +95,6 @@ _T = TypeVar('_T') -def __dataclass_transform__( - *, - eq_default: bool = True, - order_default: bool = False, - kw_only_default: bool = False, - field_descriptors: Tuple[Union[type, Callable[..., Any]], ...] = (()), -) -> Callable[[_T], _T]: - return lambda a: a - - def validate_custom_root_type(fields: Dict[str, ModelField]) -> None: if len(fields) > 1: raise ValueError(f'{ROOT_KEY} cannot be mixed with other fields') @@ -127,7 +118,7 @@ def hash_function(self_: Any) -> int: _is_base_model_class_defined = False -@__dataclass_transform__(kw_only_default=True, field_descriptors=(Field, FieldInfo)) +@dataclass_transform(kw_only_default=True, field_descriptors=(Field, FieldInfo)) class ModelMetaclass(ABCMeta): @no_type_check # noqa C901 def __new__(mcs, name, bases, namespace, **kwargs): # noqa C901 From 3c0e8638ac2f05f21d61a4cc0c2a5087b003fe2c Mon Sep 17 00:00:00 2001 From: Michael Milton Date: Fri, 15 Jul 2022 13:37:08 +1000 Subject: [PATCH 2/3] Add changes file --- changes/4241-multimeric.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/4241-multimeric.md diff --git a/changes/4241-multimeric.md b/changes/4241-multimeric.md new file mode 100644 index 0000000000..51a4deace2 --- /dev/null +++ b/changes/4241-multimeric.md @@ -0,0 +1 @@ +The use of `__dataclass_transform__` has been replaced by `typing_extensions.dataclass_transform`, which is the preferred way to mark pydantic models as a dataclass under [PEP 681](https://peps.python.org/pep-0681/). From 52f05ff0665cdfb1289b4603cefdec43797cfa03 Mon Sep 17 00:00:00 2001 From: Michael Milton Date: Fri, 15 Jul 2022 13:43:40 +1000 Subject: [PATCH 3/3] Pre-commit --- pydantic/dataclasses.py | 3 ++- pydantic/main.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pydantic/dataclasses.py b/pydantic/dataclasses.py index 39bdf5c335..bcd0fa584c 100644 --- a/pydantic/dataclasses.py +++ b/pydantic/dataclasses.py @@ -1,5 +1,7 @@ from typing import TYPE_CHECKING, Any, Callable, ClassVar, Dict, Optional, Type, TypeVar, Union, overload +from typing_extensions import dataclass_transform + from .class_validators import gather_all_validators from .error_wrappers import ValidationError from .errors import DataclassTypeError @@ -7,7 +9,6 @@ from .main import create_model, validate_model from .typing import resolve_annotations from .utils import ClassAttribute -from typing_extensions import dataclass_transform if TYPE_CHECKING: from .config import BaseConfig diff --git a/pydantic/main.py b/pydantic/main.py index 94859c362e..d5299f8f56 100644 --- a/pydantic/main.py +++ b/pydantic/main.py @@ -23,6 +23,7 @@ no_type_check, overload, ) + from typing_extensions import dataclass_transform from .class_validators import ValidatorGroup, extract_root_validators, extract_validators, inherit_validators