diff --git a/rsbbs/pluginloader.py b/rsbbs/pluginloader.py index 102089b..58c5f8d 100644 --- a/rsbbs/pluginloader.py +++ b/rsbbs/pluginloader.py @@ -25,42 +25,38 @@ class PluginLoader(): def __init__(self, api) -> None: self.api = api self.plugins = [] + self.plugins_dir = os.path.join(os.path.dirname(__file__), 'plugins') + self._prefix = 'rsbbs.plugins' + self._identifier = 'plugin' - def load_plugins(self) -> None: - # Path to command plugin directory - plugins_dir = os.path.join(os.path.dirname(__file__), 'plugins') - + @property + def _plugin_dirs(self) -> list: # Discover all subdirectories in the plugins directory plugin_dirs = [d - for d in os.listdir(plugins_dir) - if os.path.isdir(os.path.join(plugins_dir, d)) + for d in os.listdir(self.plugins_dir) + if os.path.isdir(os.path.join(self.plugins_dir, d)) and not d.startswith('__')] + return plugin_dirs - if self.api.config.debug: - print(f"Plugin dirs: {plugin_dirs}") + def load_plugin(self, plugin_dir) -> None: + try: + # Import the module containing the plugin class + plugin_module = importlib.import_module( + f"{self._prefix}.{plugin_dir}.{self._identifier}") + # Get a reference to the plugin class + plugin_class = plugin_module.Plugin + + # Initialize an instance of the plugin class, passing api as an + # argument + plugin = plugin_class(self.api) + + # Add the loaded plugin to the list of plugins + self.plugins.append(plugin) + except Exception as e: + raise + + def load_plugins(self) -> None: # Loop over each plugin directory - for plugin_dir in plugin_dirs: - try: - # Import the module containing the plugin class - if self.api.config.debug: - print(f"Import rsbbs.plugins.{plugin_dir}.plugin") - - plugin_module = importlib.import_module( - f"rsbbs.plugins.{plugin_dir}.plugin") - - # Get a reference to the plugin class - plugin_class = plugin_module.Plugin - - # Initialize an instance of the plugin class, passing api as an - # argument - plugin = plugin_class(self.api) - - # Add the loaded plugin to the list of plugins - self.plugins.append(plugin) - except Exception as e: - if self.api.config.debug: - print(f"{e}") - raise - else: - continue + for plugin_dir in self._plugin_dirs: + self.load_plugin(plugin_dir)