🐛 Fix Python 3.7 specific list query handling

This commit is contained in:
Sebastián Ramírez 2018-12-30 21:43:34 +04:00
parent ccf30b5c2e
commit 60599bad99
2 changed files with 14 additions and 6 deletions

View File

@ -3,7 +3,7 @@ import inspect
from copy import deepcopy from copy import deepcopy
from datetime import date, datetime, time, timedelta from datetime import date, datetime, time, timedelta
from decimal import Decimal from decimal import Decimal
from typing import Any, Callable, Dict, List, Mapping, Sequence, Set, Tuple, Type, Union from typing import Any, Callable, Dict, List, Mapping, Sequence, Tuple, Type, Union
from uuid import UUID from uuid import UUID
from fastapi import params from fastapi import params
@ -107,10 +107,18 @@ def get_dependant(*, path: str, call: Callable, name: str = None) -> Dependant:
) )
elif isinstance(param.default, params.Param): elif isinstance(param.default, params.Param):
if param.annotation != param.empty: if param.annotation != param.empty:
assert lenient_issubclass( origin = getattr(param.annotation, "__origin__", None)
param.annotation, param_all_types = param_supported_types + (list, tuple, set)
param_supported_types + (List, Tuple, Set, list, tuple, set), if isinstance(param.default, (params.Query, params.Header)):
), f"Parameters for Path, Query, Header and Cookies must be of type str, int, float, bool, list, tuple or set: {param}" assert lenient_issubclass(
param.annotation, param_all_types
) or lenient_issubclass(
origin, param_all_types
), f"Parameters for Query and Header must be of type str, int, float, bool, list, tuple or set: {param}"
else:
assert lenient_issubclass(
param.annotation, param_supported_types
), f"Parameters for Path and Cookies must be of type str, int, float, bool: {param}"
add_param_to_fields( add_param_to_fields(
param=param, dependant=dependant, default_schema=params.Query param=param, dependant=dependant, default_schema=params.Query
) )

View File

@ -322,7 +322,7 @@ class OpenIdConnect(SecurityBase):
openIdConnectUrl: str openIdConnectUrl: str
SecurityScheme = Union[APIKey, HTTPBase, HTTPBearer, OAuth2, OpenIdConnect] SecurityScheme = Union[APIKey, HTTPBase, OAuth2, OpenIdConnect, HTTPBearer]
class Components(BaseModel): class Components(BaseModel):