|
@@ -8,16 +8,20 @@ from ipaddress import IPv4Address, IPv4Interface, IPv4Network, IPv6Address, IPv6
|
|
|
from pathlib import Path, PurePath
|
|
|
from re import Pattern
|
|
|
from types import GeneratorType
|
|
|
-from typing import Any, Optional, Union
|
|
|
+from typing import Any, Literal, Optional, Union
|
|
|
from uuid import UUID
|
|
|
|
|
|
from pydantic import BaseModel
|
|
|
from pydantic.networks import AnyUrl, NameEmail
|
|
|
from pydantic.types import SecretBytes, SecretStr
|
|
|
+from pydantic_core import Url
|
|
|
from pydantic_extra_types.color import Color
|
|
|
|
|
|
-from ._compat import PYDANTIC_V2, Url, _model_dump
|
|
|
|
|
|
+def _model_dump(
|
|
|
+ model: BaseModel, mode: Literal["json", "python"] = "json", **kwargs: Any
|
|
|
+) -> Any:
|
|
|
+ return model.model_dump(mode=mode, **kwargs)
|
|
|
|
|
|
# Taken from Pydantic v1 as is
|
|
|
def isoformat(o: Union[datetime.date, datetime.time]) -> str:
|
|
@@ -109,12 +113,6 @@ def jsonable_encoder(
|
|
|
if isinstance(obj, encoder_type):
|
|
|
return encoder_instance(obj)
|
|
|
if isinstance(obj, BaseModel):
|
|
|
- # TODO: remove when deprecating Pydantic v1
|
|
|
- encoders: dict[Any, Any] = {}
|
|
|
- if not PYDANTIC_V2:
|
|
|
- encoders = getattr(obj.__config__, "json_encoders", {}) # type: ignore[attr-defined]
|
|
|
- if custom_encoder:
|
|
|
- encoders.update(custom_encoder)
|
|
|
obj_dict = _model_dump(
|
|
|
obj,
|
|
|
mode="json",
|
|
@@ -131,8 +129,6 @@ def jsonable_encoder(
|
|
|
obj_dict,
|
|
|
exclude_none=exclude_none,
|
|
|
exclude_defaults=exclude_defaults,
|
|
|
- # TODO: remove when deprecating Pydantic v1
|
|
|
- custom_encoder=encoders,
|
|
|
sqlalchemy_safe=sqlalchemy_safe,
|
|
|
)
|
|
|
if dataclasses.is_dataclass(obj):
|