From ac2d79c9bb50094908115b67493dfa86c456234a Mon Sep 17 00:00:00 2001 From: Toni Alatalo Date: Tue, 12 Oct 2010 12:21:56 +0300 Subject: [PATCH] missing file --- pymodloader.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 pymodloader.py diff --git a/pymodloader.py b/pymodloader.py new file mode 100644 index 0000000..4529040 --- /dev/null +++ b/pymodloader.py @@ -0,0 +1,97 @@ +import clr +clr.AddReference('OpenSim.Framework') +clr.AddReference('OpenSim.Region.Framework') + +import sys +sys.path.append('/usr/lib/python2.6/') #'ScriptEngines/Lib') # stdlib seems to live here + +from OpenSim.Region.Framework.Interfaces import IRegionModule +#import textcreate, pictureframe, toggleboxcolor, oukautil +import webframeserver + +class PyReloader(IRegionModule): + upgradable = False + regpymods = [webframeserver] #textcreate, pictureframe, toggleboxcolor, oukautil] + reginstances = [] + + def Initialise(self, scene, configsource): + self.scene = scene + self.config = configsource + scene.AddCommand(self, "py-reload", "py-reload", "...", self.cmd_py_reload) + print self, 'initialised with', scene + + def PostInitialise(self): + print self, 'post-initialise' + + def Close(self): + print self, 'close' + + def getname(self): + return "MyRegionModule" + + Name = property(getname) + + def isshared(self): + return False + + IsSharedModule = property(isshared) + + def cmd_py_reload(self, modname, args): + try: + self.reload(modname, args) + except Exception, e: + print 'err or' + import traceback + traceback.print_exc() + raise + + def reload(self, modname, args): + print 'closing modules' + for ri in self.reginstances: + print "found", ri, "in reginstances" + if ri.Name in self.scene.Modules: + print "also found in modules, so marking removed" + ri.removed = True + print "removing", ri.Name, "from self.scene.Modules" + self.scene.Modules.Remove(ri.Name) + else: + print "not found in modules so not removing" + ri.Close() + + self.reginstances[:] = [] + + print 'reloading modules & looking for region classes' + regclasses = [] + for m in self.regpymods: + reload(m) + for name in dir(m): + o = getattr(m, name) + if name.startswith('_'): + continue + try: + x = issubclass(o, IRegionModule) + except TypeError: + pass + else: + if x and getattr(o, 'autoload', None): + print 'found', name + regclasses.append(o) + + print 'instantiating found regions' + for klass in regclasses: + ri = klass() + ri.Initialise(self.scene, self.config) + self.scene.AddModule(ri.Name, ri) + print "register instance", ri + self.reginstances.append(ri) + ri.PostInitialise() + print 'reload done' + +loader = None + +def sceneinit(scene, config): + global loader + loader = PyReloader() + loader.Initialise(scene, config) + loader.PostInitialise() + loader.cmd_py_reload('', [])