mirror of https://github.com/tiangolo/fastapi.git
Fix custom encoders for BaseModel python-mode dump
This commit is contained in:
parent
eb6851dd4b
commit
7fedc03f64
|
|
@ -225,7 +225,7 @@ def jsonable_encoder(
|
||||||
exclude = set(exclude) # type: ignore[assignment] # ty: ignore[unused-ignore-comment]
|
exclude = set(exclude) # type: ignore[assignment] # ty: ignore[unused-ignore-comment]
|
||||||
if isinstance(obj, BaseModel):
|
if isinstance(obj, BaseModel):
|
||||||
obj_dict = obj.model_dump(
|
obj_dict = obj.model_dump(
|
||||||
mode="json",
|
mode="python",
|
||||||
include=include,
|
include=include,
|
||||||
exclude=exclude,
|
exclude=exclude,
|
||||||
by_alias=by_alias,
|
by_alias=by_alias,
|
||||||
|
|
@ -237,6 +237,7 @@ def jsonable_encoder(
|
||||||
obj_dict,
|
obj_dict,
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
exclude_defaults=exclude_defaults,
|
exclude_defaults=exclude_defaults,
|
||||||
|
custom_encoder=custom_encoder,
|
||||||
sqlalchemy_safe=sqlalchemy_safe,
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
if dataclasses.is_dataclass(obj):
|
if dataclasses.is_dataclass(obj):
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,19 @@ def test_custom_encoders():
|
||||||
assert encoded_instance2["dt_field"] == instance["dt_field"].isoformat()
|
assert encoded_instance2["dt_field"] == instance["dt_field"].isoformat()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_custom_encoders_applied_to_model_dump_python_values():
|
||||||
|
class ModelWithDecimal(BaseModel):
|
||||||
|
value: Decimal
|
||||||
|
|
||||||
|
instance = ModelWithDecimal(value=Decimal("1.23"))
|
||||||
|
|
||||||
|
encoded_instance = jsonable_encoder(
|
||||||
|
instance, custom_encoder={Decimal: lambda o: f"{o} custom"}
|
||||||
|
)
|
||||||
|
assert encoded_instance == {"value": "1.23 custom"}
|
||||||
|
|
||||||
|
|
||||||
def test_custom_enum_encoders():
|
def test_custom_enum_encoders():
|
||||||
def custom_enum_encoder(v: Enum):
|
def custom_enum_encoder(v: Enum):
|
||||||
return v.value.lower()
|
return v.value.lower()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue