Conditionally import BaseModel to handle older pydantic v1 versions

This commit is contained in:
Masen Furer 2024-11-08 16:53:48 -08:00
parent e2c6f6983b
commit 18659d0a20
No known key found for this signature in database
GPG Key ID: B0008AD22B3B3A95
2 changed files with 43 additions and 22 deletions

View File

@ -39,8 +39,6 @@ from typing import (
get_type_hints,
)
from pydantic import BaseModel as BaseModelV2
from pydantic.v1 import BaseModel as BaseModelV1
from sqlalchemy.orm import DeclarativeBase
from typing_extensions import Self
@ -63,6 +61,13 @@ try:
except ModuleNotFoundError:
import pydantic
from pydantic import BaseModel as BaseModelV2
try:
from pydantic.v1 import BaseModel as BaseModelV1
except ModuleNotFoundError:
BaseModelV1 = BaseModelV2
import wrapt
from redis.asyncio import Redis
from redis.exceptions import ResponseError

View File

@ -24,9 +24,6 @@ from typing import (
overload,
)
from pydantic import BaseModel as BaseModelV2
from pydantic.v1 import BaseModel as BaseModelV1
from reflex.base import Base
from reflex.constants.colors import Color, format_color
from reflex.utils import types
@ -269,24 +266,12 @@ def serialize_base(value: Base) -> dict:
return {k: v for k, v in value.dict().items() if not callable(v)}
@serializer(to=dict)
def serialize_base_model_v1(model: BaseModelV1) -> dict:
"""Serialize a pydantic v1 BaseModel instance.
Args:
model: The BaseModel to serialize.
Returns:
The serialized BaseModel.
"""
return model.dict()
if BaseModelV2 is not BaseModelV1:
try:
from pydantic.v1 import BaseModel as BaseModelV1
@serializer(to=dict)
def serialize_base_model_v2(model: BaseModelV2) -> dict:
"""Serialize a pydantic v2 BaseModel instance.
def serialize_base_model_v1(model: BaseModelV1) -> dict:
"""Serialize a pydantic v1 BaseModel instance.
Args:
model: The BaseModel to serialize.
@ -294,7 +279,38 @@ if BaseModelV2 is not BaseModelV1:
Returns:
The serialized BaseModel.
"""
return model.model_dump()
return model.dict()
from pydantic import BaseModel as BaseModelV2
if BaseModelV1 is not BaseModelV2:
@serializer(to=dict)
def serialize_base_model_v2(model: BaseModelV2) -> dict:
"""Serialize a pydantic v2 BaseModel instance.
Args:
model: The BaseModel to serialize.
Returns:
The serialized BaseModel.
"""
return model.model_dump()
except ImportError:
# Older pydantic v1 import
from pydantic import BaseModel as BaseModelV1
@serializer(to=dict)
def serialize_base_model_v1(model: BaseModelV1) -> dict:
"""Serialize a pydantic v1 BaseModel instance.
Args:
model: The BaseModel to serialize.
Returns:
The serialized BaseModel.
"""
return model.dict()
@serializer