-
Notifications
You must be signed in to change notification settings - Fork 10
/
on-modify-pirate
executable file
·48 lines (36 loc) · 1.38 KB
/
on-modify-pirate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python3
import glob
from types import ModuleType
from importlib.machinery import SourceFileLoader, ModuleSpec
from importlib.util import module_from_spec
import os
from tasklib import TaskWarrior, Task
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_name = module_name.replace('.', '_')
loader = SourceFileLoader(module_name, module_path)
spec = ModuleSpec(module_name, loader, origin=module_path)
module = module_from_spec(spec)
loader.exec_module(module)
# 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 find_hooks('pirate_mod'):
hook(task)
print(task.export_data())