Add conf_requires.
Load plugins in order
This commit is contained in:
40
iplugin.py
40
iplugin.py
@@ -7,6 +7,7 @@ class IPlugin(object):
|
||||
def __init__(self, iwla):
|
||||
self.iwla = iwla
|
||||
self.requires = []
|
||||
self.conf_requires = []
|
||||
self.API_VERSION = 1
|
||||
self.ANALYSIS_CLASS = 'HTTP'
|
||||
|
||||
@@ -22,6 +23,9 @@ class IPlugin(object):
|
||||
def getRequirements(self):
|
||||
return self.requires
|
||||
|
||||
def getConfRequirements(self):
|
||||
return self.conf_requires
|
||||
|
||||
def load(self):
|
||||
return True
|
||||
|
||||
@@ -33,8 +37,8 @@ def preloadPlugins(plugins, iwla):
|
||||
|
||||
print "==> Preload plugins"
|
||||
|
||||
for root in plugins.keys():
|
||||
for plugin_filename in plugins[root]:
|
||||
for (root, plugins_filenames) in plugins:
|
||||
for plugin_filename in plugins_filenames:
|
||||
plugin_path = root + '.' + plugin_filename
|
||||
try:
|
||||
mod = importlib.import_module(plugin_path)
|
||||
@@ -57,19 +61,29 @@ def preloadPlugins(plugins, iwla):
|
||||
|
||||
#print 'Load plugin %s' % (plugin_name)
|
||||
|
||||
conf_requirements = plugin.getConfRequirements()
|
||||
|
||||
requirement_validated = True
|
||||
for r in conf_requirements:
|
||||
conf_value = iwla.getConfValue(r, None)
|
||||
if conf_value is None:
|
||||
print '\'%s\' conf value required for %s' % (r, plugin_path)
|
||||
requirement_validated = False
|
||||
break
|
||||
if not requirement_validated: continue
|
||||
|
||||
requirements = plugin.getRequirements()
|
||||
|
||||
if requirements:
|
||||
requirement_validated = False
|
||||
for r in requirements:
|
||||
for (_,p) in cache_plugins.items():
|
||||
if p.__class__.__name__ == r:
|
||||
requirement_validated = True
|
||||
break
|
||||
if not requirement_validated:
|
||||
print 'Missing requirements for plugin %s' % (plugin_path)
|
||||
requirement_validated = False
|
||||
for r in requirements:
|
||||
for (_,p) in cache_plugins.items():
|
||||
if p.__class__.__name__ == r:
|
||||
requirement_validated = True
|
||||
break
|
||||
if not requirement_validated: continue
|
||||
if not requirement_validated:
|
||||
print 'Missing requirements \'%s\' for plugin %s' % (r, plugin_path)
|
||||
break
|
||||
if requirements and not requirement_validated: continue
|
||||
|
||||
if not plugin.load():
|
||||
print 'Plugin %s load failed' % (plugin_path)
|
||||
@@ -78,7 +92,7 @@ def preloadPlugins(plugins, iwla):
|
||||
print '\tRegister %s' % (plugin_path)
|
||||
cache_plugins[plugin_path] = plugin
|
||||
except Exception as e:
|
||||
print 'Error loading \'%s\' => %s' % (plugin_path, e)
|
||||
print 'Error loading %s => %s' % (plugin_path, e)
|
||||
traceback.print_exc()
|
||||
|
||||
return cache_plugins
|
||||
|
Reference in New Issue
Block a user