Replacing encode_default instance check with strict type check (#3197)

* Replacing encode_default instance check with strict type check

* Adding change notes

* Changing to dictionary indexing in tests

* Adding explicit Enum check and returning its value
This commit is contained in:
João M. Martins
2021-12-08 22:52:25 +01:00
committed by GitHub
parent a3f180eb2b
commit dc4710b56c
3 changed files with 24 additions and 1 deletions
+1
View File
@@ -0,0 +1 @@
Always use `Enum` value as default in generated JSON schema.
+3 -1
View File
@@ -922,7 +922,9 @@ def multitypes_literal_field_for_schema(values: Tuple[Any, ...], field: ModelFie
def encode_default(dft: Any) -> Any:
if isinstance(dft, (int, float, str)):
if isinstance(dft, Enum):
return dft.value
elif isinstance(dft, (int, float, str)):
return dft
elif sequence_like(dft):
t = dft.__class__
+20
View File
@@ -1435,6 +1435,26 @@ def test_list_default():
}
def test_enum_str_default():
class MyEnum(str, Enum):
FOO = 'foo'
class UserModel(BaseModel):
friends: MyEnum = MyEnum.FOO
assert UserModel.schema()['properties']['friends']['default'] is MyEnum.FOO.value
def test_enum_int_default():
class MyEnum(IntEnum):
FOO = 1
class UserModel(BaseModel):
friends: MyEnum = MyEnum.FOO
assert UserModel.schema()['properties']['friends']['default'] is MyEnum.FOO.value
def test_dict_default():
class UserModel(BaseModel):
friends: Dict[str, float] = {'a': 1.1, 'b': 2.2}