from copy import deepcopy
from datetime import date, datetime, time, timedelta
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 fastapi import params
)
elif isinstance(param.default, params.Param):
if param.annotation != param.empty:
- assert lenient_issubclass(
- param.annotation,
- param_supported_types + (List, Tuple, Set, list, tuple, set),
- ), f"Parameters for Path, Query, Header and Cookies must be of type str, int, float, bool, list, tuple or set: {param}"
+ origin = getattr(param.annotation, "__origin__", None)
+ param_all_types = param_supported_types + (list, tuple, set)
+ if isinstance(param.default, (params.Query, params.Header)):
+ 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(
param=param, dependant=dependant, default_schema=params.Query
)