init.detect_modules(): Add base_types filter #80
1 changed files with 9 additions and 4 deletions
init.detect_modules(): Add base_types filter
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m10s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m29s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 4m5s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 4m3s
CI / Packaging test (push) Successful in 0s
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m10s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m29s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 4m5s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 4m3s
CI / Packaging test (push) Successful in 0s
Add a parameter "base_types" to detect_modules(), defaulting to None. If it is not None, a module is only exported if its same-named object inherits from one of the given types. Modules without a same-named class are skipped instead of raising AttributeError, which covers helper modules. The return annotation becomes Sequence[str] instead of list[str] to remove mutability for easier type checking. Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v0.84.2 Signed-off-by: Jan Lindemann <jan@janware.com>
commit
0407215530
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue