mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-07-07 13:54:25 +03:00
fixup! Add support for Fast Stream Depends
This commit is contained in:
parent
575d0e4609
commit
1cb1d66d7c
|
@ -47,11 +47,19 @@ else:
|
||||||
def get_origin(tp):
|
def get_origin(tp):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
MARKER_EXTRACTORS = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import fastapi.params
|
from fastapi.params import Depends as FastApiDepends
|
||||||
except ImportError:
|
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:
|
try:
|
||||||
|
@ -67,10 +75,16 @@ except ImportError:
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import fast_depends.dependencies
|
from fast_depends.dependencies import Depends as FastDepends
|
||||||
except ImportError:
|
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
|
from . import providers
|
||||||
|
|
||||||
|
@ -102,23 +116,6 @@ if TYPE_CHECKING:
|
||||||
else:
|
else:
|
||||||
Container = Any
|
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:
|
class PatchedRegistry:
|
||||||
|
|
||||||
|
@ -606,8 +603,6 @@ def _unpatch_attribute(patched: PatchedAttribute) -> None:
|
||||||
|
|
||||||
|
|
||||||
def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]:
|
def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]:
|
||||||
depends_available = False
|
|
||||||
|
|
||||||
if get_origin(parameter.annotation) is Annotated:
|
if get_origin(parameter.annotation) is Annotated:
|
||||||
args = get_args(parameter.annotation)
|
args = get_args(parameter.annotation)
|
||||||
if len(args) > 1:
|
if len(args) > 1:
|
||||||
|
@ -617,14 +612,10 @@ def _extract_marker(parameter: inspect.Parameter) -> Optional["_Marker"]:
|
||||||
else:
|
else:
|
||||||
marker = parameter.default
|
marker = parameter.default
|
||||||
|
|
||||||
if any(depends_checker(marker) for depends_checker in _DEPENDS_CHECKERS):
|
for marker_extractor in MARKER_EXTRACTORS:
|
||||||
depends_available = True
|
if _marker := marker_extractor(marker):
|
||||||
|
marker = _marker
|
||||||
if not isinstance(marker, _Marker) and not depends_available:
|
break
|
||||||
return None
|
|
||||||
|
|
||||||
if depends_available:
|
|
||||||
marker = marker.dependency
|
|
||||||
|
|
||||||
if not isinstance(marker, _Marker):
|
if not isinstance(marker, _Marker):
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in New Issue
Block a user