Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F120826053
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
9 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/pykolab/plugins.py b/pykolab/plugins.py
index 0c0c272..095c50c 100644
--- a/pykolab/plugins.py
+++ b/pykolab/plugins.py
@@ -1,230 +1,230 @@
# -*- coding: utf-8 -*-
# Copyright 2010-2011 Kolab Systems AG (http://www.kolabsys.com)
#
# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 only
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
import logging
import os
import pykolab
import sys
import pdb
# Translation
from pykolab.translate import _
import pykolab.plugin
class KolabPlugins:
"""Detects, loads and interfaces with plugins for Kolab"""
def __init__(self, init=False, conf=None):
"""
Searches the plugin directory for plugins, and loads them into a list.
"""
self.conf = conf
self.plugins = {}
for plugin_path in [ '/usr/share/pykolab/plugin/', './pykolab/plugin/' ]:
if os.path.isdir(plugin_path):
for plugin in os.listdir(plugin_path):
if os.path.isdir('%s/%s/' %(plugin_path,plugin,)):
self.plugins[plugin] = False
self.check_plugins(init=init)
def check_plugins(self, init=False):
"""Checks all plugins in self.plugins and sets the values to
True (loadable) or False (not enabled, not installed or not loadable)"""
for plugin in self.plugins:
try:
exec("from pykolab.plugin.%s import Kolab%s" %(plugin,plugin.capitalize()))
self.plugins[plugin] = True
self.load_plugins(plugins=[plugin], init=init)
except ImportError, e:
if not init: print >> sys.stderr, _("ImportError for plugin %s: %s") % (plugin,e)
self.plugins[plugin] = False
except RuntimeError, e:
if not init: print >> sys.stderr, _("RuntimeError for plugin %s: %s") % (plugin,e)
self.plugins[plugin] = False
except Exception, e:
if not init: print >> sys.stderr, _("Plugin %s failed to load (%s: %s)") % (plugin, e.__class__, e)
def load_plugins(self, plugins=[], init=False):
"""Loads plugins specified by a list of plugins or loads them all"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if self.plugins[plugin]:
exec("self.%s = pykolab.plugin.%s.Kolab%s(conf=self.conf)" % (plugin,plugin,plugin.capitalize()))
def set_defaults(self, defaults, plugins=[]):
"""Test for a function set_defaults() in all available and loaded plugins and execute plugin.set_defaults()"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),"set_defaults"):
try:
getattr(self,plugin).set_defaults(defaults)
except TypeError, e:
print >> sys.stderr, _("Cannot set defaults for plugin %s: %s") % (plugin,e)
except RuntimeError, e:
print >> sys.stderr, _("Cannot set defaults for plugin %s: %s") % (plugin,e)
except:
print >> sys.stderr, _("Cannot set defaults for plugin %s: Unknown Error") % (plugin)
else:
if hasattr(self.conf, "log"):
self.conf.log.debug(_("Not setting defaults for plugin %s: No function 'set_defaults()'") % plugin, level=5)
else:
print >> sys.stderr, _("Not setting defaults for plugin %s: No function 'set_defaults()'") % plugin
def set_runtime(self, runtime, plugins=[]):
"""Set runtime variables from plugins, like 'i_did_all_this'"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),"set_runtime"):
try:
getattr(self,plugin).set_runtime(runtime)
except RuntimeError, e:
print >> sys.stderr, _("Cannot set runtime for plugin %s: %s") % (plugin,e)
else:
print >> sys.stderr, _("Not setting runtime for plugin %s: No function 'set_runtime()'") % plugin
def add_options(self, parser, plugins=[]):
"""Add options specified in a plugin to parser. Takes a list of plugin names or does them all"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),"add_options"):
try:
exec("self.%s.add_options(parser)" % plugin)
except RuntimeError, e:
print >> sys.stderr, _("Cannot add options for plugin %s: %s") % (plugin,e)
else:
if hasattr(self.conf, "log"):
self.conf.log.debug(_("Not adding options for plugin %s: No function 'add_options()'") % plugin, level=5)
else:
print >> sys.stderr, _("Not adding options for plugin %s: No function 'add_options()'") % plugin
def check_options(self, conf, plugins=[]):
"""Executes plugin.check_plugins() for all enabled plugins or the list of plugin names specified."""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),"check_options"):
try:
exec("self.%s.check_options(conf, conf.cli_options)" % plugin)
except AttributeError, e:
print >> sys.stderr, _("Cannot check options for plugin %s: %s") % (plugin,e)
else:
print >> sys.stderr, _("Not checking options for plugin %s: No function 'check_options()'") % plugin
def plugin_check_setting(self, func, option, val, plugins=[]):
"""Checks one setting specified by 'option' against the 'val' it is passed by all plugins or by the list of plugins specified"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),"%s_%s" % (func,option)):
exec("retval = getattr(self,plugin).%s_%s(val)" % (func,option))
return retval
return False
- def exec_hook(self, hook, plugins=[], args=()):
+ def exec_hook(self, hook, plugins=[], kw={}, args=()):
"""Execute a hook"""
if len(plugins) < 1:
plugins = self.plugins.keys()
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
retval = None
if hasattr(getattr(self,plugin),hook):
try:
- exec("retval = self.%s.%s(args=%r)" % (plugin,hook,args))
+ exec("retval = self.%s.%s(kw=%r, args=%r)" % (plugin,hook,kw,args))
except TypeError, e:
print >> sys.stderr, _("Cannot execute hook %s for plugin %s: %s") % (hook,plugin,e)
except AttributeError, e:
print >> sys.stderr, _("Cannot execute hook %s for plugin %s: %s") % (hook,plugin,e)
return retval
def return_true_boolean_from_plugins(self, bool, plugins=[]):
"""Given the name of a boolean, walks all specified plugins, or all available plugins, and returns True if a plugin has it set to true"""
if len(plugins) < 1:
plugins = self.plugins.keys()
retval = False
for plugin in plugins:
if not self.plugins[plugin]:
continue
if not hasattr(self,plugin):
continue
if hasattr(getattr(self,plugin),bool):
try:
exec("boolval = self.%s.%s" % (plugin,bool))
except AttributeError, e:
pass
else:
boolval = None
if boolval: retval = True
return retval
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Fri, Apr 24, 10:48 AM (6 d, 5 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18834406
Default Alt Text
(9 KB)
Attached To
Mode
rP pykolab
Attached
Detach File
Event Timeline