DCsunset
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
21 additions and
1 deletions
-
fastapi/encoders.py
-
tests/test_jsonable_encoder.py
|
|
@ -74,8 +74,12 @@ def jsonable_encoder( |
|
|
|
obj_dict = dataclasses.asdict(obj) |
|
|
|
return jsonable_encoder( |
|
|
|
obj_dict, |
|
|
|
exclude_none=exclude_none, |
|
|
|
include=include, |
|
|
|
exclude=exclude, |
|
|
|
by_alias=by_alias, |
|
|
|
exclude_unset=exclude_unset, |
|
|
|
exclude_defaults=exclude_defaults, |
|
|
|
exclude_none=exclude_none, |
|
|
|
custom_encoder=custom_encoder, |
|
|
|
sqlalchemy_safe=sqlalchemy_safe, |
|
|
|
) |
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
from dataclasses import dataclass |
|
|
|
from datetime import datetime, timezone |
|
|
|
from enum import Enum |
|
|
|
from pathlib import PurePath, PurePosixPath, PureWindowsPath |
|
|
@ -19,6 +20,12 @@ class Pet: |
|
|
|
self.name = name |
|
|
|
|
|
|
|
|
|
|
|
@dataclass |
|
|
|
class Item: |
|
|
|
name: str |
|
|
|
count: int |
|
|
|
|
|
|
|
|
|
|
|
class DictablePerson(Person): |
|
|
|
def __iter__(self): |
|
|
|
return ((k, v) for k, v in self.__dict__.items()) |
|
|
@ -131,6 +138,15 @@ def test_encode_dictable(): |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
def test_encode_dataclass(): |
|
|
|
item = Item(name="foo", count=100) |
|
|
|
assert jsonable_encoder(item) == {"name": "foo", "count": 100} |
|
|
|
assert jsonable_encoder(item, include={"name"}) == {"name": "foo"} |
|
|
|
assert jsonable_encoder(item, exclude={"count"}) == {"name": "foo"} |
|
|
|
assert jsonable_encoder(item, include={}) == {} |
|
|
|
assert jsonable_encoder(item, exclude={}) == {"name": "foo", "count": 100} |
|
|
|
|
|
|
|
|
|
|
|
def test_encode_unsupported(): |
|
|
|
unserializable = Unserializable() |
|
|
|
with pytest.raises(ValueError): |
|
|
|