1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import sys
20 from inspect import isclass
21 import pkgutil
22 import timelinelib
23
24
25 EVENTBOX_DRAWER = "eventboxdrawer"
26 EXPORTER = "exporter"
27 TEXT_TRANSFORMER = "texttransformer"
28 VALID_SERVICES = [EVENTBOX_DRAWER, EXPORTER, TEXT_TRANSFORMER]
29
30
33
34
36
39
41 candidates = self._get_candidate_modules()
42 class_names = []
43 for candidate in candidates:
44 classes = [x for x in dir(candidate) if isclass(getattr(candidate, x))]
45 for cl in classes:
46 if cl not in class_names:
47 class_names.append(cl)
48 self._save_class_instance_for_plugins(candidate, cl)
49
55
61
63 class_ = getattr(candidate, cl)
64 try:
65 instance = class_()
66 try:
67 self._validate_plugin(instance)
68 self._save_plugin(instance)
69 except:
70 pass
71 except:
72 pass
73
75 modules = self._find_modules("plugins")
76 return [self._import_module("timelinelib.plugin.%s" % mod) for mod in modules]
77
79 name_offset = len('timelinelib.plugin.')
80 package = timelinelib
81 module_names = []
82 for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,
83 prefix=package.__name__+'.',
84 onerror=lambda x: None):
85 if modname.startswith('timelinelib.plugin.%s' % subdir) and not ispkg:
86 module_names.append(modname[name_offset:])
87 return module_names
88
90 __import__(module_name)
91 return sys.modules[module_name]
92
94 self._get_plugin_method(instance, "isplugin")
95 self._get_plugin_method(instance, "service")
96 self._get_plugin_method(instance, "display_name")
97 if not instance.isplugin():
98 print("NP")
99 raise PluginException()
100 if instance.service() not in VALID_SERVICES:
101 print("NVS")
102 raise PluginException()
103
105 method = getattr(obj, method_name, None)
106 if not callable(method):
107 raise PluginException()
108
114