From 77e813dd6fe270f89dedd22c60024872e695ddfb Mon Sep 17 00:00:00 2001 From: Salim Aboubacar Date: Tue, 31 May 2022 18:38:05 +0200 Subject: [PATCH 1/3] Update custom encoders test to test a case other than pydantic default encoding --- tests/test_jsonable_encoder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_jsonable_encoder.py b/tests/test_jsonable_encoder.py index f4fdcf601..655acd6a6 100644 --- a/tests/test_jsonable_encoder.py +++ b/tests/test_jsonable_encoder.py @@ -206,9 +206,9 @@ 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") def test_custom_enum_encoders(): From d09f759d9758909d610d85126d70ec77521039ee Mon Sep 17 00:00:00 2001 From: Salim Aboubacar Date: Tue, 31 May 2022 18:40:44 +0200 Subject: [PATCH 2/3] Add failing test --- tests/test_jsonable_encoder.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_jsonable_encoder.py b/tests/test_jsonable_encoder.py index 655acd6a6..82209e821 100644 --- a/tests/test_jsonable_encoder.py +++ b/tests/test_jsonable_encoder.py @@ -210,6 +210,9 @@ def test_custom_encoders(): ) 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 custom_enum_encoder(v: Enum): From 76cc8d7c247152b0dc9b759cb9ad22d07be27f99 Mon Sep 17 00:00:00 2001 From: Salim Aboubacar Date: Tue, 31 May 2022 18:42:23 +0200 Subject: [PATCH 3/3] Remove side effect in jsonable_encoder to fix failing test --- fastapi/encoders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastapi/encoders.py b/fastapi/encoders.py index 6bde9f4ab..254cdc949 100644 --- a/fastapi/encoders.py +++ b/fastapi/encoders.py @@ -52,7 +52,7 @@ def jsonable_encoder( if isinstance(obj, BaseModel): encoder = getattr(obj.__config__, "json_encoders", {}) if custom_encoder: - encoder.update(custom_encoder) + encoder = {**encoder, **custom_encoder} obj_dict = obj.dict( include=include, exclude=exclude,