diff --git a/archivebox/builtin_plugins/pip/apps.py b/archivebox/builtin_plugins/pip/apps.py index 4c19ecd4..7cc359a1 100644 --- a/archivebox/builtin_plugins/pip/apps.py +++ b/archivebox/builtin_plugins/pip/apps.py @@ -36,6 +36,8 @@ DEFAULT_GLOBAL_CONFIG = { PIP_CONFIG = PipDependencyConfigs(**DEFAULT_GLOBAL_CONFIG) class CustomPipProvider(PipProvider, BaseBinProvider): + name: str = 'pip' + INSTALLER_BIN: str = 'pip' PATH: PATHStr = str(Path(sys.executable).parent) diff --git a/archivebox/plugantic/base_plugin.py b/archivebox/plugantic/base_plugin.py index 92cfe99b..009baa67 100644 --- a/archivebox/plugantic/base_plugin.py +++ b/archivebox/plugantic/base_plugin.py @@ -39,6 +39,10 @@ class BasePlugin(BaseModel): def id(self) -> str: return self.__class__.__name__ + @property + def name(self) -> str: + return self.app_label + @computed_field @property def plugin_module(self) -> str: # DottedImportPath diff --git a/archivebox/plugantic/views.py b/archivebox/plugantic/views.py index 75d7cb1c..9376c0ae 100644 --- a/archivebox/plugantic/views.py +++ b/archivebox/plugantic/views.py @@ -77,7 +77,7 @@ def binaries_list_view(request: HttpRequest, **kwargs) -> TableContext: } for plugin in settings.PLUGINS.values(): - for binary in plugin.binaries: + for binary in plugin.HOOKS_BY_TYPE.BINARY.values(): try: binary = binary.load() except Exception as e: @@ -85,7 +85,7 @@ def binaries_list_view(request: HttpRequest, **kwargs) -> TableContext: rows['Binary'].append(ItemLink(binary.name, key=binary.name)) rows['Found Version'].append(f'✅ {binary.loaded_version}' if binary.loaded_version else '❌ missing') - rows['From Plugin'].append(plugin.name) + rows['From Plugin'].append(plugin.plugin_module) rows['Provided By'].append( ', '.join( f'[{binprovider.name}]' if binprovider.name == getattr(binary.loaded_binprovider, 'name', None) else binprovider.name @@ -96,11 +96,11 @@ def binaries_list_view(request: HttpRequest, **kwargs) -> TableContext: # if binary.loaded_binprovider else # ', '.join(getattr(provider, 'name', str(provider)) for provider in binary.binproviders_supported) ) - rows['Found Abspath'].append(binary.loaded_abspath or '❌ missing') + rows['Found Abspath'].append(str(binary.loaded_abspath or '❌ missing')) rows['Related Configuration'].append(mark_safe(', '.join( f'{config_key}' for config_key, config_value in relevant_configs.items() - if binary.name.lower().replace('-', '').replace('_', '').replace('ytdlp', 'youtubedl') in config_key.lower() + if str(binary.name).lower().replace('-', '').replace('_', '').replace('ytdlp', 'youtubedl') in config_key.lower() # or binary.name.lower().replace('-', '').replace('_', '') in str(config_value).lower() ))) # if not binary.provider_overrides: @@ -121,7 +121,7 @@ def binary_detail_view(request: HttpRequest, key: str, **kwargs) -> ItemContext: binary = None plugin = None for loaded_plugin in settings.PLUGINS.values(): - for loaded_binary in loaded_plugin.binaries: + for loaded_binary in loaded_plugin.HOOKS_BY_TYPE.BINARY.values(): if loaded_binary.name == key: binary = loaded_binary plugin = loaded_plugin @@ -164,13 +164,9 @@ def plugins_list_view(request: HttpRequest, **kwargs) -> TableContext: rows = { "Name": [], "verbose_name": [], - "configs": [], - "binproviders": [], - "binaries": [], - "extractors": [], - "replayers": [], - "checks": [], - "admindataviews": [], + "module": [], + "source_code": [], + "hooks": [], } @@ -180,26 +176,14 @@ def plugins_list_view(request: HttpRequest, **kwargs) -> TableContext: except Exception as e: print(e) - rows['Name'].append(ItemLink(plugin.name, key=plugin.name)) + rows['Name'].append(ItemLink(plugin.id, key=plugin.id)) rows['verbose_name'].append(str(plugin.verbose_name)) - rows['binproviders'].append(mark_safe(', '.join( - f'{binprovider.name}' - for binprovider in plugin.binproviders + rows['module'].append(str(plugin.plugin_module)) + rows['source_code'].append(str(plugin.plugin_dir)) + rows['hooks'].append(mark_safe(', '.join( + f'{hook.id}' + for hook in plugin.hooks ))) - rows['binaries'].append(mark_safe(', '.join( - f'{binary.name}' - for binary in plugin.binaries - ))) - rows['extractors'].append(', '.join(extractor.name for extractor in plugin.extractors)) - rows['replayers'].append(', '.join(replayer.name for replayer in plugin.replayers)) - rows['configs'].append(mark_safe(', '.join( - f'{config_key}' - for configset in plugin.configs - for config_key in configset.__fields__.keys() - if config_key != 'section' and config_key in settings.CONFIG - ))) - rows['checks'].append(str(plugin.checks)) - rows['admindataviews'].append(str(plugin.admindataviews)) return TableContext( title="Installed plugins", @@ -213,7 +197,7 @@ def plugin_detail_view(request: HttpRequest, key: str, **kwargs) -> ItemContext: plugin = None for loaded_plugin in settings.PLUGINS.values(): - if loaded_plugin.name == key: + if loaded_plugin.id == key: plugin = loaded_plugin assert plugin, f'Could not find a plugin matching the specified name: {key}' @@ -228,14 +212,11 @@ def plugin_detail_view(request: HttpRequest, key: str, **kwargs) -> ItemContext: title=key, data=[ { - "name": plugin.name, + "name": plugin.id, "description": plugin.verbose_name, "fields": { - 'configs': plugin.configs, - 'binaries': plugin.binaries, - 'extractors': plugin.extractors, - 'replayers': plugin.replayers, - 'schema': obj_to_yaml(plugin.model_dump(include=('name', 'verbose_name', 'app_label', 'hooks'))), + "hooks": plugin.hooks, + "schema": obj_to_yaml(plugin.model_dump(include=("name", "verbose_name", "app_label", "hooks"))), }, "help_texts": { # TODO