Browse Source

🐛 Fix Python 3.7 specific list query handling

pull/11/head
Sebastián Ramírez 6 years ago
parent
commit
60599bad99
  1. 18
      fastapi/dependencies/utils.py
  2. 2
      fastapi/openapi/models.py

18
fastapi/dependencies/utils.py

@ -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
) )

2
fastapi/openapi/models.py

@ -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):

Loading…
Cancel
Save