From 2fe4c393a85c7a3ffb0e2fdfe28cb682cf0358f4 Mon Sep 17 00:00:00 2001 From: AndrianEquestrian Date: Sat, 31 May 2025 19:56:14 +0300 Subject: [PATCH] Add support for Fast Stream Depends --- src/dependency_injector/wiring.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/dependency_injector/wiring.py b/src/dependency_injector/wiring.py index b8534ee5..dd6635f4 100644 --- a/src/dependency_injector/wiring.py +++ b/src/dependency_injector/wiring.py @@ -66,6 +66,12 @@ def get_origin(tp): werkzeug = None +try: + import fast_depends.dependencies +except ImportError: + fast_depends = None + + from . import providers __all__ = ( @@ -583,6 +589,8 @@ 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: @@ -592,10 +600,13 @@ def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]: else: marker = parameter.default - if not isinstance(marker, _Marker) and not _is_fastapi_depends(marker): + if _is_fastapi_depends(marker) or _is_fast_stream_depends(marker): + depends_available = True + + if not isinstance(marker, _Marker) and not depends_available: return None - if _is_fastapi_depends(marker): + if depends_available: marker = marker.dependency if not isinstance(marker, _Marker): @@ -721,6 +732,14 @@ 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 + + def _is_patched(fn) -> bool: return _patched_registry.has_callable(fn)