diff options
| -rw-r--r-- | bot/exts/utils/extensions.py | 30 | ||||
| -rw-r--r-- | bot/utils/extensions.py | 34 | 
2 files changed, 35 insertions, 29 deletions
| diff --git a/bot/exts/utils/extensions.py b/bot/exts/utils/extensions.py index 7ad6b1fdd..65b5c3630 100644 --- a/bot/exts/utils/extensions.py +++ b/bot/exts/utils/extensions.py @@ -1,8 +1,5 @@  import functools -import importlib -import inspect  import logging -import pkgutil  import typing as t  from enum import Enum @@ -15,37 +12,12 @@ from bot.bot import Bot  from bot.constants import Emojis, MODERATION_ROLES, Roles, URLs  from bot.pagination import LinePaginator  from bot.utils.checks import with_role_check +from bot.utils.extensions import EXTENSIONS, unqualify  log = logging.getLogger(__name__) -def unqualify(name: str) -> str: -    """Return an unqualified name given a qualified module/package `name`.""" -    return name.rsplit(".", maxsplit=1)[-1] - - -def walk_extensions() -> t.Iterator[str]: -    """Yield extension names from the bot.exts subpackage.""" - -    def on_error(name: str) -> t.NoReturn: -        raise ImportError(name=name)  # pragma: no cover - -    for module in pkgutil.walk_packages(exts.__path__, f"{exts.__name__}.", onerror=on_error): -        if unqualify(module.name).startswith("_"): -            # Ignore module/package names starting with an underscore. -            continue - -        if module.ispkg: -            imported = importlib.import_module(module.name) -            if not inspect.isfunction(getattr(imported, "setup", None)): -                # If it lacks a setup function, it's not an extension. -                continue - -        yield module.name - -  UNLOAD_BLACKLIST = {f"{exts.__name__}.utils.extensions", f"{exts.__name__}.moderation.modlog"} -EXTENSIONS = frozenset(walk_extensions())  BASE_PATH_LEN = len(exts.__name__.split(".")) diff --git a/bot/utils/extensions.py b/bot/utils/extensions.py new file mode 100644 index 000000000..50350ea8d --- /dev/null +++ b/bot/utils/extensions.py @@ -0,0 +1,34 @@ +import importlib +import inspect +import pkgutil +from typing import Iterator, NoReturn + +from bot import exts + + +def unqualify(name: str) -> str: +    """Return an unqualified name given a qualified module/package `name`.""" +    return name.rsplit(".", maxsplit=1)[-1] + + +def walk_extensions() -> Iterator[str]: +    """Yield extension names from the bot.exts subpackage.""" + +    def on_error(name: str) -> NoReturn: +        raise ImportError(name=name)  # pragma: no cover + +    for module in pkgutil.walk_packages(exts.__path__, f"{exts.__name__}.", onerror=on_error): +        if unqualify(module.name).startswith("_"): +            # Ignore module/package names starting with an underscore. +            continue + +        if module.ispkg: +            imported = importlib.import_module(module.name) +            if not inspect.isfunction(getattr(imported, "setup", None)): +                # If it lacks a setup function, it's not an extension. +                continue + +        yield module.name + + +EXTENSIONS = frozenset(walk_extensions()) | 
