From 2dc769b12174b0f7ad5c2ac16419fc4027ad8372 Mon Sep 17 00:00:00 2001 From: Salim Aboubacar Date: Sat, 20 Sep 2025 19:57:18 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20`jsonable=5Fencoder`=20alt?= =?UTF-8?q?ers=20`json=5Fencoders`=20of=20Pydantic=20v1=20objects=20(#4972?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastián Ramírez Co-authored-by: Yurii Motov --- fastapi/encoders.py | 2 +- tests/test_jsonable_encoder.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fastapi/encoders.py b/fastapi/encoders.py index 0ad548b94..b037f8bb5 100644 --- a/fastapi/encoders.py +++ b/fastapi/encoders.py @@ -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", diff --git a/tests/test_jsonable_encoder.py b/tests/test_jsonable_encoder.py index 1906d6bf1..447c5b4d6 100644 --- a/tests/test_jsonable_encoder.py +++ b/tests/test_jsonable_encoder.py @@ -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():