Browse Source

Merge c2766f1ecc into 460f8d2cc8

pull/5718/merge
Guillaume Gelin 11 hours ago
committed by GitHub
parent
commit
49b2fecab1
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 24
      fastapi/encoders.py

24
fastapi/encoders.py

@ -1,6 +1,6 @@
import dataclasses
import datetime
from collections import defaultdict, deque
from collections import deque
from collections.abc import Callable
from decimal import Decimal
from enum import Enum
@ -112,20 +112,6 @@ ENCODERS_BY_TYPE: dict[type[Any], Callable[[Any], Any]] = {
}
def generate_encoders_by_class_tuples(
type_encoder_map: dict[Any, Callable[[Any], Any]],
) -> dict[Callable[[Any], Any], tuple[Any, ...]]:
encoders_by_class_tuples: dict[Callable[[Any], Any], tuple[Any, ...]] = defaultdict(
tuple
)
for type_, encoder in type_encoder_map.items():
encoders_by_class_tuples[encoder] += (type_,)
return encoders_by_class_tuples
encoders_by_class_tuples = generate_encoders_by_class_tuples(ENCODERS_BY_TYPE)
def jsonable_encoder(
obj: Annotated[
Any,
@ -331,11 +317,9 @@ def jsonable_encoder(
)
return encoded_list
if type(obj) in ENCODERS_BY_TYPE:
return ENCODERS_BY_TYPE[type(obj)](obj)
for encoder, classes_tuple in encoders_by_class_tuples.items():
if isinstance(obj, classes_tuple):
return encoder(obj)
for base in obj.__class__.__mro__[:-1]:
if base in ENCODERS_BY_TYPE:
return ENCODERS_BY_TYPE[base](obj)
if is_pydantic_v1_model_instance(obj):
raise PydanticV1NotSupportedError(
"pydantic.v1 models are no longer supported by FastAPI."

Loading…
Cancel
Save