diff --git a/archivebox/abx/__init__.py b/archivebox/abx/__init__.py index 55a00089..c571a2e3 100644 --- a/archivebox/abx/__init__.py +++ b/archivebox/abx/__init__.py @@ -104,3 +104,28 @@ def get_registered_plugins(): return plugins + + +def get_plugin_hooks(plugin_pkg: str | None) -> Dict[str, Callable]: + """ + Get all the functions marked with @hookimpl on a module. + """ + if not plugin_pkg: + return {} + + hooks = {} + + plugin_module = importlib.import_module(plugin_pkg) + for attr_name in dir(plugin_module): + if attr_name.startswith('_'): + continue + try: + attr = getattr(plugin_module, attr_name) + if isinstance(attr, Callable): + hooks[attr_name] = None + pm.parse_hookimpl_opts(plugin_module, attr_name) + hooks[attr_name] = attr + except Exception as e: + print(f'Error getting hookimpls for {plugin_pkg}: {e}') + + return hooks