@@ -37,6 +37,21 @@ class GenericMeta(type): ...
3737else :
3838 GenericAlias = None
3939
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+
4055
4156try :
4257 import fastapi .params
@@ -572,6 +587,24 @@ def _unpatch_attribute(patched: PatchedAttribute) -> None:
572587 setattr (patched .member , patched .name , patched .marker )
573588
574589
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+
575608def _fetch_reference_injections ( # noqa: C901
576609 fn : Callable [..., Any ],
577610) -> Tuple [Dict [str , Any ], Dict [str , Any ]]:
@@ -596,18 +629,10 @@ def _fetch_reference_injections( # noqa: C901
596629 injections = {}
597630 closing = {}
598631 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 )
603633
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
611636
612637 if isinstance (marker , Closing ):
613638 marker = marker .provider
0 commit comments