@@ -37,10 +37,21 @@ class GenericMeta(type):
3737
3838
3939try :
40- from fastapi .params import Depends as FastAPIDepends
41- fastapi_installed = True
40+ import fastapi .params
4241except ImportError :
43- fastapi_installed = False
42+ fastapi = None
43+
44+
45+ try :
46+ import starlette .requests
47+ except ImportError :
48+ starlette = None
49+
50+
51+ try :
52+ import werkzeug .local
53+ except ImportError :
54+ werkzeug = None
4455
4556
4657from . import providers
@@ -111,20 +122,21 @@ def resolve_provider(
111122 ) -> Optional [providers .Provider ]:
112123 if isinstance (provider , providers .Delegate ):
113124 return self ._resolve_delegate (provider )
114- if isinstance (provider , (
125+ elif isinstance (provider , (
115126 providers .ProvidedInstance ,
116127 providers .AttributeGetter ,
117128 providers .ItemGetter ,
118129 providers .MethodCaller ,
119130 )):
120131 return self ._resolve_provided_instance (provider )
121- if isinstance (provider , providers .ConfigurationOption ):
132+ elif isinstance (provider , providers .ConfigurationOption ):
122133 return self ._resolve_config_option (provider )
123- if isinstance (provider , providers .TypedConfigurationOption ):
134+ elif isinstance (provider , providers .TypedConfigurationOption ):
124135 return self ._resolve_config_option (provider .option , as_ = provider .provides )
125- if isinstance (provider , str ):
136+ elif isinstance (provider , str ):
126137 return self ._resolve_string_id (provider , modifier )
127- return self ._resolve_provider (provider )
138+ else :
139+ return self ._resolve_provider (provider )
128140
129141 def _resolve_string_id (
130142 self ,
@@ -247,6 +259,28 @@ def _create_providers_map(
247259 return providers_map
248260
249261
262+ class InspectFilter :
263+
264+ def is_excluded (self , instance : object ) -> bool :
265+ if self ._is_werkzeug_local_proxy (instance ):
266+ return True
267+ elif self ._is_starlette_request_cls (instance ):
268+ return True
269+ else :
270+ return False
271+
272+ def _is_werkzeug_local_proxy (self , instance : object ) -> bool :
273+ return werkzeug and isinstance (instance , werkzeug .local .LocalProxy )
274+
275+ def _is_starlette_request_cls (self , instance : object ) -> bool :
276+ return starlette \
277+ and isinstance (instance , type ) \
278+ and issubclass (instance , starlette .requests .Request )
279+
280+
281+ inspect_filter = InspectFilter ()
282+
283+
250284def wire ( # noqa: C901
251285 container : Container ,
252286 * ,
@@ -268,6 +302,8 @@ def wire( # noqa: C901
268302
269303 for module in modules :
270304 for name , member in inspect .getmembers (module ):
305+ if inspect_filter .is_excluded (member ):
306+ continue
271307 if inspect .isfunction (member ):
272308 _patch_fn (module , name , member , providers_map )
273309 elif inspect .isclass (member ):
@@ -530,7 +566,7 @@ def _is_fastapi_default_arg_injection(injection, kwargs):
530566
531567
532568def _is_fastapi_depends (param : Any ) -> bool :
533- return fastapi_installed and isinstance (param , FastAPIDepends )
569+ return fastapi and isinstance (param , fastapi . params . Depends )
534570
535571
536572def _is_patched (fn ):
0 commit comments