소스 검색

add abx function to get plugin hooks

Nick Sweeting 1 년 전
부모
커밋
c04e0b2f39
1개의 변경된 파일25개의 추가작업 그리고 0개의 파일을 삭제
  1. 25 0
      archivebox/abx/__init__.py

+ 25 - 0
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