diff --git a/src/python/jw/pkg/lib/init.py b/src/python/jw/pkg/lib/init.py index 8098f687..014bdaed 100644 --- a/src/python/jw/pkg/lib/init.py +++ b/src/python/jw/pkg/lib/init.py @@ -6,16 +6,17 @@ from importlib import import_module from typing import TYPE_CHECKING if TYPE_CHECKING: - from collections.abc import MutableMapping - from typing import Any + from collections.abc import Iterable, MutableMapping + from typing import Any, Sequence def detect_modules( namespace: MutableMapping[str, Any], prefix: str | None = None, skip: set[str] | None = None, *, + base_types: Iterable[type[Any]] | None = None, extend_namespace: bool = True, -) -> list[str]: +) -> Sequence[str]: package_name = namespace.get("__name__") package_path = namespace.get("__path__") @@ -41,7 +42,11 @@ def detect_modules( continue module = import_module(f".{module_name}", package_name) - cls = getattr(module, module_name) + cls = getattr(module, module_name, None) + if cls is None or not isinstance(cls, type): + continue + if base_types is not None and not issubclass(cls, tuple(base_types)): + continue namespace[module_name] = cls ret.append(module_name)