mirror of
https://github.com/rjNemo/fastapi
synced 2026-06-11 21:16:45 +00:00
🐛 Fix issues introduced by removing sqlalchemy safeguard in jsonable_encoder (#1987)
This commit is contained in:
parent
2d7038e03e
commit
0dfde6e284
1 changed files with 14 additions and 2 deletions
|
|
@ -32,6 +32,7 @@ def jsonable_encoder(
|
||||||
exclude_defaults: bool = False,
|
exclude_defaults: bool = False,
|
||||||
exclude_none: bool = False,
|
exclude_none: bool = False,
|
||||||
custom_encoder: dict = {},
|
custom_encoder: dict = {},
|
||||||
|
sqlalchemy_safe: bool = True,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
if include is not None and not isinstance(include, set):
|
if include is not None and not isinstance(include, set):
|
||||||
include = set(include)
|
include = set(include)
|
||||||
|
|
@ -56,6 +57,7 @@ def jsonable_encoder(
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
exclude_defaults=exclude_defaults,
|
exclude_defaults=exclude_defaults,
|
||||||
custom_encoder=encoder,
|
custom_encoder=encoder,
|
||||||
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
if isinstance(obj, Enum):
|
if isinstance(obj, Enum):
|
||||||
return obj.value
|
return obj.value
|
||||||
|
|
@ -66,8 +68,14 @@ def jsonable_encoder(
|
||||||
if isinstance(obj, dict):
|
if isinstance(obj, dict):
|
||||||
encoded_dict = {}
|
encoded_dict = {}
|
||||||
for key, value in obj.items():
|
for key, value in obj.items():
|
||||||
if (value is not None or not exclude_none) and (
|
if (
|
||||||
(include and key in include) or not exclude or key not in exclude
|
(
|
||||||
|
not sqlalchemy_safe
|
||||||
|
or (not isinstance(key, str))
|
||||||
|
or (not key.startswith("_sa"))
|
||||||
|
)
|
||||||
|
and (value is not None or not exclude_none)
|
||||||
|
and ((include and key in include) or not exclude or key not in exclude)
|
||||||
):
|
):
|
||||||
encoded_key = jsonable_encoder(
|
encoded_key = jsonable_encoder(
|
||||||
key,
|
key,
|
||||||
|
|
@ -75,6 +83,7 @@ def jsonable_encoder(
|
||||||
exclude_unset=exclude_unset,
|
exclude_unset=exclude_unset,
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
custom_encoder=custom_encoder,
|
custom_encoder=custom_encoder,
|
||||||
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
encoded_value = jsonable_encoder(
|
encoded_value = jsonable_encoder(
|
||||||
value,
|
value,
|
||||||
|
|
@ -82,6 +91,7 @@ def jsonable_encoder(
|
||||||
exclude_unset=exclude_unset,
|
exclude_unset=exclude_unset,
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
custom_encoder=custom_encoder,
|
custom_encoder=custom_encoder,
|
||||||
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
encoded_dict[encoded_key] = encoded_value
|
encoded_dict[encoded_key] = encoded_value
|
||||||
return encoded_dict
|
return encoded_dict
|
||||||
|
|
@ -98,6 +108,7 @@ def jsonable_encoder(
|
||||||
exclude_defaults=exclude_defaults,
|
exclude_defaults=exclude_defaults,
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
custom_encoder=custom_encoder,
|
custom_encoder=custom_encoder,
|
||||||
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return encoded_list
|
return encoded_list
|
||||||
|
|
@ -133,4 +144,5 @@ def jsonable_encoder(
|
||||||
exclude_defaults=exclude_defaults,
|
exclude_defaults=exclude_defaults,
|
||||||
exclude_none=exclude_none,
|
exclude_none=exclude_none,
|
||||||
custom_encoder=custom_encoder,
|
custom_encoder=custom_encoder,
|
||||||
|
sqlalchemy_safe=sqlalchemy_safe,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue