4386 lines
		
	
	
		
			170 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			4386 lines
		
	
	
		
			170 KiB
		
	
	
	
		
			Python
		
	
	
	
import asyncio
 | 
						|
import dataclasses
 | 
						|
import email.message
 | 
						|
import inspect
 | 
						|
import json
 | 
						|
from contextlib import AsyncExitStack
 | 
						|
from enum import Enum, IntEnum
 | 
						|
from typing import (
 | 
						|
    Any,
 | 
						|
    Callable,
 | 
						|
    Coroutine,
 | 
						|
    Dict,
 | 
						|
    List,
 | 
						|
    Optional,
 | 
						|
    Sequence,
 | 
						|
    Set,
 | 
						|
    Tuple,
 | 
						|
    Type,
 | 
						|
    Union,
 | 
						|
)
 | 
						|
 | 
						|
from fastapi import params
 | 
						|
from fastapi._compat import (
 | 
						|
    ModelField,
 | 
						|
    Undefined,
 | 
						|
    _get_model_config,
 | 
						|
    _model_dump,
 | 
						|
    _normalize_errors,
 | 
						|
    lenient_issubclass,
 | 
						|
)
 | 
						|
from fastapi.datastructures import Default, DefaultPlaceholder
 | 
						|
from fastapi.dependencies.models import Dependant
 | 
						|
from fastapi.dependencies.utils import (
 | 
						|
    get_body_field,
 | 
						|
    get_dependant,
 | 
						|
    get_parameterless_sub_dependant,
 | 
						|
    get_typed_return_annotation,
 | 
						|
    solve_dependencies,
 | 
						|
)
 | 
						|
from fastapi.encoders import jsonable_encoder
 | 
						|
from fastapi.exceptions import (
 | 
						|
    FastAPIError,
 | 
						|
    RequestValidationError,
 | 
						|
    ResponseValidationError,
 | 
						|
    WebSocketRequestValidationError,
 | 
						|
)
 | 
						|
from fastapi.types import DecoratedCallable, IncEx
 | 
						|
from fastapi.utils import (
 | 
						|
    create_cloned_field,
 | 
						|
    create_response_field,
 | 
						|
    generate_unique_id,
 | 
						|
    get_value_or_default,
 | 
						|
    is_body_allowed_for_status_code,
 | 
						|
)
 | 
						|
from pydantic import BaseModel
 | 
						|
from starlette import routing
 | 
						|
from starlette.concurrency import run_in_threadpool
 | 
						|
from starlette.exceptions import HTTPException
 | 
						|
from starlette.requests import Request
 | 
						|
from starlette.responses import JSONResponse, Response
 | 
						|
from starlette.routing import (
 | 
						|
    BaseRoute,
 | 
						|
    Match,
 | 
						|
    compile_path,
 | 
						|
    get_name,
 | 
						|
    request_response,
 | 
						|
    websocket_session,
 | 
						|
)
 | 
						|
from starlette.routing import Mount as Mount  # noqa
 | 
						|
from starlette.types import ASGIApp, Lifespan, Scope
 | 
						|
from starlette.websockets import WebSocket
 | 
						|
from typing_extensions import Annotated, Doc, deprecated
 | 
						|
 | 
						|
 | 
						|
def _prepare_response_content(
 | 
						|
    res: Any,
 | 
						|
    *,
 | 
						|
    exclude_unset: bool,
 | 
						|
    exclude_defaults: bool = False,
 | 
						|
    exclude_none: bool = False,
 | 
						|
) -> Any:
 | 
						|
    if isinstance(res, BaseModel):
 | 
						|
        read_with_orm_mode = getattr(_get_model_config(res), "read_with_orm_mode", None)
 | 
						|
        if read_with_orm_mode:
 | 
						|
            # Let from_orm extract the data from this model instead of converting
 | 
						|
            # it now to a dict.
 | 
						|
            # Otherwise, there's no way to extract lazy data that requires attribute
 | 
						|
            # access instead of dict iteration, e.g. lazy relationships.
 | 
						|
            return res
 | 
						|
        return _model_dump(
 | 
						|
            res,
 | 
						|
            by_alias=True,
 | 
						|
            exclude_unset=exclude_unset,
 | 
						|
            exclude_defaults=exclude_defaults,
 | 
						|
            exclude_none=exclude_none,
 | 
						|
        )
 | 
						|
    elif isinstance(res, list):
 | 
						|
        return [
 | 
						|
            _prepare_response_content(
 | 
						|
                item,
 | 
						|
                exclude_unset=exclude_unset,
 | 
						|
                exclude_defaults=exclude_defaults,
 | 
						|
                exclude_none=exclude_none,
 | 
						|
            )
 | 
						|
            for item in res
 | 
						|
        ]
 | 
						|
    elif isinstance(res, dict):
 | 
						|
        return {
 | 
						|
            k: _prepare_response_content(
 | 
						|
                v,
 | 
						|
                exclude_unset=exclude_unset,
 | 
						|
                exclude_defaults=exclude_defaults,
 | 
						|
                exclude_none=exclude_none,
 | 
						|
            )
 | 
						|
            for k, v in res.items()
 | 
						|
        }
 | 
						|
    elif dataclasses.is_dataclass(res):
 | 
						|
        return dataclasses.asdict(res)
 | 
						|
    return res
 | 
						|
 | 
						|
 | 
						|
async def serialize_response(
 | 
						|
    *,
 | 
						|
    field: Optional[ModelField] = None,
 | 
						|
    response_content: Any,
 | 
						|
    include: Optional[IncEx] = None,
 | 
						|
    exclude: Optional[IncEx] = None,
 | 
						|
    by_alias: bool = True,
 | 
						|
    exclude_unset: bool = False,
 | 
						|
    exclude_defaults: bool = False,
 | 
						|
    exclude_none: bool = False,
 | 
						|
    is_coroutine: bool = True,
 | 
						|
) -> Any:
 | 
						|
    if field:
 | 
						|
        errors = []
 | 
						|
        if not hasattr(field, "serialize"):
 | 
						|
            # pydantic v1
 | 
						|
            response_content = _prepare_response_content(
 | 
						|
                response_content,
 | 
						|
                exclude_unset=exclude_unset,
 | 
						|
                exclude_defaults=exclude_defaults,
 | 
						|
                exclude_none=exclude_none,
 | 
						|
            )
 | 
						|
        if is_coroutine:
 | 
						|
            value, errors_ = field.validate(response_content, {}, loc=("response",))
 | 
						|
        else:
 | 
						|
            value, errors_ = await run_in_threadpool(
 | 
						|
                field.validate, response_content, {}, loc=("response",)
 | 
						|
            )
 | 
						|
        if isinstance(errors_, list):
 | 
						|
            errors.extend(errors_)
 | 
						|
        elif errors_:
 | 
						|
            errors.append(errors_)
 | 
						|
        if errors:
 | 
						|
            raise ResponseValidationError(
 | 
						|
                errors=_normalize_errors(errors), body=response_content
 | 
						|
            )
 | 
						|
 | 
						|
        if hasattr(field, "serialize"):
 | 
						|
            return field.serialize(
 | 
						|
                value,
 | 
						|
                include=include,
 | 
						|
                exclude=exclude,
 | 
						|
                by_alias=by_alias,
 | 
						|
                exclude_unset=exclude_unset,
 | 
						|
                exclude_defaults=exclude_defaults,
 | 
						|
                exclude_none=exclude_none,
 | 
						|
            )
 | 
						|
 | 
						|
        return jsonable_encoder(
 | 
						|
            value,
 | 
						|
            include=include,
 | 
						|
            exclude=exclude,
 | 
						|
            by_alias=by_alias,
 | 
						|
            exclude_unset=exclude_unset,
 | 
						|
            exclude_defaults=exclude_defaults,
 | 
						|
            exclude_none=exclude_none,
 | 
						|
        )
 | 
						|
    else:
 | 
						|
        return jsonable_encoder(response_content)
 | 
						|
 | 
						|
 | 
						|
