From c04e0b2f394489e581fe6baba02ce93db698f3da Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Tue, 15 Oct 2024 01:01:10 -0700 Subject: [PATCH] add abx function to get plugin hooks --- archivebox/abx/__init__.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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