예제 #1
0
파일: mini.py 프로젝트: ri0t/isomer
    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,
                )
예제 #2
0
파일: __init__.py 프로젝트: prologic/kdb
    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
예제 #3
0
파일: __init__.py 프로젝트: MrSwiss/charla
    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
예제 #4
0
파일: __init__.py 프로젝트: MrSwiss/charla
    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
예제 #5
0
    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)
            )
예제 #6
0
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
예제 #7
0
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
예제 #8
0
    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
예제 #9
0
    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)