Skip to content

Commit 1f21b16

Browse files
craniumtiangolo
andauthored
✨ Add support for deque objects and children in jsonable_encoder (fastapi#9433)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
1 parent d409c05 commit 1f21b16

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

fastapi/encoders.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import dataclasses
2-
from collections import defaultdict
2+
from collections import defaultdict, deque
33
from enum import Enum
44
from pathlib import PurePath
55
from types import GeneratorType
@@ -124,7 +124,7 @@ def jsonable_encoder(
124124
)
125125
encoded_dict[encoded_key] = encoded_value
126126
return encoded_dict
127-
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
127+
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple, deque)):
128128
encoded_list = []
129129
for item in obj:
130130
encoded_list.append(

tests/test_jsonable_encoder.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import deque
12
from dataclasses import dataclass
23
from datetime import datetime, timezone
34
from enum import Enum
@@ -237,3 +238,12 @@ def test_encode_model_with_path(model_with_path):
237238
def test_encode_root():
238239
model = ModelWithRoot(__root__="Foo")
239240
assert jsonable_encoder(model) == "Foo"
241+
242+
243+
def test_encode_deque_encodes_child_models():
244+
class Model(BaseModel):
245+
test: str
246+
247+
dq = deque([Model(test="test")])
248+
249+
assert jsonable_encoder(dq)[0]["test"] == "test"

0 commit comments

Comments
 (0)