diff options
| author | 2020-09-21 19:53:26 +0200 | |
|---|---|---|
| committer | 2020-09-21 20:18:19 +0200 | |
| commit | b8672252bee458e7aa8c5ff9139a3f1f326501de (patch) | |
| tree | 2f82e4525c8027492ac5104986f8fcf862230b27 | |
| parent | Add checks.py file (diff) | |
Add extensions.py file
- Necessary for extensions.py to work
- Fully copied over from the 'Python' bot
| -rw-r--r-- | bot/utils/extensions.py | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/bot/utils/extensions.py b/bot/utils/extensions.py new file mode 100644 index 00000000..50350ea8 --- /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()) | 
