-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Closed
Labels
Description
Feature Request
pydantic version: 1.5.1
pydantic compiled: False
install path: /home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic
python version: 3.6.5 (default, May 11 2018, 13:30:17) [GCC 7.3.0]
platform: Linux-4.15.0-29deepin-generic-x86_64-with-Deepin-15.11-stable
optional deps. installed: []
Use pydantic to validate frozenset in FastApi, when I open SwaggerUI in Chrome, error occurs.
Add frozenset type in schema.py/field_class_to_schema to resolve the error.
```exception
Traceback (most recent call last):
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/uvicorn/protocols/http/httptools_impl.py", line 385, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
return await self.app(scope, receive, send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/fastapi/applications.py", line 148, in __call__
await super().__call__(scope, receive, send) # pragma: no cover
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/applications.py", line 102, in __call__
await self.middleware_stack(scope, receive, send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/middleware/errors.py", line 181, in __call__
raise exc from None
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc from None
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/routing.py", line 550, in __call__
await route.handle(scope, receive, send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/routing.py", line 227, in handle
await self.app(scope, receive, send)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/starlette/routing.py", line 41, in app
response = await func(request)
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/fastapi/applications.py", line 103, in openapi
return JSONResponse(self.openapi())
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/fastapi/applications.py", line 95, in openapi
openapi_prefix=self.openapi_prefix,
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/fastapi/openapi/utils.py", line 291, in get_openapi
flat_models=flat_models, model_name_map=model_name_map
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/fastapi/utils.py", line 84, in get_model_definitions
model, model_name_map=model_name_map, ref_prefix=REF_PREFIX
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic/schema.py", line 456, in model_process_schema
model, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix, known_models=known_models
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic/schema.py", line 492, in model_type_schema
f, by_alias=by_alias, model_name_map=model_name_map, ref_prefix=ref_prefix, known_models=known_models
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic/schema.py", line 191, in field_schema
known_models=known_models or set(),
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic/schema.py", line 418, in field_type_schema
known_models=known_models,
File "/home/wang/PycharmProjects/FastApiLearn/venv/lib/python3.6/site-packages/pydantic/schema.py", line 686, in field_singleton_schema
raise ValueError(f'Value not declarable with JSON Schema, field: {field}')
ValueError: Value not declarable with JSON Schema, field: name='a' type=frozenset required=True
```schema.py
field_class_to_schema: Tuple[Tuple[Any, Dict[str, Any]], ...] = (
(Path, {'type': 'string', 'format': 'path'}),
(datetime, {'type': 'string', 'format': 'date-time'}),
(date, {'type': 'string', 'format': 'date'}),
(time, {'type': 'string', 'format': 'time'}),
(timedelta, {'type': 'number', 'format': 'time-delta'}),
(IPv4Network, {'type': 'string', 'format': 'ipv4network'}),
(IPv6Network, {'type': 'string', 'format': 'ipv6network'}),
(IPv4Interface, {'type': 'string', 'format': 'ipv4interface'}),
(IPv6Interface, {'type': 'string', 'format': 'ipv6interface'}),
(IPv4Address, {'type': 'string', 'format': 'ipv4'}),
(IPv6Address, {'type': 'string', 'format': 'ipv6'}),
(str, {'type': 'string'}),
(bytes, {'type': 'string', 'format': 'binary'}),
(bool, {'type': 'boolean'}),
(int, {'type': 'integer'}),
(float, {'type': 'number'}),
(Decimal, {'type': 'number'}),
(UUID, {'type': 'string', 'format': 'uuid'}),
(dict, {'type': 'object'}),
(list, {'type': 'array', 'items': {}}),
(tuple, {'type': 'array', 'items': {}}),
(set, {'type': 'array', 'items': {}, 'uniqueItems': True}),
(frozenset, {'type': 'array', 'items': {}, 'uniqueItems': True}), # my addition
)