summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Beggs <macdiesel@gmail.com>2010-06-02 08:28:49 -0400
committerBrian Beggs <macdiesel@gmail.com>2010-06-02 08:28:49 -0400
commitc0457cf5d002212a3d9946c8df9879618baf830c (patch)
tree53a627e0f7878688fb184c58879d1bc2c28c9399
parent59b8406573c12f0218d27daa2f5d373aef89e116 (diff)
downloadslixmpp-c0457cf5d002212a3d9946c8df9879618baf830c.tar.gz
slixmpp-c0457cf5d002212a3d9946c8df9879618baf830c.tar.bz2
slixmpp-c0457cf5d002212a3d9946c8df9879618baf830c.tar.xz
slixmpp-c0457cf5d002212a3d9946c8df9879618baf830c.zip
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.
-rw-r--r--.gitignore1
-rw-r--r--sleekxmpp/basexmpp.py17
2 files changed, 11 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 8b41dac4..6257bbf6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
build/
*.swp
.pydevproject
+.settings
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py
index a916fe86..5f330176 100644
--- a/sleekxmpp/basexmpp.py
+++ b/sleekxmpp/basexmpp.py
@@ -1,9 +1,9 @@
"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2010 Nathanael C. Fritz
- This file is part of SleekXMPP.
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2010 Nathanael C. Fritz
+ This file is part of SleekXMPP.
- See the file license.txt for copying permission.
+ See the file license.txt for copying permission.
"""
from __future__ import with_statement, unicode_literals
@@ -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'):