Spaces:
Runtime error
Runtime error
| from enum import Enum | |
| from typing import ( | |
| Any, | |
| Awaitable, | |
| Callable, | |
| Coroutine, | |
| Dict, | |
| List, | |
| Optional, | |
| Sequence, | |
| Type, | |
| TypeVar, | |
| Union, | |
| ) | |
| from fastapi import routing | |
| from fastapi.datastructures import Default, DefaultPlaceholder | |
| from fastapi.exception_handlers import ( | |
| http_exception_handler, | |
| request_validation_exception_handler, | |
| websocket_request_validation_exception_handler, | |
| ) | |
| from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError | |
| from fastapi.logger import logger | |
| from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware | |
| from fastapi.openapi.docs import ( | |
| get_redoc_html, | |
| get_swagger_ui_html, | |
| get_swagger_ui_oauth2_redirect_html, | |
| ) | |
| from fastapi.openapi.utils import get_openapi | |
| from fastapi.params import Depends | |
| from fastapi.types import DecoratedCallable, IncEx | |
| from fastapi.utils import generate_unique_id | |
| from starlette.applications import Starlette | |
| from starlette.datastructures import State | |
| from starlette.exceptions import HTTPException | |
| from starlette.middleware import Middleware | |
| from starlette.middleware.base import BaseHTTPMiddleware | |
| from starlette.middleware.errors import ServerErrorMiddleware | |
| from starlette.middleware.exceptions import ExceptionMiddleware | |
| from starlette.requests import Request | |
| from starlette.responses import HTMLResponse, JSONResponse, Response | |
| from starlette.routing import BaseRoute | |
| from starlette.types import ASGIApp, Lifespan, Receive, Scope, Send | |
| AppType = TypeVar("AppType", bound="FastAPI") | |
| class FastAPI(Starlette): | |
| def __init__( | |
| self: AppType, | |
| *, | |
| debug: bool = False, | |
| routes: Optional[List[BaseRoute]] = None, | |
| title: str = "FastAPI", | |
| summary: Optional[str] = None, | |
| description: str = "", | |
| version: str = "0.1.0", | |
| openapi_url: Optional[str] = "/openapi.json", | |
| openapi_tags: Optional[List[Dict[str, Any]]] = None, | |
| servers: Optional[List[Dict[str, Union[str, Any]]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| default_response_class: Type[Response] = Default(JSONResponse), | |
| redirect_slashes: bool = True, | |
| docs_url: Optional[str] = "/docs", | |
| redoc_url: Optional[str] = "/redoc", | |
| swagger_ui_oauth2_redirect_url: Optional[str] = "/docs/oauth2-redirect", | |
| swagger_ui_init_oauth: Optional[Dict[str, Any]] = None, | |
| middleware: Optional[Sequence[Middleware]] = None, | |
| exception_handlers: Optional[ | |
| Dict[ | |
| Union[int, Type[Exception]], | |
| Callable[[Request, Any], Coroutine[Any, Any, Response]], | |
| ] | |
| ] = None, | |
| on_startup: Optional[Sequence[Callable[[], Any]]] = None, | |
| on_shutdown: Optional[Sequence[Callable[[], Any]]] = None, | |
| lifespan: Optional[Lifespan[AppType]] = None, | |
| terms_of_service: Optional[str] = None, | |
| contact: Optional[Dict[str, Union[str, Any]]] = None, | |
| license_info: Optional[Dict[str, Union[str, Any]]] = None, | |
| openapi_prefix: str = "", | |
| root_path: str = "", | |
| root_path_in_servers: bool = True, | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| webhooks: Optional[routing.APIRouter] = None, | |
| deprecated: Optional[bool] = None, | |
| include_in_schema: bool = True, | |
| swagger_ui_parameters: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| separate_input_output_schemas: bool = True, | |
| **extra: Any, | |
| ) -> None: | |
| self.debug = debug | |
| self.title = title | |
| self.summary = summary | |
| self.description = description | |
| self.version = version | |
| self.terms_of_service = terms_of_service | |
| self.contact = contact | |
| self.license_info = license_info | |
| self.openapi_url = openapi_url | |
| self.openapi_tags = openapi_tags | |
| self.root_path_in_servers = root_path_in_servers | |
| self.docs_url = docs_url | |
| self.redoc_url = redoc_url | |
| self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url | |
| self.swagger_ui_init_oauth = swagger_ui_init_oauth | |
| self.swagger_ui_parameters = swagger_ui_parameters | |
| self.servers = servers or [] | |
| self.separate_input_output_schemas = separate_input_output_schemas | |
| self.extra = extra | |
| self.openapi_version = "3.1.0" | |
| self.openapi_schema: Optional[Dict[str, Any]] = None | |
| if self.openapi_url: | |
| assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" | |
| assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" | |
| # TODO: remove when discarding the openapi_prefix parameter | |
| if openapi_prefix: | |
| logger.warning( | |
| '"openapi_prefix" has been deprecated in favor of "root_path", which ' | |
| "follows more closely the ASGI standard, is simpler, and more " | |
| "automatic. Check the docs at " | |
| "https://fastapi.tiangolo.com/advanced/sub-applications/" | |
| ) | |
| self.webhooks = webhooks or routing.APIRouter() | |
| self.root_path = root_path or openapi_prefix | |
| self.state: State = State() | |
| self.dependency_overrides: Dict[Callable[..., Any], Callable[..., Any]] = {} | |
| self.router: routing.APIRouter = routing.APIRouter( | |
| routes=routes, | |
| redirect_slashes=redirect_slashes, | |
| dependency_overrides_provider=self, | |
| on_startup=on_startup, | |
| on_shutdown=on_shutdown, | |
| lifespan=lifespan, | |
| default_response_class=default_response_class, | |
| dependencies=dependencies, | |
| callbacks=callbacks, | |
| deprecated=deprecated, | |
| include_in_schema=include_in_schema, | |
| responses=responses, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| self.exception_handlers: Dict[ | |
| Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]] | |
| ] = ({} if exception_handlers is None else dict(exception_handlers)) | |
| self.exception_handlers.setdefault(HTTPException, http_exception_handler) | |
| self.exception_handlers.setdefault( | |
| RequestValidationError, request_validation_exception_handler | |
| ) | |
| self.exception_handlers.setdefault( | |
| WebSocketRequestValidationError, | |
| # Starlette still has incorrect type specification for the handlers | |
| websocket_request_validation_exception_handler, # type: ignore | |
| ) | |
| self.user_middleware: List[Middleware] = ( | |
| [] if middleware is None else list(middleware) | |
| ) | |
| self.middleware_stack: Union[ASGIApp, None] = None | |
| self.setup() | |
| def build_middleware_stack(self) -> ASGIApp: | |
| # Duplicate/override from Starlette to add AsyncExitStackMiddleware | |
| # inside of ExceptionMiddleware, inside of custom user middlewares | |
| debug = self.debug | |
| error_handler = None | |
| exception_handlers = {} | |
| for key, value in self.exception_handlers.items(): | |
| if key in (500, Exception): | |
| error_handler = value | |
| else: | |
| exception_handlers[key] = value | |
| middleware = ( | |
| [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)] | |
| + self.user_middleware | |
| + [ | |
| Middleware( | |
| ExceptionMiddleware, handlers=exception_handlers, debug=debug | |
| ), | |
| # Add FastAPI-specific AsyncExitStackMiddleware for dependencies with | |
| # contextvars. | |
| # This needs to happen after user middlewares because those create a | |
| # new contextvars context copy by using a new AnyIO task group. | |
| # The initial part of dependencies with yield is executed in the | |
| # FastAPI code, inside all the middlewares, but the teardown part | |
| # (after yield) is executed in the AsyncExitStack in this middleware, | |
| # if the AsyncExitStack lived outside of the custom middlewares and | |
| # contextvars were set in a dependency with yield in that internal | |
| # contextvars context, the values would not be available in the | |
| # outside context of the AsyncExitStack. | |
| # By putting the middleware and the AsyncExitStack here, inside all | |
| # user middlewares, the code before and after yield in dependencies | |
| # with yield is executed in the same contextvars context, so all values | |
| # set in contextvars before yield is still available after yield as | |
| # would be expected. | |
| # Additionally, by having this AsyncExitStack here, after the | |
| # ExceptionMiddleware, now dependencies can catch handled exceptions, | |
| # e.g. HTTPException, to customize the teardown code (e.g. DB session | |
| # rollback). | |
| Middleware(AsyncExitStackMiddleware), | |
| ] | |
| ) | |
| app = self.router | |
| for cls, options in reversed(middleware): | |
| app = cls(app=app, **options) | |
| return app | |
| def openapi(self) -> Dict[str, Any]: | |
| if not self.openapi_schema: | |
| self.openapi_schema = get_openapi( | |
| title=self.title, | |
| version=self.version, | |
| openapi_version=self.openapi_version, | |
| summary=self.summary, | |
| description=self.description, | |
| terms_of_service=self.terms_of_service, | |
| contact=self.contact, | |
| license_info=self.license_info, | |
| routes=self.routes, | |
| webhooks=self.webhooks.routes, | |
| tags=self.openapi_tags, | |
| servers=self.servers, | |
| separate_input_output_schemas=self.separate_input_output_schemas, | |
| ) | |
| return self.openapi_schema | |
| def setup(self) -> None: | |
| if self.openapi_url: | |
| urls = (server_data.get("url") for server_data in self.servers) | |
| server_urls = {url for url in urls if url} | |
| async def openapi(req: Request) -> JSONResponse: | |
| root_path = req.scope.get("root_path", "").rstrip("/") | |
| if root_path not in server_urls: | |
| if root_path and self.root_path_in_servers: | |
| self.servers.insert(0, {"url": root_path}) | |
| server_urls.add(root_path) | |
| return JSONResponse(self.openapi()) | |
| self.add_route(self.openapi_url, openapi, include_in_schema=False) | |
| if self.openapi_url and self.docs_url: | |
| async def swagger_ui_html(req: Request) -> HTMLResponse: | |
| root_path = req.scope.get("root_path", "").rstrip("/") | |
| openapi_url = root_path + self.openapi_url | |
| oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url | |
| if oauth2_redirect_url: | |
| oauth2_redirect_url = root_path + oauth2_redirect_url | |
| return get_swagger_ui_html( | |
| openapi_url=openapi_url, | |
| title=self.title + " - Swagger UI", | |
| oauth2_redirect_url=oauth2_redirect_url, | |
| init_oauth=self.swagger_ui_init_oauth, | |
| swagger_ui_parameters=self.swagger_ui_parameters, | |
| ) | |
| self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) | |
| if self.swagger_ui_oauth2_redirect_url: | |
| async def swagger_ui_redirect(req: Request) -> HTMLResponse: | |
| return get_swagger_ui_oauth2_redirect_html() | |
| self.add_route( | |
| self.swagger_ui_oauth2_redirect_url, | |
| swagger_ui_redirect, | |
| include_in_schema=False, | |
| ) | |
| if self.openapi_url and self.redoc_url: | |
| async def redoc_html(req: Request) -> HTMLResponse: | |
| root_path = req.scope.get("root_path", "").rstrip("/") | |
| openapi_url = root_path + self.openapi_url | |
| return get_redoc_html( | |
| openapi_url=openapi_url, title=self.title + " - ReDoc" | |
| ) | |
| self.add_route(self.redoc_url, redoc_html, include_in_schema=False) | |
| async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: | |
| if self.root_path: | |
| scope["root_path"] = self.root_path | |
| await super().__call__(scope, receive, send) | |
| def add_api_route( | |
| self, | |
| path: str, | |
| endpoint: Callable[..., Coroutine[Any, Any, Response]], | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| methods: Optional[List[str]] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Union[Type[Response], DefaultPlaceholder] = Default( | |
| JSONResponse | |
| ), | |
| name: Optional[str] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> None: | |
| self.router.add_api_route( | |
| path, | |
| endpoint=endpoint, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| methods=methods, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def api_route( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| methods: Optional[List[str]] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| def decorator(func: DecoratedCallable) -> DecoratedCallable: | |
| self.router.add_api_route( | |
| path, | |
| func, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| methods=methods, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| return func | |
| return decorator | |
| def add_api_websocket_route( | |
| self, | |
| path: str, | |
| endpoint: Callable[..., Any], | |
| name: Optional[str] = None, | |
| *, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| ) -> None: | |
| self.router.add_api_websocket_route( | |
| path, | |
| endpoint, | |
| name=name, | |
| dependencies=dependencies, | |
| ) | |
| def websocket( | |
| self, | |
| path: str, | |
| name: Optional[str] = None, | |
| *, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| def decorator(func: DecoratedCallable) -> DecoratedCallable: | |
| self.add_api_websocket_route( | |
| path, | |
| func, | |
| name=name, | |
| dependencies=dependencies, | |
| ) | |
| return func | |
| return decorator | |
| def include_router( | |
| self, | |
| router: routing.APIRouter, | |
| *, | |
| prefix: str = "", | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| include_in_schema: bool = True, | |
| default_response_class: Type[Response] = Default(JSONResponse), | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> None: | |
| self.router.include_router( | |
| router, | |
| prefix=prefix, | |
| tags=tags, | |
| dependencies=dependencies, | |
| responses=responses, | |
| deprecated=deprecated, | |
| include_in_schema=include_in_schema, | |
| default_response_class=default_response_class, | |
| callbacks=callbacks, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def get( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.get( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def put( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.put( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def post( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.post( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def delete( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.delete( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def options( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.options( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def head( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.head( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def patch( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.patch( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def trace( | |
| self, | |
| path: str, | |
| *, | |
| response_model: Any = Default(None), | |
| status_code: Optional[int] = None, | |
| tags: Optional[List[Union[str, Enum]]] = None, | |
| dependencies: Optional[Sequence[Depends]] = None, | |
| summary: Optional[str] = None, | |
| description: Optional[str] = None, | |
| response_description: str = "Successful Response", | |
| responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, | |
| deprecated: Optional[bool] = None, | |
| operation_id: Optional[str] = None, | |
| response_model_include: Optional[IncEx] = None, | |
| response_model_exclude: Optional[IncEx] = None, | |
| response_model_by_alias: bool = True, | |
| response_model_exclude_unset: bool = False, | |
| response_model_exclude_defaults: bool = False, | |
| response_model_exclude_none: bool = False, | |
| include_in_schema: bool = True, | |
| response_class: Type[Response] = Default(JSONResponse), | |
| name: Optional[str] = None, | |
| callbacks: Optional[List[BaseRoute]] = None, | |
| openapi_extra: Optional[Dict[str, Any]] = None, | |
| generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( | |
| generate_unique_id | |
| ), | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.trace( | |
| path, | |
| response_model=response_model, | |
| status_code=status_code, | |
| tags=tags, | |
| dependencies=dependencies, | |
| summary=summary, | |
| description=description, | |
| response_description=response_description, | |
| responses=responses, | |
| deprecated=deprecated, | |
| operation_id=operation_id, | |
| response_model_include=response_model_include, | |
| response_model_exclude=response_model_exclude, | |
| response_model_by_alias=response_model_by_alias, | |
| response_model_exclude_unset=response_model_exclude_unset, | |
| response_model_exclude_defaults=response_model_exclude_defaults, | |
| response_model_exclude_none=response_model_exclude_none, | |
| include_in_schema=include_in_schema, | |
| response_class=response_class, | |
| name=name, | |
| callbacks=callbacks, | |
| openapi_extra=openapi_extra, | |
| generate_unique_id_function=generate_unique_id_function, | |
| ) | |
| def websocket_route( | |
| self, path: str, name: Union[str, None] = None | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| def decorator(func: DecoratedCallable) -> DecoratedCallable: | |
| self.router.add_websocket_route(path, func, name=name) | |
| return func | |
| return decorator | |
| def on_event( | |
| self, event_type: str | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| return self.router.on_event(event_type) | |
| def middleware( | |
| self, middleware_type: str | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| def decorator(func: DecoratedCallable) -> DecoratedCallable: | |
| self.add_middleware(BaseHTTPMiddleware, dispatch=func) | |
| return func | |
| return decorator | |
| def exception_handler( | |
| self, exc_class_or_status_code: Union[int, Type[Exception]] | |
| ) -> Callable[[DecoratedCallable], DecoratedCallable]: | |
| def decorator(func: DecoratedCallable) -> DecoratedCallable: | |
| self.add_exception_handler(exc_class_or_status_code, func) | |
| return func | |
| return decorator | |