Skip to content

Add support for Fast Stream Depends #898

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fixup! Add support for Fast Stream Depends
  • Loading branch information
AndrianEquestrian committed Jun 15, 2025
commit 1cb1d66d7c7403ef74ebf7b97bbddf841b9bf169
55 changes: 23 additions & 32 deletions src/dependency_injector/wiring.py
Original file line number Diff line number Diff line change
@@ -47,11 +47,19 @@ def get_args(hint):
def get_origin(tp):
return None

MARKER_EXTRACTORS = []

try:
import fastapi.params
from fastapi.params import Depends as FastApiDepends
except ImportError:
fastapi = None
pass
else:
def extract_marker_from_fastapi(param: Any) -> Any:
if isinstance(param, FastApiDepends):
return param.dependency
return None

MARKER_EXTRACTORS.append(extract_marker_from_fastapi)


try:
@@ -67,10 +75,16 @@ def get_origin(tp):


try:
import fast_depends.dependencies
from fast_depends.dependencies import Depends as FastDepends
except ImportError:
fast_depends = None
pass
else:
def extract_marker_from_fast_depends(param: Any) -> Any:
if isinstance(param, FastDepends):
return param.dependency
return None

MARKER_EXTRACTORS.append(extract_marker_from_fast_depends)

from . import providers

@@ -102,23 +116,6 @@ def get_origin(tp):
else:
Container = Any

def _is_fastapi_depends(param: Any) -> bool:
return fastapi and isinstance(param, fastapi.params.Depends)


if fast_depends:
def _is_fast_stream_depends(param: Any) -> bool:
return isinstance(param, fast_depends.dependencies.Depends)
else:
def _is_fast_stream_depends(param: Any) -> bool:
return False


_DEPENDS_CHECKERS = (
_is_fastapi_depends,
_is_fast_stream_depends,
)


class PatchedRegistry:

@@ -606,8 +603,6 @@ def _unpatch_attribute(patched: PatchedAttribute) -> None:


def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]:
depends_available = False

if get_origin(parameter.annotation) is Annotated:
args = get_args(parameter.annotation)
if len(args) > 1:
@@ -617,18 +612,14 @@ def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]:
else:
marker = parameter.default

if any(depends_checker(marker) for depends_checker in _DEPENDS_CHECKERS):
depends_available = True
for marker_extractor in MARKER_EXTRACTORS:
if _marker := marker_extractor(marker):
marker = _marker
break

if not isinstance(marker, _Marker) and not depends_available:
if not isinstance(marker, _Marker):
return None

if depends_available:
marker = marker.dependency

if not isinstance(marker, _Marker):
return None

return marker