-from typing import Any, Callable, Dict, List, Optional, Set, Type, Union
+from typing import Any, Callable, Dict, List, Optional, Sequence, Set, Type, Union
from fastapi import routing
from fastapi.exception_handlers import (
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
*,
prefix: str = "",
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
responses: Dict[Union[int, str], Dict[str, Any]] = None,
) -> None:
self.router.include_router(
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[Depends] = None,
+ dependencies: Sequence[Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
if isinstance(schema, params.Param) and getattr(schema, "in_", None) is None:
schema.in_ = default_schema.in_
if force_type:
- schema.in_ = force_type
+ schema.in_ = force_type # type: ignore
else:
schema = default_schema(default_value)
required = default_value == Required
value = received_params.getlist(field.alias) or field.default
else:
value = received_params.get(field.alias)
- schema: params.Param = field.schema
+ schema = field.schema
assert isinstance(schema, params.Param), "Params must be subclasses of Param"
if value is None:
if field.required:
if len(required_params) == 1 and not embed:
received_body = {field.alias: received_body}
for field in required_params:
- value = None
+ value: Any = None
if received_body is not None:
if field.shape in sequence_shapes and isinstance(
received_body, FormData
not_: Optional[List[SchemaBase]] = PSchema(None, alias="not") # type: ignore
items: Optional[SchemaBase] = None
properties: Optional[Dict[str, SchemaBase]] = None
- additionalProperties: Optional[Union[SchemaBase, bool]] = None
+ additionalProperties: Optional[Union[SchemaBase, bool]] = None # type: ignore
class Example(BaseModel):
class MediaType(BaseModel):
- schema_: Optional[Union[Schema, Reference]] = PSchema(
+ schema_: Optional[Union[Schema, Reference]] = PSchema( # type: ignore
None, alias="schema"
- ) # type: ignore
+ )
example: Optional[Any] = None
examples: Optional[Dict[str, Union[Example, Reference]]] = None
encoding: Optional[Dict[str, Encoding]] = None
style: Optional[str] = None
explode: Optional[bool] = None
allowReserved: Optional[bool] = None
- schema_: Optional[Union[Schema, Reference]] = PSchema(
+ schema_: Optional[Union[Schema, Reference]] = PSchema( # type: ignore
None, alias="schema"
- ) # type: ignore
+ )
example: Optional[Any] = None
examples: Optional[Dict[str, Union[Example, Reference]]] = None
# Serialization rules for more complex scenarios
definitions: Dict[str, Dict] = {}
parameters = []
for param in all_route_params:
- schema: Param = param.schema
+ schema = param.schema
+ schema = cast(Param, schema)
if "ValidationError" not in definitions:
definitions["ValidationError"] = validation_error_definition
definitions["HTTPValidationError"] = validation_error_response_definition
def get_openapi_operation_request_body(
- *, body_field: Field, model_name_map: Dict[Type, str]
+ *, body_field: Optional[Field], model_name_map: Dict[Type, str]
) -> Optional[Dict]:
if not body_field:
return None
import asyncio
import inspect
import logging
-from typing import Any, Callable, Dict, List, Optional, Set, Type, Union
+from typing import Any, Callable, Dict, List, Optional, Sequence, Set, Type, Union
from fastapi import params
from fastapi.dependencies.models import Dependant
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
responses: Dict[Union[int, str], Dict[str, Any]] = None,
deprecated: bool = None,
name: str = None,
- methods: List[str] = None,
+ methods: Optional[Union[Set[str], List[str]]] = None,
operation_id: str = None,
response_model_include: Set[str] = None,
response_model_exclude: Set[str] = set(),
# would pass the validation and be returned as is.
# By being a new field, no inheritance will be passed as is. A new model
# will be always created.
- self.secure_cloned_response_field = create_cloned_field(self.response_field)
+ self.secure_cloned_response_field: Optional[Field] = create_cloned_field(
+ self.response_field
+ )
else:
self.response_field = None
self.secure_cloned_response_field = None
self.status_code = status_code
self.tags = tags or []
- self.dependencies = dependencies or []
+ if dependencies:
+ self.dependencies = list(dependencies)
+ else:
+ self.dependencies = []
self.summary = summary
self.description = description or inspect.cleandoc(self.endpoint.__doc__ or "")
self.response_description = response_description
self.deprecated = deprecated
if methods is None:
methods = ["GET"]
- self.methods = methods
+ self.methods = set([method.upper() for method in methods])
self.operation_id = operation_id
self.response_model_include = response_model_include
self.response_model_exclude = response_model_exclude
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
responses: Dict[Union[int, str], Dict[str, Any]] = None,
deprecated: bool = None,
- methods: List[str] = None,
+ methods: Optional[Union[Set[str], List[str]]] = None,
operation_id: str = None,
response_model_include: Set[str] = None,
response_model_exclude: Set[str] = set(),
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
*,
prefix: str = "",
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
responses: Dict[Union[int, str], Dict[str, Any]] = None,
) -> None:
if prefix:
response_model=route.response_model,
status_code=route.status_code,
tags=(route.tags or []) + (tags or []),
- dependencies=(dependencies or []) + (route.dependencies or []),
+ dependencies=list(dependencies or [])
+ + list(route.dependencies or []),
summary=route.summary,
description=route.description,
response_description=route.response_description,
self.add_route(
prefix + route.path,
route.endpoint,
- methods=route.methods,
+ methods=list(route.methods or []),
include_in_schema=route.include_in_schema,
name=route.name,
)
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
response_model: Type[Any] = None,
status_code: int = 200,
tags: List[str] = None,
- dependencies: List[params.Depends] = None,
+ dependencies: Sequence[params.Depends] = None,
summary: str = None,
description: str = None,
response_description: str = "Successful Response",
response_model=response_model,
status_code=status_code,
tags=tags or [],
- dependencies=dependencies or [],
+ dependencies=dependencies,
summary=summary,
description=description,
response_description=response_description,
self.auto_error = auto_error
async def __call__(self, request: Request) -> Optional[str]:
- api_key: str = request.cookies.get(self.model.name)
+ api_key = request.cookies.get(self.model.name)
if not api_key:
if self.auto_error:
raise HTTPException(
self.realm = realm
self.auto_error = auto_error
- async def __call__(self, request: Request) -> Optional[HTTPBasicCredentials]:
+ async def __call__( # type: ignore
+ self, request: Request
+ ) -> Optional[HTTPBasicCredentials]:
authorization: str = request.headers.get("Authorization")
scheme, param = get_authorization_scheme_param(authorization)
if self.realm:
from fastapi.exceptions import HTTPException
from fastapi.openapi.models import OAuth2 as OAuth2Model, OAuthFlows as OAuthFlowsModel
-from fastapi.params import Form
+from fastapi.param_functions import Form
from fastapi.security.base import SecurityBase
from fastapi.security.utils import get_authorization_scheme_param
from starlette.requests import Request
from starlette.routing import BaseRoute
-def get_flat_models_from_routes(
- routes: Sequence[Type[BaseRoute]]
-) -> Set[Type[BaseModel]]:
+def get_flat_models_from_routes(routes: Sequence[BaseRoute]) -> Set[Type[BaseModel]]:
body_fields_from_routes: List[Field] = []
responses_from_routes: List[Field] = []
for route in routes:
set -e
set -x
-mypy fastapi --disallow-untyped-defs --follow-imports=skip
+mypy fastapi --disallow-untyped-defs
black fastapi tests --check
isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --combine-as --line-width 88 --recursive --check-only --thirdparty fastapi fastapi tests