X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/5c644d93c7d57956db63135296e653c6f66ec9e7..7aea4167500640a74eccd19d10aa0a353bc530f5:/on-add-pirate

diff --git a/on-add-pirate b/on-add-pirate
index 1484083..558132c 100755
--- a/on-add-pirate
+++ b/on-add-pirate
@@ -1,11 +1,42 @@
 #!/usr/bin/python
 
+import glob
+import imp
+import os
+
 from tasklib.task import TaskWarrior, Task
-import pirate_add
+
+
+def find_hooks(file_prefix):
+    # Find all files in subdirectories whose names start with <file_prefix>
+    file_pattern = os.path.dirname(__file__) + '/*/' + file_prefix + "*.py"
+    module_paths = [f for f in glob.glob(file_pattern) if os.path.isfile(f)]
+    module_paths.sort()
+
+    # Gather all hooks in these files
+    hooks = []
+
+    for module_path in module_paths:
+        # Load the module
+        module_dir = os.path.dirname(module_path)
+        module_filename = os.path.basename(module_path)
+        module_name = 'pirate_{0}_{1}'.format(module_dir, module_filename)
+        module = imp.load_source(module_name, module_path)
+
+        # Find all hook methods available
+        module_hooks = [
+            getattr(module, hook_name)
+            for hook_name in dir(module)
+            if hook_name.startswith('hook_')
+        ]
+
+        hooks += module_hooks
+
+    return hooks
 
 task = Task.from_input()
 
-for hook in pirate_add.hooks:
+for hook in find_hooks('pirate_add'):
     hook(task)
 
 print task.export_data()