6
6
import inspect
7
7
import pkgutil
8
8
import sys
9
+ from contextlib import suppress
10
+ from inspect import isbuiltin , isclass
9
11
from types import ModuleType
10
12
from typing import (
11
13
TYPE_CHECKING ,
15
17
Dict ,
16
18
Iterable ,
17
19
Iterator ,
20
+ List ,
18
21
Optional ,
19
22
Protocol ,
20
23
Set ,
@@ -60,13 +63,11 @@ def get_origin(tp):
60
63
return None
61
64
62
65
63
- MARKER_EXTRACTORS = []
66
+ MARKER_EXTRACTORS : List [Callable [[Any ], Any ]] = []
67
+ INSPECT_EXCLUSION_FILTERS : List [Callable [[Any ], bool ]] = [isbuiltin ]
64
68
65
- try :
69
+ with suppress ( ImportError ) :
66
70
from fastapi .params import Depends as FastAPIDepends
67
- except ImportError :
68
- pass
69
- else :
70
71
71
72
def extract_marker_from_fastapi (param : Any ) -> Any :
72
73
if isinstance (param , FastAPIDepends ):
@@ -75,11 +76,8 @@ def extract_marker_from_fastapi(param: Any) -> Any:
75
76
76
77
MARKER_EXTRACTORS .append (extract_marker_from_fastapi )
77
78
78
- try :
79
+ with suppress ( ImportError ) :
79
80
from fast_depends .dependencies import Depends as FastDepends
80
- except ImportError :
81
- pass
82
- else :
83
81
84
82
def extract_marker_from_fast_depends (param : Any ) -> Any :
85
83
if isinstance (param , FastDepends ):
@@ -89,16 +87,22 @@ def extract_marker_from_fast_depends(param: Any) -> Any:
89
87
MARKER_EXTRACTORS .append (extract_marker_from_fast_depends )
90
88
91
89
92
- try :
93
- import starlette .requests
94
- except ImportError :
95
- starlette = None
90
+ with suppress (ImportError ):
91
+ from starlette .requests import Request as StarletteRequest
96
92
93
+ def is_starlette_request_cls (obj : Any ) -> bool :
94
+ return isclass (obj ) and issubclass (obj , StarletteRequest )
97
95
98
- try :
99
- import werkzeug .local
100
- except ImportError :
101
- werkzeug = None
96
+ INSPECT_EXCLUSION_FILTERS .append (is_starlette_request_cls )
97
+
98
+
99
+ with suppress (ImportError ):
100
+ from werkzeug .local import LocalProxy as WerkzeugLocalProxy
101
+
102
+ def is_werkzeug_local_proxy (obj : Any ) -> bool :
103
+ return isinstance (obj , WerkzeugLocalProxy )
104
+
105
+ INSPECT_EXCLUSION_FILTERS .append (is_werkzeug_local_proxy )
102
106
103
107
from . import providers # noqa: E402
104
108
@@ -416,30 +420,11 @@ def _create_providers_map(
416
420
return providers_map
417
421
418
422
419
- class InspectFilter :
420
-
421
- def is_excluded (self , instance : object ) -> bool :
422
- if self ._is_werkzeug_local_proxy (instance ):
423
+ def is_excluded_from_inspect (obj : Any ) -> bool :
424
+ for is_excluded in INSPECT_EXCLUSION_FILTERS :
425
+ if is_excluded (obj ):
423
426
return True
424
- elif self ._is_starlette_request_cls (instance ):
425
- return True
426
- elif self ._is_builtin (instance ):
427
- return True
428
- else :
429
- return False
430
-
431
- def _is_werkzeug_local_proxy (self , instance : object ) -> bool :
432
- return werkzeug and isinstance (instance , werkzeug .local .LocalProxy )
433
-
434
- def _is_starlette_request_cls (self , instance : object ) -> bool :
435
- return (
436
- starlette
437
- and isinstance (instance , type )
438
- and _safe_is_subclass (instance , starlette .requests .Request )
439
- )
440
-
441
- def _is_builtin (self , instance : object ) -> bool :
442
- return inspect .isbuiltin (instance )
427
+ return False
443
428
444
429
445
430
def wire ( # noqa: C901
@@ -460,7 +445,7 @@ def wire( # noqa: C901
460
445
461
446
for module in modules :
462
447
for member_name , member in _get_members_and_annotated (module ):
463
- if _inspect_filter . is_excluded (member ):
448
+ if is_excluded_from_inspect (member ):
464
449
continue
465
450
466
451
if _is_marker (member ):
@@ -1068,7 +1053,6 @@ def is_loader_installed() -> bool:
1068
1053
1069
1054
1070
1055
_patched_registry = PatchedRegistry ()
1071
- _inspect_filter = InspectFilter ()
1072
1056
_loader = AutoLoader ()
1073
1057
1074
1058
# Optimizations
0 commit comments