X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/5c644d93c7d57956db63135296e653c6f66ec9e7..c0d91dae27c2a1f73ed9fc103f7fbfcfc3ca0ae9:/on-add-pirate?ds=inline diff --git a/on-add-pirate b/on-add-pirate index 1484083..9fae1c4 100755 --- a/on-add-pirate +++ b/on-add-pirate @@ -1,11 +1,43 @@ -#!/usr/bin/python +#!/usr/bin/env python -from tasklib.task import TaskWarrior, Task -import pirate_add +import glob +import imp +import os + +from tasklib import TaskWarrior, Task + + +def find_hooks(file_prefix): + # Find all files in subdirectories whose names start with + 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_name = module_name.replace('.', '_') + 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() +print(task.export_data())