diff options
Diffstat (limited to 'bot/exts/__init__.py')
-rw-r--r-- | bot/exts/__init__.py | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/bot/exts/__init__.py b/bot/exts/__init__.py index 4f19c167..25deb9af 100644 --- a/bot/exts/__init__.py +++ b/bot/exts/__init__.py @@ -1,9 +1,9 @@ import logging import pkgutil from pathlib import Path -from typing import Iterator, List +from typing import Iterator -__all__ = ("get_package_names", "get_extensions") +__all__ = ("get_package_names", "walk_extensions") log = logging.getLogger(__name__) @@ -15,18 +15,21 @@ def get_package_names() -> Iterator[str]: yield package.name -def get_extensions() -> List[str]: +def walk_extensions() -> Iterator[str]: """ - Give a list of dot-separated paths to all extensions. + Iterate dot-separated paths to all extensions. The strings are formatted in a way such that the bot's `load_extension` method can take them. Use this to load all available extensions. + + This intentionally doesn't make use of pkgutil's `walk_packages`, as we only + want to build paths to extensions - not recursively all modules. For some + extensions, the `setup` function is in the package's __init__ file, while + modules nested under the package are only helpers. Constructing the paths + ourselves serves our purpose better. """ base_path = Path(__path__[0]) - extensions = [] - - for season in get_package_names(): - for module in pkgutil.iter_modules([base_path.joinpath(season)]): - extensions.append(f"bot.exts.{season}.{module.name}") - return extensions + for package in get_package_names(): + for extension in pkgutil.iter_modules([base_path.joinpath(package)]): + yield f"bot.exts.{package}.{extension.name}" |