summaryrefslogtreecommitdiff
path: root/nephilim/plugins/__init__.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-02-20 11:15:51 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-02-20 11:15:51 +0100
commitcca3aa06f58d5ad1b1abedc5d789bb626909da70 (patch)
treeb633b3b53cd12815f96112d5aa3f0f114a982971 /nephilim/plugins/__init__.py
parent80a77640d4a0d91c8df41c9a7b7cc1fe3ff02818 (diff)
Wrap plugins interface into a class.
Diffstat (limited to 'nephilim/plugins/__init__.py')
-rw-r--r--nephilim/plugins/__init__.py131
1 files changed, 59 insertions, 72 deletions
diff --git a/nephilim/plugins/__init__.py b/nephilim/plugins/__init__.py
index affbf45..7ecca22 100644
--- a/nephilim/plugins/__init__.py
+++ b/nephilim/plugins/__init__.py
@@ -9,89 +9,76 @@ PLUGIN_CLASS=1
PLUGIN_INSTANCE=2
PLUGIN_MSG=3
+class Plugins:
-class IPlaylist:
- def ensureVisible(self, song_id):
- raise Exception("TODO implement")
+ def __init__(self):
+ """(Re)load all modules in the plugins directory."""
+ global _plugins
+ _plugins={}
+ for file in os.listdir('nephilim/plugins'):
+ if file[-3:]=='.py' and file!='__init__.py':
+ name=file[:-3] # name without ext
+ mod='nephilim.plugins.%s'%(name) # mod name
+ className='plugin%s'%(name) # classname
-def loadPlugins():
- """(Re)load all modules in the plugins directory."""
- global _plugins
- _plugins={}
- for file in os.listdir('nephilim/plugins'):
- if file[-3:]=='.py' and file!='__init__.py':
- name=file[:-3] # name without ext
- mod='nephilim.plugins.%s'%(name) # mod name
- className='plugin%s'%(name) # classname
-
- _plugins[className.lower()]=[mod, className, None, None]
- loadPlugin(className, None)
+ _plugins[className.lower()]=[mod, className, None, None]
+ self.loadPlugin(className, None)
-def setPluginMessage(name, msg):
- global _plugins
- try:
- _plugins[name.lower()][PLUGIN_MSG]=msg
- except:
+ def setPluginMessage(self, name, msg):
+ global _plugins
try:
- _plugins["plugin%s"%(name.lower())][PLUGIN_MODULE]=msg
+ _plugins[name.lower()][PLUGIN_MSG]=msg
except:
- pass
+ try:
+ _plugins["plugin%s"%(name.lower())][PLUGIN_MODULE]=msg
+ except:
+ pass
-def getPlugin(name):
- global _plugins
- try:
- return _plugins[name.lower()][PLUGIN_INSTANCE]
- except:
+ def getPlugin(self, name):
+ global _plugins
try:
- return _plugins["plugin%s"%(name.lower())][PLUGIN_INSTANCE]
+ return _plugins[name.lower()][PLUGIN_INSTANCE]
except:
- return None
+ try:
+ return _plugins["plugin%s"%(name.lower())][PLUGIN_INSTANCE]
+ except:
+ return None
-def loadPlugin(className, parent):
- """Constructs a plugin."""
- global _plugins
- entry=_plugins[className.lower()]
- mod=entry[PLUGIN_MODULE]
- # ensure we get the latest version
- try:
+ def loadPlugin(self, className, parent):
+ """Constructs a plugin."""
+ global _plugins
+ entry=_plugins[className.lower()]
+ mod=entry[PLUGIN_MODULE]
+ # ensure we get the latest version
try:
- sys.modules[mod]
- reimport=True
- except:
- reimport=False
-
- if reimport:
- reload(sys.modules[mod])
- else:
- module=__import__(mod, globals(), locals(), className, -1)
-
- except Exception, e:
- _plugins[className.lower()][PLUGIN_MSG]=str(e)
- _plugins[className.lower()][PLUGIN_INSTANCE]=None
- logging.warning("Failed to load plugin %s: %s %s"%(className, str(type(e)), str(e)))
- return None
-
- module=sys.modules[mod]
- _plugins[className.lower()][PLUGIN_MSG]=None
-
- if parent:
- # instantiate the plugin
- _plugins[className.lower()][PLUGIN_INSTANCE]=module.__dict__[className](parent)
- else:
- _plugins[className.lower()][PLUGIN_INSTANCE]=None
- return _plugins[className.lower()][PLUGIN_INSTANCE]
+ try:
+ sys.modules[mod]
+ reimport=True
+ except:
+ reimport=False
-def listImplementors(interface, loaded = True):
- """Return a list of plugin-instances that implement an interface"""
- global _plugins
- return map(lambda plugin: plugin[PLUGIN_INSTANCE]
- , filter(lambda plugin: isinstance(plugin[PLUGIN_INSTANCE], interface)
- and ((loaded != None and plugin[PLUGIN_INSTANCE].loaded == loaded) or (loaded == None)), _plugins.values()))
+ if reimport:
+ reload(sys.modules[mod])
+ else:
+ module=__import__(mod, globals(), locals(), className, -1)
-def listPlugins():
- """Get the list of plugins available as { className => [mod, className, instance, msg] }."""
- global _plugins
- return _plugins
+ except Exception, e:
+ _plugins[className.lower()][PLUGIN_MSG]=str(e)
+ _plugins[className.lower()][PLUGIN_INSTANCE]=None
+ logging.warning("Failed to load plugin %s: %s %s"%(className, str(type(e)), str(e)))
+ return None
+
+ module=sys.modules[mod]
+ _plugins[className.lower()][PLUGIN_MSG]=None
+ if parent:
+ # instantiate the plugin
+ _plugins[className.lower()][PLUGIN_INSTANCE]=module.__dict__[className](parent)
+ else:
+ _plugins[className.lower()][PLUGIN_INSTANCE]=None
+ return _plugins[className.lower()][PLUGIN_INSTANCE]
-loadPlugins()
+ def listPlugins(self):
+ """Get the list of plugins available as { className => [mod, className, instance, msg] }."""
+ global _plugins
+ return _plugins