lib.init.detect_modules(): Renovate signature #1

Merged
Jan Lindemann merged 1 commit from jan/feature/20260606-lib-init-detect-modules--renovate-signature into master 2026-06-06 15:46:02 +02:00 AGit
6 changed files with 20 additions and 18 deletions
Showing only changes of commit 30f6799ddf - Show all commits

lib.init.detect_modules(): Renovate signature
All checks were successful
Standard CI tests / Packaging test - Kali Linux (pull_request) Successful in 3m49s
Standard CI tests / Packaging test - OpenSUSE Tumbleweed (pull_request) Successful in 3m36s
Standard CI tests / Packaging test - All supported platforms (pull_request) Successful in 0s
Standard CI tests / Packaging test - Kali Linux (push) Successful in 3m55s
Standard CI tests / Packaging test - OpenSUSE Tumbleweed (push) Successful in 3m26s
Standard CI tests / Packaging test - All supported platforms (push) Successful in 0s

- Remove package_name and package_path from the prototype of detect_modules(). They can and should be deduced from namespace['__name__'] and namespace['__path__'], respectively.
- Make prefix default to None, which signifies "Don't filter by prefix".
- Add an optional extend_namespace parameter, which will make the function append the module's __name__ to its __path__. This defaults to True, thereby adding a side effect to the function. Which is always wanted in the case for all callers of this function.
Signed-off-by: Jan Lindemann <jan@janware.com>
Jan Lindemann 2026-06-05 07:22:54 +02:00
Signed by: Jan Lindemann
GPG key ID: 3750640C9E25DD61

View file

@ -1,8 +1,6 @@
from ..lib.init import detect_modules from ..lib.init import detect_modules
__all__ = detect_modules( __all__ = detect_modules(
package_name = __name__,
package_path = __path__,
namespace = globals(), namespace = globals(),
prefix = 'Cmd', prefix = 'Cmd',
skip = {'Cmd'}, skip = {'Cmd'},

View file

@ -1,8 +1,6 @@
from ...lib.init import detect_modules from ...lib.init import detect_modules
__all__ = detect_modules( __all__ = detect_modules(
package_name = __name__,
package_path = __path__,
namespace = globals(), namespace = globals(),
prefix = 'Cmd', prefix = 'Cmd',
skip = {'Cmd'}, skip = {'Cmd'},

View file

@ -1,8 +1,6 @@
from ...lib.init import detect_modules from ...lib.init import detect_modules
__all__ = detect_modules( __all__ = detect_modules(
package_name = __name__,
package_path = __path__,
namespace = globals(), namespace = globals(),
prefix = 'Cmd', prefix = 'Cmd',
skip = {'Cmd'}, skip = {'Cmd'},

View file

@ -1,8 +1,6 @@
from ...lib.init import detect_modules from ...lib.init import detect_modules
__all__ = detect_modules( __all__ = detect_modules(
package_name = __name__,
package_path = __path__,
namespace = globals(), namespace = globals(),
prefix = 'Cmd', prefix = 'Cmd',
skip = {'Cmd'}, skip = {'Cmd'},

View file

@ -1,8 +1,6 @@
from ....lib.init import detect_modules from ....lib.init import detect_modules
__all__ = detect_modules( __all__ = detect_modules(
package_name = __name__,
package_path = __path__,
namespace = globals(), namespace = globals(),
prefix = 'Cmd', prefix = 'Cmd',
skip = {'Cmd'}, skip = {'Cmd'},

View file

@ -1,33 +1,45 @@
from __future__ import annotations from __future__ import annotations
import pkgutil
from importlib import import_module
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import MutableMapping from collections.abc import MutableMapping
from typing import Any, Iterable from typing import Any
def detect_modules( def detect_modules(
package_name: str,
package_path: Iterable[str],
namespace: MutableMapping[str, Any], namespace: MutableMapping[str, Any],
prefix: str, prefix: str | None = None,
skip: set[str] | None = None, skip: set[str] | None = None,
*,
extend_namespace: bool = True,
) -> list[str]: ) -> list[str]:
import importlib package_name = namespace.get("__name__")
import pkgutil package_path = namespace.get("__path__")
if not isinstance(package_name, str):
raise TypeError("namespace must contain string __name__")
if package_path is None:
raise TypeError("namespace must be a package namespace with __path__")
if extend_namespace:
package_path = pkgutil.extend_path(package_path, package_name)
namespace["__path__"] = package_path
ret: list[str] = [] ret: list[str] = []
skip = skip or set() skip = skip or set()
for _finder, module_name, _ispkg in pkgutil.iter_modules(package_path): for _finder, module_name, _ispkg in pkgutil.iter_modules(package_path):
if not module_name.startswith(prefix): if prefix is not None and not module_name.startswith(prefix):
continue continue
if module_name in skip: if module_name in skip:
continue continue
module = importlib.import_module(f'.{module_name}', package_name) module = import_module(f".{module_name}", package_name)
cls = getattr(module, module_name) cls = getattr(module, module_name)
namespace[module_name] = cls namespace[module_name] = cls