moddified plugin loading so plugins located outside of the plugins directory in sleek may be loaded. Added optional argument pluginModule that is a string that represents the module the desired plugin should be loaded from.

An exception on plugin loading now also will not cause the program to exit.  The exception is caught and loading of other plugins contains.
This commit is contained in:
Brian Beggs 2010-06-02 08:28:49 -04:00
parent 59b8406573
commit c0457cf5d0
2 changed files with 11 additions and 7 deletions

1
.gitignore vendored
View file

@ -3,3 +3,4 @@
build/
*.swp
.pydevproject
.settings

View file

@ -91,15 +91,18 @@ class basexmpp(object):
if not self.plugin[idx].post_inited: self.plugin[idx].post_init()
return super(basexmpp, self).process(*args, **kwargs)
def registerPlugin(self, plugin, pconfig = {}):
def registerPlugin(self, plugin, pconfig = {}, pluginModule = None):
"""Register a plugin not in plugins.__init__.__all__ but in the plugins
directory."""
# discover relative "path" to the plugins module from the main app, and import it.
# TODO:
# gross, this probably isn't necessary anymore, especially for an installed module
__import__("%s.%s" % (globals()['plugins'].__name__, plugin))
if pluginModule:
module = __import__("%s.%s" % (pluginModule, plugin), globals(), locals(), [plugin])
else:
module = __import__("%s.%s" % (globals()['plugins'].__name__, plugin), globals(), locals(), [plugin])
# init the plugin class
self.plugin[plugin] = getattr(getattr(plugins, plugin), plugin)(self, pconfig) # eek
self.plugin[plugin] = getattr(module, plugin)(self, pconfig) # eek
# all of this for a nice debug? sure.
xep = ''
if hasattr(self.plugin[plugin], 'xep'):