🐛 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:
Salim Aboubacar 2025-09-20 19:57:18 +02:00 committed by GitHub
parent 606a6828e7
commit 2dc769b121
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 3 deletions

View File

@ -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",

View File

@ -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():