async def run_endpoint_function(
 | 
						|
    *, dependant: Dependant, values: Dict[str, Any], is_coroutine: bool
 | 
						|
) -> Any:
 | 
						|
    # Only called by get_request_handler. Has been split into its own function to
 | 
						|
    # facilitate profiling endpoints, since inner functions are harder to profile.
 | 
						|
    assert dependant.call is not None, "dependant.call must be a function"
 | 
						|
 | 
						|
    if is_coroutine:
 | 
						|
        return await dependant.call(**values)
 | 
						|
    else:
 | 
						|
        return await run_in_threadpool(dependant.call, **values)
 | 
						|
 | 
						|
 | 
						|
def get_request_handler(
 | 
						|
    dependant: Dependant,
 | 
						|
    body_field: Optional[ModelField] = None,
 | 
						|
    status_code: Optional[int] = None,
 | 
						|
    response_class: Union[Type[Response], DefaultPlaceholder] = Default(JSONResponse),
 | 
						|
    response_field: Optional[ModelField] = 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,
 | 
						|
    dependency_overrides_provider: Optional[Any] = None,
 | 
						|
) -> Callable[[Request], Coroutine[Any, Any, Response]]:
 | 
						|
    assert dependant.call is not None, "dependant.call must be a function"
 | 
						|
    is_coroutine = asyncio.iscoroutinefunction(dependant.call)
 | 
						|
    is_body_form = body_field and isinstance(body_field.field_info, params.Form)
 | 
						|
    if isinstance(response_class, DefaultPlaceholder):
 | 
						|
        actual_response_class: Type[Response] = response_class.value
 | 
						|
    else:
 | 
						|
        actual_response_class = response_class
 | 
						|
 | 
						|
    async def app(request: Request) -> Response:
 | 
						|
        response: Union[Response, None] = None
 | 
						|
        async with AsyncExitStack() as file_stack:
 | 
						|
            try:
 | 
						|
                body: Any = None
 | 
						|
                if body_field:
 | 
						|
                    if is_body_form:
 | 
						|
                        body = await request.form()
 | 
						|
                        file_stack.push_async_callback(body.close)
 | 
						|
                    else:
 | 
						|
                        body_bytes = await request.body()
 | 
						|
                        if body_bytes:
 | 
						|
                            json_body: Any = Undefined
 | 
						|
                            content_type_value = request.headers.get("content-type")
 | 
						|
                            if not content_type_value:
 | 
						|
                                json_body = await request.json()
 | 
						|
                            else:
 | 
						|
                                message = email.message.Message()
 | 
						|
                                message["content-type"] = content_type_value
 | 
						|
                                if message.get_content_maintype() == "application":
 | 
						|
                                    subtype = message.get_content_subtype()
 | 
						|
                                    if subtype == "json" or subtype.endswith("+json"):
 | 
						|
                                        json_body = await request.json()
 | 
						|
                            if json_body != Undefined:
 | 
						|
                                body = json_body
 | 
						|
                            else:
 | 
						|
                                body = body_bytes
 | 
						|
            except json.JSONDecodeError as e:
 | 
						|
                validation_error = RequestValidationError(
 | 
						|
                    [
 | 
						|
                        {
 | 
						|
                            "type": "json_invalid",
 | 
						|
                            "loc": ("body", e.pos),
 | 
						|
                            "msg": "JSON decode error",
 | 
						|
                            "input": {},
 | 
						|
                            "ctx": {"error": e.msg},
 | 
						|
                        }
 | 
						|
                    ],
 | 
						|
                    body=e.doc,
 | 
						|
                )
 | 
						|
                raise validation_error from e
 | 
						|
            except HTTPException:
 | 
						|
                # If a middleware raises an HTTPException, it should be raised again
 | 
						|
                raise
 | 
						|
            except Exception as e:
 | 
						|
                http_error = HTTPException(
 | 
						|
                    status_code=400, detail="There was an error parsing the body"
 | 
						|
                )
 | 
						|
                raise http_error from e
 | 
						|
            errors: List[Any] = []
 | 
						|
            async with AsyncExitStack() as async_exit_stack:
 | 
						|
                solved_result = await solve_dependencies(
 | 
						|
                    request=request,
 | 
						|
                    dependant=dependant,
 | 
						|
                    body=body,
 | 
						|
                    dependency_overrides_provider=dependency_overrides_provider,
 | 
						|
                    async_exit_stack=async_exit_stack,
 | 
						|
                )
 | 
						|
                values, errors, background_tasks, sub_response, _ = solved_result
 | 
						|
                if not errors:
 | 
						|
                    raw_response = await run_endpoint_function(
 | 
						|
                        dependant=dependant, values=values, is_coroutine=is_coroutine
 | 
						|
                    )
 | 
						|
                    if isinstance(raw_response, Response):
 | 
						|
                        if raw_response.background is None:
 | 
						|
                            raw_response.background = background_tasks
 | 
						|
                        response = raw_response
 | 
						|
                    else:
 | 
						|
                        response_args: Dict[str, Any] = {"background": background_tasks}
 | 
						|
                        # If status_code was set, use it, otherwise use the default from the
 | 
						|
                        # response class, in the case of redirect it's 307
 | 
						|
                        current_status_code = (
 | 
						|
                            status_code if status_code else sub_response.status_code
 | 
						|
                        )
 | 
						|
                        if current_status_code is not None:
 | 
						|
                            response_args["status_code"] = current_status_code
 | 
						|
                        if sub_response.status_code:
 | 
						|
                            response_args["status_code"] = sub_response.status_code
 | 
						|
                        content = await serialize_response(
 | 
						|
                            field=response_field,
 | 
						|
                            response_content=raw_response,
 | 
						|
                            include=response_model_include,
 | 
						|
                            exclude=response_model_exclude,
 | 
						|
                            by_alias=response_model_by_alias,
 | 
						|
                            exclude_unset=response_model_exclude_unset,
 | 
						|
                            exclude_defaults=response_model_exclude_defaults,
 | 
						|
                            exclude_none=response_model_exclude_none,
 | 
						|
                            is_coroutine=is_coroutine,
 | 
						|
                        )
 | 
						|
                        response = actual_response_class(content, **response_args)
 | 
						|
                        if not is_body_allowed_for_status_code(response.status_code):
 | 
						|
                            response.body = b""
 | 
						|
                        response.headers.raw.extend(sub_response.headers.raw)
 | 
						|
            if errors:
 | 
						|
                validation_error = RequestValidationError(
 | 
						|
                    _normalize_errors(errors), body=body
 | 
						|
                )
 | 
						|
                raise validation_error
 | 
						|
        if response is None:
 | 
						|
            raise FastAPIError(
 | 
						|
                "No response object was returned. There's a high chance that the "
 | 
						|
                "application code is raising an exception and a dependency with yield "
 | 
						|
                "has a block with a bare except, or a block with except Exception, "
 | 
						|
                "and is not raising the exception again. Read more about it in the "
 | 
						|
                "docs: https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-with-yield/#dependencies-with-yield-and-except"
 | 
						|
            )
 | 
						|
        return response
 | 
						|
 | 
						|
    return app
 | 
						|
 | 
						|
 | 
						|
