def _instantiate_components(self, clear=True): """Inspect all loadable components and run them""" if clear: # import objgraph # from copy import deepcopy from circuits.tools import kill from circuits import Component for comp in self.running_components.values(): self.log(comp, type(comp), isinstance(comp, Component), pretty=True) kill(comp) # removables = deepcopy(list(self.runningcomponents.keys())) # # for key in removables: # comp = self.runningcomponents[key] # self.log(comp) # comp.unregister() # comp.stop() # self.runningcomponents.pop(key) # # objgraph.show_backrefs([comp], # max_depth=5, # filter=lambda x: type(x) not in [list, tuple, set], # highlight=lambda x: type(x) in [ConfigurableComponent], # filename='backref-graph_%s.png' % comp.uniquename) # del comp # del removables self.running_components = {} self.log("Not running blacklisted components: ", self.component_blacklist, lvl=debug) running = set(self.loadable_components.keys()).difference( self.component_blacklist) self.log("Starting components: ", sorted(running)) for name, componentdata in self.loadable_components.items(): if name in self.component_blacklist: continue self.log("Running component: ", name, lvl=verbose) try: if name in self.running_components: self.log("Component already running: ", name, lvl=warn) else: runningcomponent = componentdata() runningcomponent.register(self) self.running_components[name] = runningcomponent except Exception as e: self.log( "Could not register component: ", name, e, type(e), lvl=error, exc=True, )
def unload(self, name): if name in self.plugins: instances = self.plugins[name] for instance in instances: kill(instance) log("Unregistered Component: {0:s}", instance) if hasattr(instance, "cleanup"): instance.cleanup() log("Cleaned up Component: {0:s}", instance) del self.plugins[name] msg = log("Unloaded plugin: {0:s}", name) else: msg = log("Not unloading unloaded plugin: {0:s}", name) return msg
def unload(self, name): if name in self.plugins: instances = self.plugins[name] for instance in instances: kill(instance) self.logger.debug(u("Unregistered Component: {0}").format(instance)) if hasattr(instance, "cleanup"): instance.cleanup() self.logger.debug(u("Cleaned up Component: {0}").format(instance)) del self.plugins[name] msg = u("Unloaded plugin: {0}").format(name) self.logger.info(msg) return msg else: msg = u("Plugin {0} is not loaded").format(name) self.logger.warn(msg) return msg
def unload(self, name): if name in self.plugins: instances = self.plugins[name] for instance in instances: kill(instance) self.logger.debug( u("Unregistered Component: {0}").format(instance)) if hasattr(instance, "cleanup"): instance.cleanup() self.logger.debug( u("Cleaned up Component: {0}").format(instance)) del self.plugins[name] msg = u("Unloaded plugin: {0}").format(name) self.logger.info(msg) return msg else: msg = u("Plugin {0} is not loaded").format(name) self.logger.warn(msg) return msg
def unload(self, name): if name in self.plugins: instances = self.plugins[name] for instance in instances: kill(instance) self.logger.debug( "Unregistered Component: {0:s}".format(instance) ) if hasattr(instance, "cleanup"): instance.cleanup() self.logger.info( "Cleaned up Component: {0:s}".format(instance) ) del self.plugins[name] self.logger.info("Unloaded plugin: {0:s}".format(name)) else: self.logger.warn( "Not unloading unloaded plugin: {0:s}".format(name) )
def test_kill(): a = A() b = B() c = C() d = D() e = E() f = F() a += b b += c e += f d += e a += d assert a.parent == a assert b.parent == a assert c.parent == b assert not c.components assert b in a.components assert d in a.components assert d.parent == a assert e.parent == d assert f.parent == e assert f in e.components assert e in d.components assert not f.components assert kill(d) is None while a: a.flush() assert a.parent == a assert b.parent == a assert c.parent == b assert not c.components assert b in a.components assert not d in a.components assert not e in d.components assert not f in e.components assert d.parent == d assert e.parent == e assert f.parent == f assert not d.components assert not e.components assert not f.components
def _clean_plugin(self, fqplugin, unload=False): try: instances = self.loaded[fqplugin] for instance in instances: if hasattr(instance, "unregister"): instance.unregister() kill(instance) del(instances) if fqplugin in self.commands: del self.commands[fqplugin] if fqplugin in self.loaded: del self.loaded[fqplugin] if unload is True: if fqplugin in sys.modules: del sys.modules[fqplugin] self.logger.info("Plugin \"{}\": " "Clean complete.".format(fqplugin)) except Exception as e: self.logger.error("Plugin \"{}\": " "Failed to clean {}.".format(fqplugin, e)) raise
def runTest(self): a = A() b = B() c = C() d = D() e = E() f = F() a += b b += c e += f d += e a += d self.assertEquals(a.manager, a) self.assertEquals(b.manager, a) self.assertEquals(c.manager, b) self.assertFalse(c.components) self.assertTrue(b in a.components) self.assertTrue(d in a.components) self.assertEquals(d.manager, a) self.assertEquals(e.manager, d) self.assertEquals(f.manager, e) self.assertTrue(f in e.components) self.assertTrue(e in d.components) self.assertFalse(f.components) self.assertEquals(kill(d), None) self.assertEquals(a.manager, a) self.assertEquals(b.manager, a) self.assertEquals(c.manager, b) self.assertFalse(c.components) self.assertTrue(b in a.components) self.assertFalse(d in a.components) self.assertFalse(e in d.components) self.assertFalse(f in e.components) self.assertEquals(d.manager, d) self.assertEquals(e.manager, e) self.assertEquals(f.manager, f) self.assertFalse(d.components) self.assertFalse(e.components) self.assertFalse(f.components)