From a75d5f86fbfa47588b09ec3806a08acae6f40669 Mon Sep 17 00:00:00 2001 From: Talley Lambert Date: Tue, 26 Sep 2023 19:40:46 -0400 Subject: [PATCH] build: update pydantic compat to v0.1.0 (#224) * build: update pydantic compat * explicit export --- pyproject.toml | 2 +- .../pydantic_compat.py | 42 ++++--------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1f1d7dc0..8f5371ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ classifiers = [ dynamic = ["version"] dependencies = [ "pydantic >=1.9.0", - "pydantic-compat >=0.0.1", + "pydantic-compat >=0.1.0", "xsdata >=23.5", # 23.6 necessary for codegen, but not for runtime "importlib_metadata; python_version < '3.8'", ] diff --git a/src/xsdata_pydantic_basemodel/pydantic_compat.py b/src/xsdata_pydantic_basemodel/pydantic_compat.py index 1699dddc..7bf4df3e 100644 --- a/src/xsdata_pydantic_basemodel/pydantic_compat.py +++ b/src/xsdata_pydantic_basemodel/pydantic_compat.py @@ -1,36 +1,23 @@ from __future__ import annotations from dataclasses import MISSING, field -from typing import TYPE_CHECKING, Any, Callable, TypeVar +from typing import TYPE_CHECKING, Any, Callable, Iterator, TypeVar -from pydantic import BaseModel, version +from pydantic_compat import PYDANTIC2, Field -if TYPE_CHECKING: - from typing import Iterator - - from pydantic import Field +__all__ = ["Field", "PYDANTIC2"] +if TYPE_CHECKING: + from pydantic import BaseModel -__all__ = ["Field"] -PYDANTIC2 = version.VERSION.startswith("2") -M = TypeVar("M", bound=BaseModel) -C = TypeVar("C", bound=Callable[..., Any]) + M = TypeVar("M", bound=BaseModel) + C = TypeVar("C", bound=Callable[..., Any]) if PYDANTIC2: - from pydantic.fields import Field as _Field from pydantic.fields import FieldInfo from pydantic_core import PydanticUndefined as Undefined - def Field(*args: Any, **kwargs: Any) -> Any: # type: ignore - if "metadata" in kwargs: - kwargs["json_schema_extra"] = kwargs.pop("metadata") - if "regex" in kwargs: - kwargs["pattern"] = kwargs.pop("regex") - if "min_items" in kwargs: - kwargs["min_length"] = kwargs.pop("min_items") - return _Field(*args, **kwargs) # type: ignore - def _get_metadata(pydantic_field: FieldInfo) -> dict[str, Any]: return ( pydantic_field.json_schema_extra @@ -39,14 +26,8 @@ def _get_metadata(pydantic_field: FieldInfo) -> dict[str, Any]: ) else: - from pydantic.fields import Field as _Field from pydantic.fields import Undefined as Undefined # type: ignore - def Field(*args: Any, **kwargs: Any) -> Any: # type: ignore - if "metadata" in kwargs: - kwargs["json_schema_extra"] = kwargs.pop("metadata") - return _Field(*args, **kwargs) # type: ignore - def _get_metadata(pydantic_field) -> dict: # type: ignore extra = pydantic_field.field_info.extra if "json_schema_extra" in extra: @@ -74,16 +55,9 @@ def _pydantic_field_to_dataclass_field(name: str, pydantic_field: FieldInfo) -> metadata = _get_metadata(pydantic_field) dataclass_field = field( # type: ignore - default=default, - default_factory=default_factory, - # init=True, - # hash=None, - # compare=True, - metadata=metadata, - # kw_only=MISSING, + default=default, default_factory=default_factory, metadata=metadata ) dataclass_field.name = name - # dataclass_field.type = pydantic_field.type_ return dataclass_field