def get_websocket_app(
 | 
						|
    dependant: Dependant, dependency_overrides_provider: Optional[Any] = None
 | 
						|
) -> Callable[[WebSocket], Coroutine[Any, Any, Any]]:
 | 
						|
    async def app(websocket: WebSocket) -> None:
 | 
						|
        async with AsyncExitStack() as async_exit_stack:
 | 
						|
            # TODO: remove this scope later, after a few releases
 | 
						|
            # This scope fastapi_astack is no longer used by FastAPI, kept for
 | 
						|
            # compatibility, just in case
 | 
						|
            websocket.scope["fastapi_astack"] = async_exit_stack
 | 
						|
            solved_result = await solve_dependencies(
 | 
						|
                request=websocket,
 | 
						|
                dependant=dependant,
 | 
						|
                dependency_overrides_provider=dependency_overrides_provider,
 | 
						|
                async_exit_stack=async_exit_stack,
 | 
						|
            )
 | 
						|
            values, errors, _, _2, _3 = solved_result
 | 
						|
            if errors:
 | 
						|
                raise WebSocketRequestValidationError(_normalize_errors(errors))
 | 
						|
            assert dependant.call is not None, "dependant.call must be a function"
 | 
						|
            await dependant.call(**values)
 | 
						|
 | 
						|
    return app
 | 
						|
 | 
						|
 | 
						|
class APIWebSocketRoute(routing.WebSocketRoute):
 | 
						|
    def __init__(
 | 
						|
        self,
 | 
						|
        path: str,
 | 
						|
        endpoint: Callable[..., Any],
 | 
						|
        *,
 | 
						|
        name: Optional[str] = None,
 | 
						|
        dependencies: Optional[Sequence[params.Depends]] = None,
 | 
						|
        dependency_overrides_provider: Optional[Any] = None,
 | 
						|
    ) -> None:
 | 
						|
        self.path = path
 | 
						|
        self.endpoint = endpoint
 | 
						|
        self.name = get_name(endpoint) if name is None else name
 | 
						|
        self.dependencies = list(dependencies or [])
 | 
						|
        self.path_regex, self.path_format, self.param_convertors = compile_path(path)
 | 
						|
        self.dependant = get_dependant(path=self.path_format, call=self.endpoint)
 | 
						|
        for depends in self.dependencies[::-1]:
 | 
						|
            self.dependant.dependencies.insert(
 | 
						|
                0,
 | 
						|
                get_parameterless_sub_dependant(depends=depends, path=self.path_format),
 | 
						|
            )
 | 
						|
 | 
						|
        self.app = websocket_session(
 | 
						|
            get_websocket_app(
 | 
						|
                dependant=self.dependant,
 | 
						|
                dependency_overrides_provider=dependency_overrides_provider,
 | 
						|
            )
 | 
						|
        )
 | 
						|
 | 
						|
    def matches(self, scope: Scope) -> Tuple[Match, Scope]:
 | 
						|
        match, child_scope = super().matches(scope)
 | 
						|
        if match != Match.NONE:
 | 
						|
            child_scope["route"] = self
 | 
						|
        return match, child_scope
 | 
						|
 | 
						|
 | 
						|
class APIRoute(routing.Route):
 | 
						|
    def __init__(
 | 
						|
        self,
 | 
						|
        path: str,
 | 
						|
        endpoint: Callable[..., Any],
 | 
						|
        *,
 | 
						|
        response_model: Any = Default(None),
 | 
						|
        status_code: Optional[int] = None,
 | 
						|
        tags: Optional[List[Union[str, Enum]]] = None,
 | 
						|
        dependencies: Optional[Sequence[params.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,
 | 
						|
        name: Optional[str] = None,
 | 
						|
        methods: Optional[Union[Set[str], 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
 | 
						|
        ),
 | 
						|
        dependency_overrides_provider: Optional[Any] = None,
 | 
						|
        callbacks: Optional[List[BaseRoute]] = None,
 | 
						|
        openapi_extra: Optional[Dict[str, Any]] = None,
 | 
						|
        generate_unique_id_function: Union[
 | 
						|
            Callable[["APIRoute"], str], DefaultPlaceholder
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> None:
 | 
						|
        self.path = path
 | 
						|
        self.endpoint = endpoint
 | 
						|
        if isinstance(response_model, DefaultPlaceholder):
 | 
						|
            return_annotation = get_typed_return_annotation(endpoint)
 | 
						|
            if lenient_issubclass(return_annotation, Response):
 | 
						|
                response_model = None
 | 
						|
            else:
 | 
						|
                response_model = return_annotation
 | 
						|
        self.response_model = response_model
 | 
						|
        self.summary = summary
 | 
						|
        self.response_description = response_description
 | 
						|
        self.deprecated = deprecated
 | 
						|
        self.operation_id = operation_id
 | 
						|
        self.response_model_include = response_model_include
 | 
						|
        self.response_model_exclude = response_model_exclude
 | 
						|
        self.response_model_by_alias = response_model_by_alias
 | 
						|
        self.response_model_exclude_unset = response_model_exclude_unset
 | 
						|
        self.response_model_exclude_defaults = response_model_exclude_defaults
 | 
						|
        self.response_model_exclude_none = response_model_exclude_none
 | 
						|
        self.include_in_schema = include_in_schema
 | 
						|
        self.response_class = response_class
 | 
						|
        self.dependency_overrides_provider = dependency_overrides_provider
 | 
						|
        self.callbacks = callbacks
 | 
						|
        self.openapi_extra = openapi_extra
 | 
						|
        self.generate_unique_id_function = generate_unique_id_function
 | 
						|
        self.tags = tags or []
 | 
						|
        self.responses = responses or {}
 | 
						|
        self.name = get_name(endpoint) if name is None else name
 | 
						|
        self.path_regex, self.path_format, self.param_convertors = compile_path(path)
 | 
						|
        if methods is None:
 | 
						|
            methods = ["GET"]
 | 
						|
        self.methods: Set[str] = {method.upper() for method in methods}
 | 
						|
        if isinstance(generate_unique_id_function, DefaultPlaceholder):
 | 
						|
            current_generate_unique_id: Callable[
 | 
						|
                ["APIRoute"], str
 | 
						|
            ] = generate_unique_id_function.value
 | 
						|
        else:
 | 
						|
            current_generate_unique_id = generate_unique_id_function
 | 
						|
        self.unique_id = self.operation_id or current_generate_unique_id(self)
 | 
						|
        # normalize enums e.g. http.HTTPStatus
 | 
						|
        if isinstance(status_code, IntEnum):
 | 
						|
            status_code = int(status_code)
 | 
						|
        self.status_code = status_code
 | 
						|
        if self.response_model:
 | 
						|
            assert is_body_allowed_for_status_code(
 | 
						|
                status_code
 | 
						|
            ), f"Status code {status_code} must not have a response body"
 | 
						|
            response_name = "Response_" + self.unique_id
 | 
						|
            self.response_field = create_response_field(
 | 
						|
                name=response_name,
 | 
						|
                type_=self.response_model,
 | 
						|
                mode="serialization",
 | 
						|
            )
 | 
						|
            # Create a clone of the field, so that a Pydantic submodel is not returned
 | 
						|
            # as is just because it's an instance of a subclass of a more limited class
 | 
						|
            # e.g. UserInDB (containing hashed_password) could be a subclass of User
 | 
						|
            # that doesn't have the hashed_password. But because it's a subclass, it
 | 
						|
            # 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 always be created.
 | 
						|
            # TODO: remove when deprecating Pydantic v1
 | 
						|
            self.secure_cloned_response_field: Optional[
 | 
						|
                ModelField
 | 
						|
            ] = create_cloned_field(self.response_field)
 | 
						|
        else:
 | 
						|
            self.response_field = None  # type: ignore
 | 
						|
            self.secure_cloned_response_field = None
 | 
						|
        self.dependencies = list(dependencies or [])
 | 
						|
        self.description = description or inspect.cleandoc(self.endpoint.__doc__ or "")
 | 
						|
        # if a "form feed" character (page break) is found in the description text,
 | 
						|
        # truncate description text to the content preceding the first "form feed"
 | 
						|
        self.description = self.description.split("\f")[0].strip()
 | 
						|
        response_fields = {}
 | 
						|
        for additional_status_code, response in self.responses.items():
 | 
						|
            assert isinstance(response, dict), "An additional response must be a dict"
 | 
						|
            model = response.get("model")
 | 
						|
            if model:
 | 
						|
                assert is_body_allowed_for_status_code(
 | 
						|
                    additional_status_code
 | 
						|
                ), f"Status code {additional_status_code} must not have a response body"
 | 
						|
                response_name = f"Response_{additional_status_code}_{self.unique_id}"
 | 
						|
                response_field = create_response_field(name=response_name, type_=model)
 | 
						|
                response_fields[additional_status_code] = response_field
 | 
						|
        if response_fields:
 | 
						|
            self.response_fields: Dict[Union[int, str], ModelField] = response_fields
 | 
						|
        else:
 | 
						|
            self.response_fields = {}
 | 
						|
 | 
						|
        assert callable(endpoint), "An endpoint must be a callable"
 | 
						|
        self.dependant = get_dependant(path=self.path_format, call=self.endpoint)
 | 
						|
        for depends in self.dependencies[::-1]:
 | 
						|
            self.dependant.dependencies.insert(
 | 
						|
                0,
 | 
						|
                get_parameterless_sub_dependant(depends=depends, path=self.path_format),
 | 
						|
            )
 | 
						|
        self.body_field = get_body_field(dependant=self.dependant, name=self.unique_id)
 | 
						|
        self.app = request_response(self.get_route_handler())
 | 
						|
 | 
						|
    def get_route_handler(self) -> Callable[[Request], Coroutine[Any, Any, Response]]:
 | 
						|
        return get_request_handler(
 | 
						|
            dependant=self.dependant,
 | 
						|
            body_field=self.body_field,
 | 
						|
            status_code=self.status_code,
 | 
						|
            response_class=self.response_class,
 | 
						|
            response_field=self.secure_cloned_response_field,
 | 
						|
            response_model_include=self.response_model_include,
 | 
						|
            response_model_exclude=self.response_model_exclude,
 | 
						|
            response_model_by_alias=self.response_model_by_alias,
 | 
						|
            response_model_exclude_unset=self.response_model_exclude_unset,
 | 
						|
            response_model_exclude_defaults=self.response_model_exclude_defaults,
 | 
						|
            response_model_exclude_none=self.response_model_exclude_none,
 | 
						|
            dependency_overrides_provider=self.dependency_overrides_provider,
 | 
						|
        )
 | 
						|
 | 
						|
    def matches(self, scope: Scope) -> Tuple[Match, Scope]:
 | 
						|
        match, child_scope = super().matches(scope)
 | 
						|
        if match != Match.NONE:
 | 
						|
            child_scope["route"] = self
 | 
						|
        return match, child_scope
 | 
						|
 | 
						|
 | 
						|
class APIRouter(routing.Router):
 | 
						|
    """
 | 
						|
    `APIRouter` class, used to group *path operations*, for example to structure
 | 
						|
    an app in multiple files. It would then be included in the `FastAPI` app, or
 | 
						|
    in another `APIRouter` (ultimately included in the app).
 | 
						|
 | 
						|
    Read more about it in the
 | 
						|
    [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/).
 | 
						|
 | 
						|
    ## Example
 | 
						|
 | 
						|
    ```python
 | 
						|
    from fastapi import APIRouter, FastAPI
 | 
						|
 | 
						|
    app = FastAPI()
 | 
						|
    router = APIRouter()
 | 
						|
 | 
						|
 | 
						|
    @router.get("/users/", tags=["users"])
 | 
						|
    async def read_users():
 | 
						|
        return [{"username": "Rick"}, {"username": "Morty"}]
 | 
						|
 | 
						|
 | 
						|
    app.include_router(router)
 | 
						|
    ```
 | 
						|
    """
 | 
						|
 | 
						|
    def __init__(
 | 
						|
        self,
 | 
						|
        *,
 | 
						|
        prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to all the *path operations* in this
 | 
						|
                router.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to all the
 | 
						|
                *path operations* in this router.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        default_response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default response class to be used.
 | 
						|
 | 
						|
                Read more in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses to be shown in OpenAPI.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
 | 
						|
 | 
						|
                And in the
 | 
						|
                [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                OpenAPI callbacks that should apply to all *path operations* in this
 | 
						|
                router.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        routes: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                **Note**: you probably shouldn't use this parameter, it is inherited
 | 
						|
                from Starlette and supported for compatibility.
 | 
						|
 | 
						|
                ---
 | 
						|
 | 
						|
                A list of routes to serve incoming HTTP and WebSocket requests.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
            deprecated(
 | 
						|
                """
 | 
						|
                You normally wouldn't use this parameter with FastAPI, it is inherited
 | 
						|
                from Starlette and supported for compatibility.
 | 
						|
 | 
						|
                In FastAPI, you normally would use the *path operation methods*,
 | 
						|
                like `router.get()`, `router.post()`, etc.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        redirect_slashes: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Whether to detect and redirect slashes in URLs when the client doesn't
 | 
						|
                use the same format.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        default: Annotated[
 | 
						|
            Optional[ASGIApp],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Default function handler for this router. Used to handle
 | 
						|
                404 Not Found errors.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependency_overrides_provider: Annotated[
 | 
						|
            Optional[Any],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Only used internally by FastAPI to handle dependency overrides.
 | 
						|
 | 
						|
                You shouldn't need to use it. It normally points to the `FastAPI` app
 | 
						|
                object.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        route_class: Annotated[
 | 
						|
            Type[APIRoute],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom route (*path operation*) class to be used by this router.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Request and APIRoute class](https://fastapi.tiangolo.com/how-to/custom-request-and-route/#custom-apiroute-class-in-a-router).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = APIRoute,
 | 
						|
        on_startup: Annotated[
 | 
						|
            Optional[Sequence[Callable[[], Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of startup event handler functions.
 | 
						|
 | 
						|
                You should instead use the `lifespan` handlers.
 | 
						|
 | 
						|
                Read more in the [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        on_shutdown: Annotated[
 | 
						|
            Optional[Sequence[Callable[[], Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of shutdown event handler functions.
 | 
						|
 | 
						|
                You should instead use the `lifespan` handlers.
 | 
						|
 | 
						|
                Read more in the
 | 
						|
                [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        # the generic to Lifespan[AppType] is the type of the top level application
 | 
						|
        # which the router cannot know statically, so we use typing.Any
 | 
						|
        lifespan: Annotated[
 | 
						|
            Optional[Lifespan[Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A `Lifespan` context manager handler. This replaces `startup` and
 | 
						|
                `shutdown` functions with a single context manager.
 | 
						|
 | 
						|
                Read more in the
 | 
						|
                [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark all *path operations* in this router as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                To include (or not) all the *path operations* in this router in the
 | 
						|
                generated OpenAPI.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> None:
 | 
						|
        super().__init__(
 | 
						|
            routes=routes,
 | 
						|
            redirect_slashes=redirect_slashes,
 | 
						|
            default=default,
 | 
						|
            on_startup=on_startup,
 | 
						|
            on_shutdown=on_shutdown,
 | 
						|
            lifespan=lifespan,
 | 
						|
        )
 | 
						|
        if prefix:
 | 
						|
            assert prefix.startswith("/"), "A path prefix must start with '/'"
 | 
						|
            assert not prefix.endswith(
 | 
						|
                "/"
 | 
						|
            ), "A path prefix must not end with '/', as the routes will start with '/'"
 | 
						|
        self.prefix = prefix
 | 
						|
        self.tags: List[Union[str, Enum]] = tags or []
 | 
						|
        self.dependencies = list(dependencies or [])
 | 
						|
        self.deprecated = deprecated
 | 
						|
        self.include_in_schema = include_in_schema
 | 
						|
        self.responses = responses or {}
 | 
						|
        self.callbacks = callbacks or []
 | 
						|
        self.dependency_overrides_provider = dependency_overrides_provider
 | 
						|
        self.route_class = route_class
 | 
						|
        self.default_response_class = default_response_class
 | 
						|
        self.generate_unique_id_function = generate_unique_id_function
 | 
						|
 | 
						|
    def route(
 | 
						|
        self,
 | 
						|
        path: str,
 | 
						|
        methods: Optional[List[str]] = None,
 | 
						|
        name: Optional[str] = None,
 | 
						|
        include_in_schema: bool = True,
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
 | 
						|
            self.add_route(
 | 
						|
                path,
 | 
						|
                func,
 | 
						|
                methods=methods,
 | 
						|
                name=name,
 | 
						|
                include_in_schema=include_in_schema,
 | 
						|
            )
 | 
						|
            return func
 | 
						|
 | 
						|
        return decorator
 | 
						|
 | 
						|
    def add_api_route(
 | 
						|
        self,
 | 
						|
        path: str,
 | 
						|
        endpoint: Callable[..., Any],
 | 
						|
        *,
 | 
						|
        response_model: Any = Default(None),
 | 
						|
        status_code: Optional[int] = None,
 | 
						|
        tags: Optional[List[Union[str, Enum]]] = None,
 | 
						|
        dependencies: Optional[Sequence[params.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[Union[Set[str], 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,
 | 
						|
        route_class_override: Optional[Type[APIRoute]] = None,
 | 
						|
        callbacks: Optional[List[BaseRoute]] = None,
 | 
						|
        openapi_extra: Optional[Dict[str, Any]] = None,
 | 
						|
        generate_unique_id_function: Union[
 | 
						|
            Callable[[APIRoute], str], DefaultPlaceholder
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> None:
 | 
						|
        route_class = route_class_override or self.route_class
 | 
						|
        responses = responses or {}
 | 
						|
        combined_responses = {**self.responses, **responses}
 | 
						|
        current_response_class = get_value_or_default(
 | 
						|
            response_class, self.default_response_class
 | 
						|
        )
 | 
						|
        current_tags = self.tags.copy()
 | 
						|
        if tags:
 | 
						|
            current_tags.extend(tags)
 | 
						|
        current_dependencies = self.dependencies.copy()
 | 
						|
        if dependencies:
 | 
						|
            current_dependencies.extend(dependencies)
 | 
						|
        current_callbacks = self.callbacks.copy()
 | 
						|
        if callbacks:
 | 
						|
            current_callbacks.extend(callbacks)
 | 
						|
        current_generate_unique_id = get_value_or_default(
 | 
						|
            generate_unique_id_function, self.generate_unique_id_function
 | 
						|
        )
 | 
						|
        route = route_class(
 | 
						|
            self.prefix + path,
 | 
						|
            endpoint=endpoint,
 | 
						|
            response_model=response_model,
 | 
						|
            status_code=status_code,
 | 
						|
            tags=current_tags,
 | 
						|
            dependencies=current_dependencies,
 | 
						|
            summary=summary,
 | 
						|
            description=description,
 | 
						|
            response_description=response_description,
 | 
						|
            responses=combined_responses,
 | 
						|
            deprecated=deprecated or self.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 and self.include_in_schema,
 | 
						|
            response_class=current_response_class,
 | 
						|
            name=name,
 | 
						|
            dependency_overrides_provider=self.dependency_overrides_provider,
 | 
						|
            callbacks=current_callbacks,
 | 
						|
            openapi_extra=openapi_extra,
 | 
						|
            generate_unique_id_function=current_generate_unique_id,
 | 
						|
        )
 | 
						|
        self.routes.append(route)
 | 
						|
 | 
						|
    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[params.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,
 | 
						|
        callbacks: Optional[List[BaseRoute]] = None,
 | 
						|
        openapi_extra: Optional[Dict[str, Any]] = None,
 | 
						|
        generate_unique_id_function: Callable[[APIRoute], str] = Default(
 | 
						|
            generate_unique_id
 | 
						|
        ),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
 | 
						|
            self.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,
 | 
						|
                callbacks=callbacks,
 | 
						|
                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[params.Depends]] = None,
 | 
						|
    ) -> None:
 | 
						|
        current_dependencies = self.dependencies.copy()
 | 
						|
        if dependencies:
 | 
						|
            current_dependencies.extend(dependencies)
 | 
						|
 | 
						|
        route = APIWebSocketRoute(
 | 
						|
            self.prefix + path,
 | 
						|
            endpoint=endpoint,
 | 
						|
            name=name,
 | 
						|
            dependencies=current_dependencies,
 | 
						|
            dependency_overrides_provider=self.dependency_overrides_provider,
 | 
						|
        )
 | 
						|
        self.routes.append(route)
 | 
						|
 | 
						|
    def websocket(
 | 
						|
        self,
 | 
						|
        path: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                WebSocket path.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A name for the WebSocket. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        *,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be used for this
 | 
						|
                WebSocket.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Decorate a WebSocket function.
 | 
						|
 | 
						|
        Read more about it in the
 | 
						|
        [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/).
 | 
						|
 | 
						|
        **Example**
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI, WebSocket
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.websocket("/ws")
 | 
						|
        async def websocket_endpoint(websocket: WebSocket):
 | 
						|
            await websocket.accept()
 | 
						|
            while True:
 | 
						|
                data = await websocket.receive_text()
 | 
						|
                await websocket.send_text(f"Message text was: {data}")
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
 | 
						|
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
 | 
						|
            self.add_api_websocket_route(
 | 
						|
                path, func, name=name, dependencies=dependencies
 | 
						|
            )
 | 
						|
            return func
 | 
						|
 | 
						|
        return decorator
 | 
						|
 | 
						|
    def websocket_route(
 | 
						|
        self, path: str, name: Union[str, None] = None
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
 | 
						|
            self.add_websocket_route(path, func, name=name)
 | 
						|
            return func
 | 
						|
 | 
						|
        return decorator
 | 
						|
 | 
						|
    def include_router(
 | 
						|
        self,
 | 
						|
        router: Annotated["APIRouter", Doc("The `APIRouter` to include.")],
 | 
						|
        *,
 | 
						|
        prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to all the *path operations* in this
 | 
						|
                router.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to all the
 | 
						|
                *path operations* in this router.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        default_response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default response class to be used.
 | 
						|
 | 
						|
                Read more in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses to be shown in OpenAPI.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/).
 | 
						|
 | 
						|
                And in the
 | 
						|
                [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                OpenAPI callbacks that should apply to all *path operations* in this
 | 
						|
                router.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark all *path operations* in this router as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include (or not) all the *path operations* in this router in the
 | 
						|
                generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> None:
 | 
						|
        """
 | 
						|
        Include another `APIRouter` in the same current `APIRouter`.
 | 
						|
 | 
						|
        Read more about it in the
 | 
						|
        [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/).
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        internal_router = APIRouter()
 | 
						|
        users_router = APIRouter()
 | 
						|
 | 
						|
        @users_router.get("/users/")
 | 
						|
        def read_users():
 | 
						|
            return [{"name": "Rick"}, {"name": "Morty"}]
 | 
						|
 | 
						|
        internal_router.include_router(users_router)
 | 
						|
        app.include_router(internal_router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        if prefix:
 | 
						|
            assert prefix.startswith("/"), "A path prefix must start with '/'"
 | 
						|
            assert not prefix.endswith(
 | 
						|
                "/"
 | 
						|
            ), "A path prefix must not end with '/', as the routes will start with '/'"
 | 
						|
        else:
 | 
						|
            for r in router.routes:
 | 
						|
                path = getattr(r, "path")  # noqa: B009
 | 
						|
                name = getattr(r, "name", "unknown")
 | 
						|
                if path is not None and not path:
 | 
						|
                    raise FastAPIError(
 | 
						|
                        f"Prefix and path cannot be both empty (path operation: {name})"
 | 
						|
                    )
 | 
						|
        if responses is None:
 | 
						|
            responses = {}
 | 
						|
        for route in router.routes:
 | 
						|
            if isinstance(route, APIRoute):
 | 
						|
                combined_responses = {**responses, **route.responses}
 | 
						|
                use_response_class = get_value_or_default(
 | 
						|
                    route.response_class,
 | 
						|
                    router.default_response_class,
 | 
						|
                    default_response_class,
 | 
						|
                    self.default_response_class,
 | 
						|
                )
 | 
						|
                current_tags = []
 | 
						|
                if tags:
 | 
						|
                    current_tags.extend(tags)
 | 
						|
                if route.tags:
 | 
						|
                    current_tags.extend(route.tags)
 | 
						|
                current_dependencies: List[params.Depends] = []
 | 
						|
                if dependencies:
 | 
						|
                    current_dependencies.extend(dependencies)
 | 
						|
                if route.dependencies:
 | 
						|
                    current_dependencies.extend(route.dependencies)
 | 
						|
                current_callbacks = []
 | 
						|
                if callbacks:
 | 
						|
                    current_callbacks.extend(callbacks)
 | 
						|
                if route.callbacks:
 | 
						|
                    current_callbacks.extend(route.callbacks)
 | 
						|
                current_generate_unique_id = get_value_or_default(
 | 
						|
                    route.generate_unique_id_function,
 | 
						|
                    router.generate_unique_id_function,
 | 
						|
                    generate_unique_id_function,
 | 
						|
                    self.generate_unique_id_function,
 | 
						|
                )
 | 
						|
                self.add_api_route(
 | 
						|
                    prefix + route.path,
 | 
						|
                    route.endpoint,
 | 
						|
                    response_model=route.response_model,
 | 
						|
                    status_code=route.status_code,
 | 
						|
                    tags=current_tags,
 | 
						|
                    dependencies=current_dependencies,
 | 
						|
                    summary=route.summary,
 | 
						|
                    description=route.description,
 | 
						|
                    response_description=route.response_description,
 | 
						|
                    responses=combined_responses,
 | 
						|
                    deprecated=route.deprecated or deprecated or self.deprecated,
 | 
						|
                    methods=route.methods,
 | 
						|
                    operation_id=route.operation_id,
 | 
						|
                    response_model_include=route.response_model_include,
 | 
						|
                    response_model_exclude=route.response_model_exclude,
 | 
						|
                    response_model_by_alias=route.response_model_by_alias,
 | 
						|
                    response_model_exclude_unset=route.response_model_exclude_unset,
 | 
						|
                    response_model_exclude_defaults=route.response_model_exclude_defaults,
 | 
						|
                    response_model_exclude_none=route.response_model_exclude_none,
 | 
						|
                    include_in_schema=route.include_in_schema
 | 
						|
                    and self.include_in_schema
 | 
						|
                    and include_in_schema,
 | 
						|
                    response_class=use_response_class,
 | 
						|
                    name=route.name,
 | 
						|
                    route_class_override=type(route),
 | 
						|
                    callbacks=current_callbacks,
 | 
						|
                    openapi_extra=route.openapi_extra,
 | 
						|
                    generate_unique_id_function=current_generate_unique_id,
 | 
						|
                )
 | 
						|
            elif isinstance(route, routing.Route):
 | 
						|
                methods = list(route.methods or [])
 | 
						|
                self.add_route(
 | 
						|
                    prefix + route.path,
 | 
						|
                    route.endpoint,
 | 
						|
                    methods=methods,
 | 
						|
                    include_in_schema=route.include_in_schema,
 | 
						|
                    name=route.name,
 | 
						|
                )
 | 
						|
            elif isinstance(route, APIWebSocketRoute):
 | 
						|
                current_dependencies = []
 | 
						|
                if dependencies:
 | 
						|
                    current_dependencies.extend(dependencies)
 | 
						|
                if route.dependencies:
 | 
						|
                    current_dependencies.extend(route.dependencies)
 | 
						|
                self.add_api_websocket_route(
 | 
						|
                    prefix + route.path,
 | 
						|
                    route.endpoint,
 | 
						|
                    dependencies=current_dependencies,
 | 
						|
                    name=route.name,
 | 
						|
                )
 | 
						|
            elif isinstance(route, routing.WebSocketRoute):
 | 
						|
                self.add_websocket_route(
 | 
						|
                    prefix + route.path, route.endpoint, name=route.name
 | 
						|
                )
 | 
						|
        for handler in router.on_startup:
 | 
						|
            self.add_event_handler("startup", handler)
 | 
						|
        for handler in router.on_shutdown:
 | 
						|
            self.add_event_handler("shutdown", handler)
 | 
						|
 | 
						|
    def get(
 | 
						|
        self,
 | 
						|
        path: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP GET operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.get("/items/")
 | 
						|
        def read_items():
 | 
						|
            return [{"name": "Empanada"}, {"name": "Arepa"}]
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["GET"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP PUT operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
        from pydantic import BaseModel
 | 
						|
 | 
						|
        class Item(BaseModel):
 | 
						|
            name: str
 | 
						|
            description: str | None = None
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.put("/items/{item_id}")
 | 
						|
        def replace_item(item_id: str, item: Item):
 | 
						|
            return {"message": "Item replaced", "id": item_id}
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["PUT"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP POST operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
        from pydantic import BaseModel
 | 
						|
 | 
						|
        class Item(BaseModel):
 | 
						|
            name: str
 | 
						|
            description: str | None = None
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.post("/items/")
 | 
						|
        def create_item(item: Item):
 | 
						|
            return {"message": "Item created"}
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["POST"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP DELETE operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.delete("/items/{item_id}")
 | 
						|
        def delete_item(item_id: str):
 | 
						|
            return {"message": "Item deleted"}
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["DELETE"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP OPTIONS operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.options("/items/")
 | 
						|
        def get_item_options():
 | 
						|
            return {"additions": ["Aji", "Guacamole"]}
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["OPTIONS"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP HEAD operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
        from pydantic import BaseModel
 | 
						|
 | 
						|
        class Item(BaseModel):
 | 
						|
            name: str
 | 
						|
            description: str | None = None
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.head("/items/", status_code=204)
 | 
						|
        def get_items_headers(response: Response):
 | 
						|
            response.headers["X-Cat-Dog"] = "Alone in the world"
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["HEAD"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP PATCH operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
        from pydantic import BaseModel
 | 
						|
 | 
						|
        class Item(BaseModel):
 | 
						|
            name: str
 | 
						|
            description: str | None = None
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.patch("/items/")
 | 
						|
        def update_item(item: Item):
 | 
						|
            return {"message": "Item updated in place"}
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["PATCH"],
 | 
						|
            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: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The URL path to be used for this *path operation*.
 | 
						|
 | 
						|
                For example, in `http://example.com/items`, the path is `/items`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        *,
 | 
						|
        response_model: Annotated[
 | 
						|
            Any,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type to use for the response.
 | 
						|
 | 
						|
                It could be any valid Pydantic *field* type. So, it doesn't have to
 | 
						|
                be a Pydantic model, it could be other things, like a `list`, `dict`,
 | 
						|
                etc.
 | 
						|
 | 
						|
                It will be used for:
 | 
						|
 | 
						|
                * Documentation: the generated OpenAPI (and the UI at `/docs`) will
 | 
						|
                    show it as the response (JSON Schema).
 | 
						|
                * Serialization: you could return an arbitrary object and the
 | 
						|
                    `response_model` would be used to serialize that object into the
 | 
						|
                    corresponding JSON.
 | 
						|
                * Filtering: the JSON sent to the client will only contain the data
 | 
						|
                    (fields) defined in the `response_model`. If you returned an object
 | 
						|
                    that contains an attribute `password` but the `response_model` does
 | 
						|
                    not include that field, the JSON sent to the client would not have
 | 
						|
                    that `password`.
 | 
						|
                * Validation: whatever you return will be serialized with the
 | 
						|
                    `response_model`, converting any data as necessary to generate the
 | 
						|
                    corresponding JSON. But if the data in the object returned is not
 | 
						|
                    valid, that would mean a violation of the contract with the client,
 | 
						|
                    so it's an error from the API developer. So, FastAPI will raise an
 | 
						|
                    error and return a 500 error code (Internal Server Error).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(None),
 | 
						|
        status_code: Annotated[
 | 
						|
            Optional[int],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The default status code to be used for the response.
 | 
						|
 | 
						|
                You could override the status code by returning a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        tags: Annotated[
 | 
						|
            Optional[List[Union[str, Enum]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of tags to be applied to the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        dependencies: Annotated[
 | 
						|
            Optional[Sequence[params.Depends]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A list of dependencies (using `Depends()`) to be applied to the
 | 
						|
                *path operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        summary: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A summary for the *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        description: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                A description for the *path operation*.
 | 
						|
 | 
						|
                If not provided, it will be extracted automatically from the docstring
 | 
						|
                of the *path operation function*.
 | 
						|
 | 
						|
                It can contain Markdown.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_description: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The description for the default response.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = "Successful Response",
 | 
						|
        responses: Annotated[
 | 
						|
            Optional[Dict[Union[int, str], Dict[str, Any]]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Additional responses that could be returned by this *path operation*.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        deprecated: Annotated[
 | 
						|
            Optional[bool],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Mark this *path operation* as deprecated.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        operation_id: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Custom operation ID to be used by this *path operation*.
 | 
						|
 | 
						|
                By default, it is generated automatically.
 | 
						|
 | 
						|
                If you provide a custom operation ID, you need to make sure it is
 | 
						|
                unique for the whole API.
 | 
						|
 | 
						|
                You can customize the
 | 
						|
                operation ID generation with the parameter
 | 
						|
                `generate_unique_id_function` in the `FastAPI` class.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_include: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to include only certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_exclude: Annotated[
 | 
						|
            Optional[IncEx],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to exclude certain fields in the
 | 
						|
                response data.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        response_model_by_alias: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response model
 | 
						|
                should be serialized by alias when an alias is used.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_model_exclude_unset: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that were not set and
 | 
						|
                have their default values. This is different from
 | 
						|
                `response_model_exclude_defaults` in that if the fields are set,
 | 
						|
                they will be included in the response, even if the value is the same
 | 
						|
                as the default.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_defaults: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data
 | 
						|
                should have all the fields, including the ones that have the same value
 | 
						|
                as the default. This is different from `response_model_exclude_unset`
 | 
						|
                in that if the fields are set but contain the same default values,
 | 
						|
                they will be excluded from the response.
 | 
						|
 | 
						|
                When `True`, default values are omitted from the response.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        response_model_exclude_none: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Configuration passed to Pydantic to define if the response data should
 | 
						|
                exclude fields set to `None`.
 | 
						|
 | 
						|
                This is much simpler (less smart) than `response_model_exclude_unset`
 | 
						|
                and `response_model_exclude_defaults`. You probably want to use one of
 | 
						|
                those two instead of this one, as those allow returning `None` values
 | 
						|
                when it makes sense.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = False,
 | 
						|
        include_in_schema: Annotated[
 | 
						|
            bool,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Include this *path operation* in the generated OpenAPI schema.
 | 
						|
 | 
						|
                This affects the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = True,
 | 
						|
        response_class: Annotated[
 | 
						|
            Type[Response],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Response class to be used for this *path operation*.
 | 
						|
 | 
						|
                This will not be used if you return a response directly.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(JSONResponse),
 | 
						|
        name: Annotated[
 | 
						|
            Optional[str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Name for this *path operation*. Only used internally.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        callbacks: Annotated[
 | 
						|
            Optional[List[BaseRoute]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                List of *path operations* that will be used as OpenAPI callbacks.
 | 
						|
 | 
						|
                This is only for OpenAPI documentation, the callbacks won't be used
 | 
						|
                directly.
 | 
						|
 | 
						|
                It will be added to the generated OpenAPI (e.g. visible at `/docs`).
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        openapi_extra: Annotated[
 | 
						|
            Optional[Dict[str, Any]],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Extra metadata to be included in the OpenAPI schema for this *path
 | 
						|
                operation*.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = None,
 | 
						|
        generate_unique_id_function: Annotated[
 | 
						|
            Callable[[APIRoute], str],
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                Customize the function used to generate unique IDs for the *path
 | 
						|
                operations* shown in the generated OpenAPI.
 | 
						|
 | 
						|
                This is particularly useful when automatically generating clients or
 | 
						|
                SDKs for your API.
 | 
						|
 | 
						|
                Read more about it in the
 | 
						|
                [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function).
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ] = Default(generate_unique_id),
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add a *path operation* using an HTTP TRACE operation.
 | 
						|
 | 
						|
        ## Example
 | 
						|
 | 
						|
        ```python
 | 
						|
        from fastapi import APIRouter, FastAPI
 | 
						|
        from pydantic import BaseModel
 | 
						|
 | 
						|
        class Item(BaseModel):
 | 
						|
            name: str
 | 
						|
            description: str | None = None
 | 
						|
 | 
						|
        app = FastAPI()
 | 
						|
        router = APIRouter()
 | 
						|
 | 
						|
        @router.trace("/items/{item_id}")
 | 
						|
        def trace_item(item_id: str):
 | 
						|
            return None
 | 
						|
 | 
						|
        app.include_router(router)
 | 
						|
        ```
 | 
						|
        """
 | 
						|
        return self.api_route(
 | 
						|
            path=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,
 | 
						|
            methods=["TRACE"],
 | 
						|
            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,
 | 
						|
        )
 | 
						|
 | 
						|
    @deprecated(
 | 
						|
        """
 | 
						|
        on_event is deprecated, use lifespan event handlers instead.
 | 
						|
 | 
						|
        Read more about it in the
 | 
						|
        [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/).
 | 
						|
        """
 | 
						|
    )
 | 
						|
    def on_event(
 | 
						|
        self,
 | 
						|
        event_type: Annotated[
 | 
						|
            str,
 | 
						|
            Doc(
 | 
						|
                """
 | 
						|
                The type of event. `startup` or `shutdown`.
 | 
						|
                """
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
 | 
						|
        """
 | 
						|
        Add an event handler for the router.
 | 
						|
 | 
						|
        `on_event` is deprecated, use `lifespan` event handlers instead.
 | 
						|
 | 
						|
        Read more about it in the
 | 
						|
        [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated).
 | 
						|
        """
 | 
						|
 | 
						|
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
 | 
						|
            self.add_event_handler(event_type, func)
 | 
						|
            return func
 | 
						|
 | 
						|
        return decorator
 |