diff --git a/docforge/loader/griffe_loader.py b/docforge/loader/griffe_loader.py index 8847367..9873458 100644 --- a/docforge/loader/griffe_loader.py +++ b/docforge/loader/griffe_loader.py @@ -63,6 +63,7 @@ class GriffeLoader: self, module_paths: List[str], project_name: Optional[str] = None, + skip_import_errors: bool = None, ) -> Project: if not module_paths: raise ValueError("At least one module path must be provided") @@ -73,7 +74,14 @@ class GriffeLoader: project = Project(name=project_name) for module_path in module_paths: - module = self.load_module(module_path) + try: + module = self.load_module(module_path) + except ImportError as import_error: + if skip_import_errors: + logger.debug("Could not load %s: %s", module_path, import_error) + continue + else: + raise import_error project.add_module(module) return project diff --git a/docforge/loader/griffe_loader.pyi b/docforge/loader/griffe_loader.pyi index d272562..32229cf 100644 --- a/docforge/loader/griffe_loader.pyi +++ b/docforge/loader/griffe_loader.pyi @@ -23,6 +23,7 @@ class GriffeLoader: self, module_paths: List[str], project_name: Optional[str] = ..., + skip_import_errors: bool = ..., ) -> Project: """Load a documentation project from Python modules.""" diff --git a/tests/introspection/test_import_failures.py b/tests/introspection/test_import_failures.py index 451ed55..8f80b71 100644 --- a/tests/introspection/test_import_failures.py +++ b/tests/introspection/test_import_failures.py @@ -1,12 +1,21 @@ +import pytest from docforge import GriffeLoader -def test_import_failure_does_not_crash(): +def test_load_project_raises_on_missing_module_by_default(): + loader = GriffeLoader() + + with pytest.raises(ImportError): + loader.load_project( + ["nonexistent.module", "sys"] + ) + +def test_load_project_skips_missing_modules_when_enabled(): loader = GriffeLoader() project = loader.load_project( - ["nonexistent.module", "sys"] + ["nonexistent.module", "sys"], + skip_import_errors=True, ) - # sys should still load - assert "sys" in project.modules + assert "sys" in project.modules \ No newline at end of file