mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	Make wiring inspect exclsuions extensible
This commit is contained in:
		
							parent
							
								
									eb74b1e9d0
								
							
						
					
					
						commit
						0c58064a36
					
				|  | @ -6,6 +6,8 @@ import importlib.machinery | ||||||
| import inspect | import inspect | ||||||
| import pkgutil | import pkgutil | ||||||
| import sys | import sys | ||||||
|  | from contextlib import suppress | ||||||
|  | from inspect import isbuiltin, isclass | ||||||
| from types import ModuleType | from types import ModuleType | ||||||
| from typing import ( | from typing import ( | ||||||
|     TYPE_CHECKING, |     TYPE_CHECKING, | ||||||
|  | @ -15,6 +17,7 @@ from typing import ( | ||||||
|     Dict, |     Dict, | ||||||
|     Iterable, |     Iterable, | ||||||
|     Iterator, |     Iterator, | ||||||
|  |     List, | ||||||
|     Optional, |     Optional, | ||||||
|     Protocol, |     Protocol, | ||||||
|     Set, |     Set, | ||||||
|  | @ -60,13 +63,11 @@ else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| MARKER_EXTRACTORS = [] | MARKER_EXTRACTORS: List[Callable[[Any], Any]] = [] | ||||||
|  | INSPECT_EXCLUSION_FILTERS: List[Callable[[Any], bool]] = [isbuiltin] | ||||||
| 
 | 
 | ||||||
| try: | with suppress(ImportError): | ||||||
|     from fastapi.params import Depends as FastAPIDepends |     from fastapi.params import Depends as FastAPIDepends | ||||||
| except ImportError: |  | ||||||
|     pass |  | ||||||
| else: |  | ||||||
| 
 | 
 | ||||||
|     def extract_marker_from_fastapi(param: Any) -> Any: |     def extract_marker_from_fastapi(param: Any) -> Any: | ||||||
|         if isinstance(param, FastAPIDepends): |         if isinstance(param, FastAPIDepends): | ||||||
|  | @ -75,11 +76,8 @@ else: | ||||||
| 
 | 
 | ||||||
|     MARKER_EXTRACTORS.append(extract_marker_from_fastapi) |     MARKER_EXTRACTORS.append(extract_marker_from_fastapi) | ||||||
| 
 | 
 | ||||||
| try: | with suppress(ImportError): | ||||||
|     from fast_depends.dependencies import Depends as FastDepends |     from fast_depends.dependencies import Depends as FastDepends | ||||||
| except ImportError: |  | ||||||
|     pass |  | ||||||
| else: |  | ||||||
| 
 | 
 | ||||||
|     def extract_marker_from_fast_depends(param: Any) -> Any: |     def extract_marker_from_fast_depends(param: Any) -> Any: | ||||||
|         if isinstance(param, FastDepends): |         if isinstance(param, FastDepends): | ||||||
|  | @ -89,16 +87,22 @@ else: | ||||||
|     MARKER_EXTRACTORS.append(extract_marker_from_fast_depends) |     MARKER_EXTRACTORS.append(extract_marker_from_fast_depends) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| try: | with suppress(ImportError): | ||||||
|     import starlette.requests |     from starlette.requests import Request as StarletteRequest | ||||||
| except ImportError: | 
 | ||||||
|     starlette = None |     def is_starlette_request_cls(obj: Any) -> bool: | ||||||
|  |         return isclass(obj) and _safe_is_subclass(obj, StarletteRequest) | ||||||
|  | 
 | ||||||
|  |     INSPECT_EXCLUSION_FILTERS.append(is_starlette_request_cls) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| try: | with suppress(ImportError): | ||||||
|     import werkzeug.local |     from werkzeug.local import LocalProxy as WerkzeugLocalProxy | ||||||
| except ImportError: | 
 | ||||||
|     werkzeug = None |     def is_werkzeug_local_proxy(obj: Any) -> bool: | ||||||
|  |         return isinstance(obj, WerkzeugLocalProxy) | ||||||
|  | 
 | ||||||
|  |     INSPECT_EXCLUSION_FILTERS.append(is_werkzeug_local_proxy) | ||||||
| 
 | 
 | ||||||
| from . import providers  # noqa: E402 | from . import providers  # noqa: E402 | ||||||
| 
 | 
 | ||||||
|  | @ -416,31 +420,12 @@ class ProvidersMap: | ||||||
|         return providers_map |         return providers_map | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class InspectFilter: | def is_excluded_from_inspect(obj: Any) -> bool: | ||||||
| 
 |     for is_excluded in INSPECT_EXCLUSION_FILTERS: | ||||||
|     def is_excluded(self, instance: object) -> bool: |         if is_excluded(obj): | ||||||
|         if self._is_werkzeug_local_proxy(instance): |  | ||||||
|             return True |             return True | ||||||
|         elif self._is_starlette_request_cls(instance): |  | ||||||
|             return True |  | ||||||
|         elif self._is_builtin(instance): |  | ||||||
|             return True |  | ||||||
|         else: |  | ||||||
|     return False |     return False | ||||||
| 
 | 
 | ||||||
|     def _is_werkzeug_local_proxy(self, instance: object) -> bool: |  | ||||||
|         return werkzeug and isinstance(instance, werkzeug.local.LocalProxy) |  | ||||||
| 
 |  | ||||||
|     def _is_starlette_request_cls(self, instance: object) -> bool: |  | ||||||
|         return ( |  | ||||||
|             starlette |  | ||||||
|             and isinstance(instance, type) |  | ||||||
|             and _safe_is_subclass(instance, starlette.requests.Request) |  | ||||||
|         ) |  | ||||||
| 
 |  | ||||||
|     def _is_builtin(self, instance: object) -> bool: |  | ||||||
|         return inspect.isbuiltin(instance) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| def wire(  # noqa: C901 | def wire(  # noqa: C901 | ||||||
|     container: Container, |     container: Container, | ||||||
|  | @ -460,7 +445,7 @@ def wire(  # noqa: C901 | ||||||
| 
 | 
 | ||||||
|     for module in modules: |     for module in modules: | ||||||
|         for member_name, member in _get_members_and_annotated(module): |         for member_name, member in _get_members_and_annotated(module): | ||||||
|             if _inspect_filter.is_excluded(member): |             if is_excluded_from_inspect(member): | ||||||
|                 continue |                 continue | ||||||
| 
 | 
 | ||||||
|             if _is_marker(member): |             if _is_marker(member): | ||||||
|  | @ -1064,7 +1049,6 @@ def is_loader_installed() -> bool: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| _patched_registry = PatchedRegistry() | _patched_registry = PatchedRegistry() | ||||||
| _inspect_filter = InspectFilter() |  | ||||||
| _loader = AutoLoader() | _loader = AutoLoader() | ||||||
| 
 | 
 | ||||||
| # Optimizations | # Optimizations | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user