diff --git a/changes/1557-wangpeibao.md b/changes/1557-wangpeibao.md new file mode 100644 index 0000000000..f4aa9355c1 --- /dev/null +++ b/changes/1557-wangpeibao.md @@ -0,0 +1 @@ +change `schema.field_class_to_schema` to support `frozenset` in schema. diff --git a/pydantic/schema.py b/pydantic/schema.py index 3ca516a906..9562e74b46 100644 --- a/pydantic/schema.py +++ b/pydantic/schema.py @@ -623,6 +623,7 @@ def field_singleton_sub_fields_schema( (list, {'type': 'array', 'items': {}}), (tuple, {'type': 'array', 'items': {}}), (set, {'type': 'array', 'items': {}, 'uniqueItems': True}), + (frozenset, {'type': 'array', 'items': {}, 'uniqueItems': True}), ) json_scheme = {'type': 'string', 'format': 'json-string'} diff --git a/tests/test_schema.py b/tests/test_schema.py index ce447d5ec7..3175345332 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -1837,6 +1837,9 @@ class Model(BaseModel): def test_frozen_set(): class Model(BaseModel): a: FrozenSet[int] = frozenset({1, 2, 3}) + b: FrozenSet = frozenset({1, 2, 3}) + c: frozenset = frozenset({1, 2, 3}) + d: frozenset = ... assert Model.schema() == { 'title': 'Model', @@ -1848,8 +1851,12 @@ class Model(BaseModel): 'type': 'array', 'items': {'type': 'integer'}, 'uniqueItems': True, - } + }, + 'b': {'title': 'B', 'default': frozenset({1, 2, 3}), 'type': 'array', 'items': {}, 'uniqueItems': True}, + 'c': {'title': 'C', 'default': frozenset({1, 2, 3}), 'type': 'array', 'items': {}, 'uniqueItems': True}, + 'd': {'title': 'D', 'type': 'array', 'items': {}, 'uniqueItems': True}, }, + 'required': ['d'], }