Use abx-dl plugin dependency pruning

This commit is contained in:
Nick Sweeting 2026-06-24 12:36:00 -07:00
parent 533101033f
commit d9b7052d5a
No known key found for this signature in database
4 changed files with 23 additions and 10 deletions

View File

@ -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:

View File

@ -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(

View File

@ -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

View File

@ -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
]