2010-08-15 01:05:37 -04:00
|
|
|
# Bryan Schumaker (8/15/2010)
|
|
|
|
|
2010-08-15 13:39:31 -04:00
|
|
|
# Lazy loaded modules
|
|
|
|
path = None
|
|
|
|
imp = None
|
2010-08-15 01:05:37 -04:00
|
|
|
|
2010-08-15 13:39:31 -04:00
|
|
|
# Runtime variables
|
|
|
|
p_dir = None
|
|
|
|
loaded = dict()
|
|
|
|
|
|
|
|
# Function variables
|
|
|
|
install = None
|
|
|
|
load_all = None
|
|
|
|
load_plugin = None
|
|
|
|
|
|
|
|
|
|
|
|
def init():
|
2010-08-15 01:05:37 -04:00
|
|
|
global path
|
2010-08-15 13:39:31 -04:00
|
|
|
global p_dir
|
2010-08-15 01:05:37 -04:00
|
|
|
if path == None:
|
|
|
|
from libsaria import path
|
2010-08-15 13:39:31 -04:00
|
|
|
if p_dir == None:
|
|
|
|
p_dir = path.plugin_dir()
|
|
|
|
|
|
|
|
|
|
|
|
def install_once(filepath):
|
|
|
|
global install
|
|
|
|
init()
|
|
|
|
install = install_rest
|
|
|
|
install(filepath)
|
|
|
|
def install_rest(filepath):
|
|
|
|
global p_dir
|
|
|
|
global path
|
2010-08-15 01:05:37 -04:00
|
|
|
split = filepath.rsplit(path.sep, 1)
|
|
|
|
file = split[len(split)-1]
|
2010-08-15 13:39:31 -04:00
|
|
|
dest = path.join(p_dir, file)
|
2010-08-15 01:05:37 -04:00
|
|
|
path.cp(filepath, dest)
|
2010-08-15 13:39:31 -04:00
|
|
|
split = path.splitext(file)
|
|
|
|
if split[len(split)-1] == ".py":
|
|
|
|
name = split[0]
|
|
|
|
load_plugin(name, dest)
|
|
|
|
install = install_once
|
|
|
|
|
|
|
|
|
|
|
|
def load_all_once():
|
|
|
|
global load_all
|
|
|
|
init()
|
|
|
|
load_all = load_all_rest
|
|
|
|
load_all()
|
|
|
|
def load_all_rest():
|
|
|
|
global load_plugin
|
|
|
|
global path
|
|
|
|
global p_dir
|
|
|
|
for file in path.ls(p_dir):
|
|
|
|
split = path.splitext(file)
|
|
|
|
if split[len(split)-1] == ".py":
|
|
|
|
load_plugin(split[0], path.join(p_dir, file))
|
|
|
|
load_all = load_all_once
|
|
|
|
|
|
|
|
|
|
|
|
def load_plugin_once(name, file):
|
|
|
|
global load_plugin
|
|
|
|
global imp
|
|
|
|
import imp
|
|
|
|
load_plugin = load_plugin_rest
|
|
|
|
load_plugin(name, file)
|
|
|
|
def load_plugin_rest(name, file):
|
|
|
|
global imp
|
|
|
|
global path
|
|
|
|
global loaded
|
|
|
|
|
|
|
|
if name in loaded:
|
|
|
|
mod = loaded[name]
|
|
|
|
if hasattr(mod, "stop"):
|
|
|
|
loaded[name].stop()
|
|
|
|
del globals()[name]
|
|
|
|
|
|
|
|
try:
|
|
|
|
mod = imp.load_source(name, file)
|
|
|
|
except Exception, e:
|
|
|
|
print "Error loading plugin: %s" % file
|
|
|
|
print e
|
|
|
|
|
|
|
|
try:
|
|
|
|
globals()[name] = mod
|
|
|
|
loaded[name] = mod
|
|
|
|
mod.start()
|
|
|
|
except Exception, e:
|
|
|
|
print "Error starting plugin: %s" % file
|
|
|
|
print e
|
|
|
|
load_plugin = load_plugin_once
|