diff --git a/archivebox/config/common.py b/archivebox/config/common.py index 675131cf..fb66f030 100644 --- a/archivebox/config/common.py +++ b/archivebox/config/common.py @@ -784,12 +784,10 @@ class ArchiveBoxBaseConfig( def _derive_plugin_enabled_config(self, *, respect_current_enabled: bool) -> None: plugin_names = _normalize_plugins_config_value(self.PLUGINS) enabled_config_keys = _plugin_enabled_config_keys() + disabled_plugins = [] if respect_current_enabled: - selected_plugin_roots = { - plugin_name for plugin_name in plugin_names if bool(getattr(self, enabled_config_keys.get(plugin_name, ""), True)) - } - else: - selected_plugin_roots = plugin_names + disabled_plugins = [plugin_name for plugin_name, enabled_key in enabled_config_keys.items() if not getattr(self, enabled_key)] + selected_plugin_roots = plugin_names if selected_plugin_roots: from abx_dl.models import discover_plugins, filter_plugins @@ -798,6 +796,7 @@ class ArchiveBoxBaseConfig( discover_plugins(runtime="archivebox"), sorted(selected_plugin_roots), include_providers=True, + disabled_names=disabled_plugins, ), ) else: diff --git a/archivebox/plugins/discovery.py b/archivebox/plugins/discovery.py index 4a9ae27b..32b3b6fb 100644 --- a/archivebox/plugins/discovery.py +++ b/archivebox/plugins/discovery.py @@ -64,6 +64,15 @@ def get_plugins() -> list[str]: return sorted(set(plugins)) +def get_plugin_models(): + from abx_dl.models import discover_plugins + + plugins = {} + for base_dir in (BUILTIN_PLUGINS_DIR, USER_PLUGINS_DIR): + plugins.update(discover_plugins(plugins_dir=base_dir, runtime="archivebox")) + return plugins + + def get_plugin_name(plugin: str) -> str: """ Get the base plugin name without numeric prefix. @@ -91,12 +100,17 @@ def get_enabled_plugins(config: ConfigLookup | None = None, **config_kwargs: Any config = get_config(**config_kwargs) enabled = [] + disabled = [] for plugin in get_plugins(): plugin_config = get_plugin_special_config(plugin, config) if plugin_config["enabled"]: enabled.append(plugin) + else: + disabled.append(plugin) - return enabled + from abx_dl.models import filter_plugins + + return list(filter_plugins(get_plugin_models(), enabled, include_providers=True, disabled_names=disabled)) def discover_plugins_that_provide_interface( diff --git a/archivebox/plugins/hooks.py b/archivebox/plugins/hooks.py index 757e31f4..f75d5b68 100644 --- a/archivebox/plugins/hooks.py +++ b/archivebox/plugins/hooks.py @@ -55,6 +55,7 @@ from archivebox.plugins.discovery import ( BUILTIN_PLUGINS_DIR, USER_PLUGINS_DIR, ConfigLookup, + get_enabled_plugins, get_plugin_special_config, ) @@ -215,6 +216,7 @@ def discover_hooks( config = get_config(**config_kwargs) + enabled_plugins = set(get_enabled_plugins(config=config)) enabled_hooks = [] for hook in hooks: @@ -229,9 +231,7 @@ def discover_hooks( enabled_hooks.append(hook) continue - # Check if plugin is enabled - plugin_config = get_plugin_special_config(plugin_name, config) - if plugin_config["enabled"]: + if plugin_name in enabled_plugins: enabled_hooks.append(hook) hooks = enabled_hooks diff --git a/pyproject.toml b/pyproject.toml index 2b137605..b7be3f1c 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,7 +81,7 @@ dependencies = [ "abxbus==2.5.10", # EventBus API "abxpkg>=1.11.236", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm "abx-plugins>=1.11.245", # shared ArchiveBox plugin package with Chrome/Puppeteer dependency wiring - "abx-dl>=1.11.230", # shared ArchiveBox downloader package with blocking install preflight + "abx-dl>=1.11.231", # shared ArchiveBox downloader package with blocking install preflight ### UUID7 backport for Python <3.14 "uuid7>=0.1.0; python_version < '3.14'", # provides the uuid_extensions module on Python 3.13 ]