diff --git a/fastapi/param_functions.py b/fastapi/param_functions.py index b3621626c..d795377b2 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 fastapi import params from fastapi._compat import Undefined @@ -2217,6 +2230,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]], @@ -2277,6 +2338,56 @@ def Depends( # noqa: N802 return params.Depends(dependency=dependency, use_cache=use_cache) +@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]],