1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os
20 import sys
21 from inspect import isclass
22
23
24 EVENTBOX_DRAWER = "eventboxdrawer"
25 EXPORTER = "exporter"
26 TEXT_TRANSFORMER = "texttransformer"
27 VALID_SERVICES = [EVENTBOX_DRAWER, EXPORTER, TEXT_TRANSFORMER]
28
29
32
33
35
38
40 candidates = self._get_candidate_modules()
41 class_names = []
42 for candidate in candidates:
43 classes = [x for x in dir(candidate) if isclass(getattr(candidate, x))]
44 for cl in classes:
45 if cl not in class_names:
46 class_names.append(cl)
47 self._save_class_instance_for_plugins(candidate, cl)
48
54
60
62 class_ = getattr(candidate, cl)
63 try:
64 instance = class_()
65 try:
66 self._validate_plugin(instance)
67 self._save_plugin(instance)
68 except:
69 pass
70 except:
71 pass
72
74 modules = self._find_modules("plugins")
75 return [self._import_module("timelinelib.plugin.%s" % mod) for mod in modules]
76
78 modules = []
79 for module_file in os.listdir(os.path.join(os.path.dirname(__file__), subdir)):
80 if os.path.isdir(os.path.join(os.path.dirname(__file__), subdir, module_file)):
81 modules.extend(self._find_modules(os.path.join(subdir, module_file)))
82 elif module_file.endswith(".py") and module_file != "__init__.py":
83 module_name = os.path.basename(module_file)[:-3]
84 abs_module_name = "%s.%s" % (subdir.replace(os.sep, "."), module_name)
85 modules.append(abs_module_name)
86 return modules
87
89 __import__(module_name)
90 return sys.modules[module_name]
91
93 self._get_plugin_method(instance, "isplugin")
94 self._get_plugin_method(instance, "service")
95 self._get_plugin_method(instance, "display_name")
96 if not instance.isplugin():
97 print("NP")
98 raise PluginException()
99 if instance.service() not in VALID_SERVICES:
100 print("NVS")
101 raise PluginException()
102
104 method = getattr(obj, method_name, None)
105 if not callable(method):
106 raise PluginException()
107
113