From b7b80c5c0fc1895e85aae3acbfcbbc593a42697f Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 27 Oct 2014 11:25:46 -0400 Subject: Refactor plugin initialization and enablement Move most plugin enablement and initialization code in plugin.py to reduce code duplication and simplify and unifify plugin enablement for all base plugin types (login, info, providers). This patch breaks backwards compatibility as it changes how the list of enabled plugins is stored in the database tables. Signed-off-by: Simo Sorce Reviewed-by: Patrick Uiterwijk --- ipsilon/info/common.py | 52 ++++++++++++-------------------------------------- 1 file changed, 12 insertions(+), 40 deletions(-) (limited to 'ipsilon/info/common.py') diff --git a/ipsilon/info/common.py b/ipsilon/info/common.py index 586b9e5..a3a297f 100755 --- a/ipsilon/info/common.py +++ b/ipsilon/info/common.py @@ -11,40 +11,13 @@ from ipsilon.util.plugin import PluginObject, PluginConfig class InfoProviderBase(PluginConfig, PluginObject): - def __init__(self): + def __init__(self, *pargs): PluginConfig.__init__(self) - PluginObject.__init__(self) - self._site = None - self.is_enabled = False + PluginObject.__init__(self, *pargs) def get_user_attrs(self, user): raise NotImplementedError - def enable(self, site): - if self.is_enabled: - return - - if not self._site: - self._site = site - plugins = self._site[FACILITY] - - # configure self - if self.name in plugins['config']: - self.import_config(plugins['config'][self.name]) - - plugins['enabled'].append(self) - self.is_enabled = True - self.debug('Info plugin enabled: %s' % self.name) - - def disable(self, site): - if not self.is_enabled: - return - - plugins = self._site[FACILITY] - plugins['enabled'].remove(self) - self.is_enabled = False - self.debug('Info plugin disabled: %s' % self.name) - class InfoMapping(Log): @@ -96,23 +69,22 @@ class Info(Log): def __init__(self, site): self._site = site - loader = PluginLoader(Info, FACILITY, 'InfoProvider') - self._site[FACILITY] = loader.get_plugin_data() - plugins = self._site[FACILITY] + plugins = PluginLoader(Info, FACILITY, 'InfoProvider') + plugins.get_plugin_data() + self._site[FACILITY] = plugins - available = plugins['available'].keys() + available = plugins.available.keys() self.debug('Available info providers: %s' % str(available)) - plugins['root'] = self - for item in plugins['whitelist']: - self.debug('Login plugin in whitelist: %s' % item) - if item not in plugins['available']: + for item in plugins.enabled: + self.debug('Login plugin in enabled list: %s' % item) + if item not in plugins.available: self.debug('Info Plugin %s not found' % item) continue - plugins['available'][item].enable(self._site) + plugins.available[item].enable() def get_user_attrs(self, user, requested=None): - plugins = self._site[FACILITY]['available'] + plugins = self._site[FACILITY].available result = dict() for _, p in plugins.items(): @@ -146,5 +118,5 @@ class InfoProviderInstaller(object): class InfoProviderInstall(object): def __init__(self): - pi = PluginInstaller(InfoProviderInstall) + pi = PluginInstaller(InfoProviderInstall, FACILITY) self.plugins = pi.get_plugins() -- cgit