mirror of https://github.com/tiangolo/fastapi.git
🐛 Fix `jsonable_encoder` alters `json_encoders` of Pydantic v1 objects (#4972)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com> Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
This commit is contained in:
parent
606a6828e7
commit
2dc769b121
|
|
@ -219,7 +219,7 @@ def jsonable_encoder(
|
||||||
if not PYDANTIC_V2:
|
if not PYDANTIC_V2:
|
||||||
encoders = getattr(obj.__config__, "json_encoders", {}) # type: ignore[attr-defined]
|
encoders = getattr(obj.__config__, "json_encoders", {}) # type: ignore[attr-defined]
|
||||||
if custom_encoder:
|
if custom_encoder:
|
||||||
encoders.update(custom_encoder)
|
encoders = {**encoders, **custom_encoder}
|
||||||
obj_dict = _model_dump(
|
obj_dict = _model_dump(
|
||||||
obj,
|
obj,
|
||||||
mode="json",
|
mode="json",
|
||||||
|
|
|
||||||
|
|
@ -216,9 +216,12 @@ def test_custom_encoders():
|
||||||
instance = MyModel(dt_field=safe_datetime.now())
|
instance = MyModel(dt_field=safe_datetime.now())
|
||||||
|
|
||||||
encoded_instance = jsonable_encoder(
|
encoded_instance = jsonable_encoder(
|
||||||
instance, custom_encoder={safe_datetime: lambda o: o.isoformat()}
|
instance, custom_encoder={safe_datetime: lambda o: o.strftime("%H:%M:%S")}
|
||||||
)
|
)
|
||||||
assert encoded_instance["dt_field"] == instance.dt_field.isoformat()
|
assert encoded_instance["dt_field"] == instance.dt_field.strftime("%H:%M:%S")
|
||||||
|
|
||||||
|
encoded_instance2 = jsonable_encoder(instance)
|
||||||
|
assert encoded_instance2["dt_field"] == instance.dt_field.isoformat()
|
||||||
|
|
||||||
|
|
||||||
def test_custom_enum_encoders():
|
def test_custom_enum_encoders():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue