diff --git a/fastapi/param_functions.py b/fastapi/param_functions.py index e32f75593..3ff152c08 100644 --- a/fastapi/param_functions.py +++ b/fastapi/param_functions.py @@ -1,4 +1,17 @@ -from typing import Any, Callable, Dict, List, Optional, Sequence, Union +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Dict, + Iterator, + List, + Optional, + Sequence, + TypeVar, + Union, + overload, +) from annotated_doc import Doc from fastapi import params @@ -2218,6 +2231,54 @@ def File( # noqa: N802 ) +T = TypeVar("T") + + +@overload +def Depends( # noqa: N802 + dependency: None = None, + *, + use_cache: bool = True, +) -> Any: # pragma: nocover + pass + + +@overload +def Depends( # noqa: N802 + dependency: Callable[..., Awaitable[T]], + *, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Depends( # noqa: N802 + dependency: Callable[..., Iterator[T]], + *, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Depends( # noqa: N802 + dependency: Callable[..., AsyncIterator[T]], + *, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Depends( # noqa: N802 + dependency: Callable[..., T], + *, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + def Depends( # noqa: N802 dependency: Annotated[ Optional[Callable[..., Any]], @@ -2298,6 +2359,56 @@ def Depends( # noqa: N802 return params.Depends(dependency=dependency, use_cache=use_cache, scope=scope) +@overload +def Security( # noqa: N802 + dependency: None = None, + *, + scopes: Optional[Sequence[str]] = None, + use_cache: bool = True, +) -> Any: # pragma: nocover + pass + + +@overload +def Security( # noqa: N802 + dependency: Callable[..., Awaitable[T]], + *, + scopes: Optional[Sequence[str]] = None, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Security( # noqa: N802 + dependency: Callable[..., Iterator[T]], + *, + scopes: Optional[Sequence[str]] = None, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Security( # noqa: N802 + dependency: Callable[..., AsyncIterator[T]], + *, + scopes: Optional[Sequence[str]] = None, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + +@overload +def Security( # noqa: N802 + dependency: Callable[..., T], + *, + scopes: Optional[Sequence[str]] = None, + use_cache: bool = True, +) -> T: # pragma: nocover + pass + + def Security( # noqa: N802 dependency: Annotated[ Optional[Callable[..., Any]],