]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
✨ Add support for `deque` objects and children in `jsonable_encoder` (#9433)
authorCarson Crane <cranium@users.noreply.github.com>
Wed, 28 Jun 2023 16:39:10 +0000 (09:39 -0700)
committerGitHub <noreply@github.com>
Wed, 28 Jun 2023 16:39:10 +0000 (18:39 +0200)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
fastapi/encoders.py
tests/test_jsonable_encoder.py

index 2f95bcbf6692d7e5cd18a41338025e6e68b20ace..94f41bfa18cac86390b0824b3c84580124d4aea2 100644 (file)
@@ -1,5 +1,5 @@
 import dataclasses
-from collections import defaultdict
+from collections import defaultdict, deque
 from enum import Enum
 from pathlib import PurePath
 from types import GeneratorType
@@ -124,7 +124,7 @@ def jsonable_encoder(
                 )
                 encoded_dict[encoded_key] = encoded_value
         return encoded_dict
-    if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
+    if isinstance(obj, (list, set, frozenset, GeneratorType, tuple, deque)):
         encoded_list = []
         for item in obj:
             encoded_list.append(
index f4fdcf6014a4377fc8cae84e35b7ba71d1454080..1f43c33c75609cc8ec79d824fbae317234584007 100644 (file)
@@ -1,3 +1,4 @@
+from collections import deque
 from dataclasses import dataclass
 from datetime import datetime, timezone
 from enum import Enum
@@ -237,3 +238,12 @@ def test_encode_model_with_path(model_with_path):
 def test_encode_root():
     model = ModelWithRoot(__root__="Foo")
     assert jsonable_encoder(model) == "Foo"
+
+
+def test_encode_deque_encodes_child_models():
+    class Model(BaseModel):
+        test: str
+
+    dq = deque([Model(test="test")])
+
+    assert jsonable_encoder(dq)[0]["test"] == "test"