@@ -37,6 +37,21 @@ class GenericMeta(type): ...
37
37
else :
38
38
GenericAlias = None
39
39
40
+ if sys .version_info >= (3 , 9 ):
41
+ from typing import Annotated , get_args , get_origin
42
+ else :
43
+ try :
44
+ from typing_extensions import Annotated , get_args , get_origin
45
+ except ImportError :
46
+ Annotated = object ()
47
+
48
+ # For preventing NameError. Never executes
49
+ def get_args (hint ):
50
+ return ()
51
+
52
+ def get_origin (tp ):
53
+ return None
54
+
40
55
41
56
try :
42
57
import fastapi .params
@@ -572,6 +587,24 @@ def _unpatch_attribute(patched: PatchedAttribute) -> None:
572
587
setattr (patched .member , patched .name , patched .marker )
573
588
574
589
590
+ def _extract_marker (parameter : inspect .Parameter ) -> Optional ["_Marker" ]:
591
+ if get_origin (parameter .annotation ) is Annotated :
592
+ marker = get_args (parameter .annotation )[1 ]
593
+ else :
594
+ marker = parameter .default
595
+
596
+ if not isinstance (marker , _Marker ) and not _is_fastapi_depends (marker ):
597
+ return None
598
+
599
+ if _is_fastapi_depends (marker ):
600
+ marker = marker .dependency
601
+
602
+ if not isinstance (marker , _Marker ):
603
+ return None
604
+
605
+ return marker
606
+
607
+
575
608
def _fetch_reference_injections ( # noqa: C901
576
609
fn : Callable [..., Any ],
577
610
) -> Tuple [Dict [str , Any ], Dict [str , Any ]]:
@@ -596,18 +629,10 @@ def _fetch_reference_injections( # noqa: C901
596
629
injections = {}
597
630
closing = {}
598
631
for parameter_name , parameter in signature .parameters .items ():
599
- if not isinstance (parameter .default , _Marker ) and not _is_fastapi_depends (
600
- parameter .default
601
- ):
602
- continue
632
+ marker = _extract_marker (parameter )
603
633
604
- marker = parameter .default
605
-
606
- if _is_fastapi_depends (marker ):
607
- marker = marker .dependency
608
-
609
- if not isinstance (marker , _Marker ):
610
- continue
634
+ if marker is None :
635
+ continue
611
636
612
637
if isinstance (marker , Closing ):
613
638
marker = marker .provider
0 commit comments