|
|
@ -191,7 +191,7 @@ def jsonable_encoder( |
|
|
if exclude is not None and not isinstance(exclude, (set, dict)): |
|
|
if exclude is not None and not isinstance(exclude, (set, dict)): |
|
|
exclude = set(exclude) |
|
|
exclude = set(exclude) |
|
|
|
|
|
|
|
|
return encode_value( |
|
|
return _encode_value( |
|
|
obj, |
|
|
obj, |
|
|
include=include, |
|
|
include=include, |
|
|
exclude=exclude, |
|
|
exclude=exclude, |
|
|
@ -204,7 +204,7 @@ def jsonable_encoder( |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def encode_value( |
|
|
def _encode_value( |
|
|
obj: Any, |
|
|
obj: Any, |
|
|
include: Optional[IncEx] = None, |
|
|
include: Optional[IncEx] = None, |
|
|
exclude: Optional[IncEx] = None, |
|
|
exclude: Optional[IncEx] = None, |
|
|
@ -216,7 +216,7 @@ def encode_value( |
|
|
sqlalchemy_safe: bool = True, |
|
|
sqlalchemy_safe: bool = True, |
|
|
) -> Any: |
|
|
) -> Any: |
|
|
if custom_encoder: |
|
|
if custom_encoder: |
|
|
encoder = find_encoder(obj, custom_encoder) |
|
|
encoder = _find_encoder(obj, custom_encoder) |
|
|
if encoder: |
|
|
if encoder: |
|
|
return encoder(obj) |
|
|
return encoder(obj) |
|
|
|
|
|
|
|
|
@ -226,7 +226,7 @@ def encode_value( |
|
|
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple, deque)): |
|
|
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple, deque)): |
|
|
encoded_list = [] |
|
|
encoded_list = [] |
|
|
for item in obj: |
|
|
for item in obj: |
|
|
value = encode_value( |
|
|
value = _encode_value( |
|
|
item, |
|
|
item, |
|
|
include=include, |
|
|
include=include, |
|
|
exclude=exclude, |
|
|
exclude=exclude, |
|
|
@ -242,7 +242,7 @@ def encode_value( |
|
|
return encoded_list |
|
|
return encoded_list |
|
|
|
|
|
|
|
|
if isinstance(obj, dict): |
|
|
if isinstance(obj, dict): |
|
|
return encode_dict( |
|
|
return _encode_dict( |
|
|
obj, |
|
|
obj, |
|
|
include=include, |
|
|
include=include, |
|
|
exclude=exclude, |
|
|
exclude=exclude, |
|
|
@ -276,7 +276,7 @@ def encode_value( |
|
|
if "__root__" in obj_dict: |
|
|
if "__root__" in obj_dict: |
|
|
obj_dict = obj_dict["__root__"] |
|
|
obj_dict = obj_dict["__root__"] |
|
|
|
|
|
|
|
|
return encode_value( |
|
|
return _encode_value( |
|
|
obj_dict, |
|
|
obj_dict, |
|
|
exclude_none=exclude_none, |
|
|
exclude_none=exclude_none, |
|
|
exclude_defaults=exclude_defaults, |
|
|
exclude_defaults=exclude_defaults, |
|
|
@ -288,7 +288,7 @@ def encode_value( |
|
|
if dataclasses.is_dataclass(obj): |
|
|
if dataclasses.is_dataclass(obj): |
|
|
assert not isinstance(obj, type) |
|
|
assert not isinstance(obj, type) |
|
|
obj_dict = dataclasses.asdict(obj) |
|
|
obj_dict = dataclasses.asdict(obj) |
|
|
return encode_dict( |
|
|
return _encode_dict( |
|
|
obj_dict, |
|
|
obj_dict, |
|
|
include=include, |
|
|
include=include, |
|
|
exclude=exclude, |
|
|
exclude=exclude, |
|
|
@ -300,7 +300,7 @@ def encode_value( |
|
|
sqlalchemy_safe=sqlalchemy_safe, |
|
|
sqlalchemy_safe=sqlalchemy_safe, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
encoder = find_encoder(obj, ENCODERS_BY_TYPE) |
|
|
encoder = _find_encoder(obj, ENCODERS_BY_TYPE) |
|
|
if encoder: |
|
|
if encoder: |
|
|
return encoder(obj) |
|
|
return encoder(obj) |
|
|
|
|
|
|
|
|
@ -314,7 +314,7 @@ def encode_value( |
|
|
errors.append(e) |
|
|
errors.append(e) |
|
|
raise ValueError(errors) from e |
|
|
raise ValueError(errors) from e |
|
|
|
|
|
|
|
|
return encode_dict( |
|
|
return _encode_dict( |
|
|
obj_dict, |
|
|
obj_dict, |
|
|
include=include, |
|
|
include=include, |
|
|
exclude=exclude, |
|
|
exclude=exclude, |
|
|
@ -327,7 +327,7 @@ def encode_value( |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def encode_dict( |
|
|
def _encode_dict( |
|
|
obj: Dict[Any, Any], |
|
|
obj: Dict[Any, Any], |
|
|
include: Optional[IncEx] = None, |
|
|
include: Optional[IncEx] = None, |
|
|
exclude: Optional[IncEx] = None, |
|
|
exclude: Optional[IncEx] = None, |
|
|
@ -357,7 +357,7 @@ def encode_dict( |
|
|
|
|
|
|
|
|
# TODO: use exclude_defaults when encoding keys and values |
|
|
# TODO: use exclude_defaults when encoding keys and values |
|
|
# This is a bug from the original implementation, but is a breaking change |
|
|
# This is a bug from the original implementation, but is a breaking change |
|
|
encoded_key = encode_value( |
|
|
encoded_key = _encode_value( |
|
|
key, |
|
|
key, |
|
|
by_alias=by_alias, |
|
|
by_alias=by_alias, |
|
|
exclude_unset=exclude_unset, |
|
|
exclude_unset=exclude_unset, |
|
|
@ -365,7 +365,7 @@ def encode_dict( |
|
|
custom_encoder=custom_encoder, |
|
|
custom_encoder=custom_encoder, |
|
|
sqlalchemy_safe=sqlalchemy_safe, |
|
|
sqlalchemy_safe=sqlalchemy_safe, |
|
|
) |
|
|
) |
|
|
encoded_value = encode_value( |
|
|
encoded_value = _encode_value( |
|
|
value, |
|
|
value, |
|
|
by_alias=by_alias, |
|
|
by_alias=by_alias, |
|
|
exclude_unset=exclude_unset, |
|
|
exclude_unset=exclude_unset, |
|
|
@ -379,7 +379,7 @@ def encode_dict( |
|
|
return encoded_dict |
|
|
return encoded_dict |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def find_encoder( |
|
|
def _find_encoder( |
|
|
value: Any, encoders: Dict[Any, Callable[[Any], Any]] |
|
|
value: Any, encoders: Dict[Any, Callable[[Any], Any]] |
|
|
) -> Optional[Callable[[Any], Any]]: |
|
|
) -> Optional[Callable[[Any], Any]]: |
|
|
# fastpath for exact class match |
|
|
# fastpath for exact class match |
|
|
|