diff --git a/src/pypendency/loaders/py_loader.py b/src/pypendency/loaders/py_loader.py index e984c9d..5655364 100644 --- a/src/pypendency/loaders/py_loader.py +++ b/src/pypendency/loaders/py_loader.py @@ -29,10 +29,10 @@ def __load_by_absolute_path(self, resource: str) -> None: self.__load_module(resource, module) def __load_module(self, resource: str, module: PythonLoadableModuleType) -> None: - try: - module.load(self.__container_builder) - except AttributeError as e: - raise exceptions.MissingLoaderMethod(resource) from e + if not hasattr(module, "load"): + raise exceptions.MissingLoaderMethod(resource) + + module.load(self.__container_builder) def load_by_module_name(self, resource: str) -> None: package = locate(resource) diff --git a/tests/loaders/test_py_loader.py b/tests/loaders/test_py_loader.py index b883cc5..fbc0740 100644 --- a/tests/loaders/test_py_loader.py +++ b/tests/loaders/test_py_loader.py @@ -44,6 +44,10 @@ def test_load_by_module_name_fails_for_loader_without_load_method(self): with self.assertRaises(exceptions.MissingLoaderMethod): self.loader.load_by_module_name("tests.resources.test_di_no_load_method") + def test_load_by_module_name_fails_for_module_with_generic_attribute_error(self): + with self.assertRaises(AttributeError): + self.loader.load_by_module_name("tests.resources.test_di_with_generic_attribute_error") + def test_load_by_module_name_works_as_expected(self): self.loader.load_by_module_name("tests.resources.test_di") c = self._container_builder.get("example.C") diff --git a/tests/resources/test_di_with_generic_attribute_error.py b/tests/resources/test_di_with_generic_attribute_error.py new file mode 100644 index 0000000..c3712b4 --- /dev/null +++ b/tests/resources/test_di_with_generic_attribute_error.py @@ -0,0 +1,12 @@ +from pypendency.argument import Argument +from pypendency.builder import ContainerBuilder +from pypendency.definition import Definition + + +def load(container_builder: ContainerBuilder): + container_builder.set_definition( + Definition('example.A', 'tests.resources.class_a.A') + ) + + x = 42 + x.append("This will cause an AttributeError")