Skip to content

Instantly share code, notes, and snippets.

@philippTheCat
Created July 1, 2012 18:36
Show Gist options
  • Save philippTheCat/3029202 to your computer and use it in GitHub Desktop.
Save philippTheCat/3029202 to your computer and use it in GitHub Desktop.
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: 164022
#
# Created: 07.12.2011
# Copyright: (c) 164022 2011
# Licence: <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import os
import os.path
import imp
import sys
class pluginManager:
def __init__(self,path):
self.path = path
self.plugins = {}
self.reload()
def reload(self):
pluginpath = os.path.dirname(".")+self.path
#pluginpath = os.path.join(os.path.dirname(imp.find_module("pluginloader")[1]), self.path)
pluginfiles = [fname[:-3] for fname in os.listdir(pluginpath) if fname.endswith(".py")]
if not pluginpath in sys.path:
sys.path.insert(0,pluginpath)
for fname in pluginfiles:
self.load(fname)
def load(self,fname):
mod = __import__(fname)
try:
validity = self.checkPlugin(mod,fname)
if not validity == True:
print "invalid plugin: %s" % validity
return
else:
plugin = getattr(mod,fname)
typ = getattr(plugin,"typ")
name = getattr(plugin,"name")
except Exception as ex:
print ex
return
if not typ in self.plugins.keys():
self.plugins[typ] = {}
if name in self.plugins[typ].keys():
self.plugins[typ][name].onUnload()
self.plugins[typ][name] = plugin()
self.plugins[typ][name].onLoad()
print "loaded plugin: %s" % name
return
def checkPlugin(self,plugin,name):
try:
plugin = getattr(plugin,name)
onload = getattr(plugin,"onLoad")
onload = getattr(plugin,"onUnload")
typ = getattr(plugin,"typ")
name = getattr(plugin,"name")
return True
except Exception as ex:
print ex
return ex
def callPlugins(self, name, function,*args,**kwargs):
if name in self.plugins.keys():
for plugin in self.plugins[name].values():
try:
func = getattr(plugin,function)
func(*args,**kwargs)
except Exception as ex:
print ex
#print name,function,args,kwargs
def main():
pm = pluginManager("plugins/")
pm.callPlugins("test","testfunction",1,a=2)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment