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:
|
||||
encoders = getattr(obj.__config__, "json_encoders", {}) # type: ignore[attr-defined]
|
||||
if custom_encoder:
|
||||
encoders.update(custom_encoder)
|
||||
encoders = {**encoders, **custom_encoder}
|
||||
obj_dict = _model_dump(
|
||||
obj,
|
||||
mode="json",
|
||||
|
|
|
|||
|
|
@ -216,9 +216,12 @@ def test_custom_encoders():
|
|||
instance = MyModel(dt_field=safe_datetime.now())
|
||||
|
||||
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():
|
||||
|
|
|
|||
Loading…
Reference in New Issue