From eb53f733c2c6b1e605bc9de3757f3c453f41f972 Mon Sep 17 00:00:00 2001 From: VKFisher Date: Tue, 22 Mar 2022 10:36:43 +0700 Subject: [PATCH 1/4] change erroneous issubclass call to isinstance --- src/dependency_injector/wiring.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dependency_injector/wiring.py b/src/dependency_injector/wiring.py index 37aba496..3f998393 100644 --- a/src/dependency_injector/wiring.py +++ b/src/dependency_injector/wiring.py @@ -321,7 +321,7 @@ def _is_werkzeug_local_proxy(self, instance: object) -> bool: def _is_starlette_request_cls(self, instance: object) -> bool: return starlette \ and isinstance(instance, type) \ - and issubclass(instance, starlette.requests.Request) + and isinstance(instance, starlette.requests.Request) def _is_builtin(self, instance: object) -> bool: return inspect.isbuiltin(instance) From aa11b0bb82d40830c791e89d4225f1578b2add66 Mon Sep 17 00:00:00 2001 From: VKFisher Date: Tue, 22 Mar 2022 10:36:58 +0700 Subject: [PATCH 2/4] import numpy.typing in tests --- tests/unit/samples/wiring/imports.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/samples/wiring/imports.py b/tests/unit/samples/wiring/imports.py index 37fa8ebe..ecab7ce8 100644 --- a/tests/unit/samples/wiring/imports.py +++ b/tests/unit/samples/wiring/imports.py @@ -5,6 +5,7 @@ if "pypy" not in sys.version.lower(): import numpy # noqa from numpy import * # noqa + from numpy.typing import * # noqa import scipy # noqa from scipy import * # noqa From 586ba890471f135a8aef8a627ee8358ed2490420 Mon Sep 17 00:00:00 2001 From: VKFisher Date: Tue, 22 Mar 2022 11:19:10 +0700 Subject: [PATCH 3/4] better subclass check --- src/dependency_injector/wiring.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/dependency_injector/wiring.py b/src/dependency_injector/wiring.py index 3f998393..cad8d4b1 100644 --- a/src/dependency_injector/wiring.py +++ b/src/dependency_injector/wiring.py @@ -321,7 +321,13 @@ def _is_werkzeug_local_proxy(self, instance: object) -> bool: def _is_starlette_request_cls(self, instance: object) -> bool: return starlette \ and isinstance(instance, type) \ - and isinstance(instance, starlette.requests.Request) + and self._is_subclass(instance, starlette.requests.Request) + + def _is_subclass(self, instance: type, cls: type) -> bool: + try: + issubclass(instance, cls) + except TypeError: + return False def _is_builtin(self, instance: object) -> bool: return inspect.isbuiltin(instance) From 3d128ca5ca41c2a7de7569f6e989c9073a2b99fe Mon Sep 17 00:00:00 2001 From: VKFisher Date: Tue, 22 Mar 2022 16:37:34 +0700 Subject: [PATCH 4/4] fix return --- src/dependency_injector/wiring.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dependency_injector/wiring.py b/src/dependency_injector/wiring.py index cad8d4b1..927796bc 100644 --- a/src/dependency_injector/wiring.py +++ b/src/dependency_injector/wiring.py @@ -321,11 +321,11 @@ def _is_werkzeug_local_proxy(self, instance: object) -> bool: def _is_starlette_request_cls(self, instance: object) -> bool: return starlette \ and isinstance(instance, type) \ - and self._is_subclass(instance, starlette.requests.Request) + and self._safe_is_subclass(instance, starlette.requests.Request) - def _is_subclass(self, instance: type, cls: type) -> bool: + def _safe_is_subclass(self, instance: type, cls: type) -> bool: try: - issubclass(instance, cls) + return issubclass(instance, cls) except TypeError: return False