[core/engine] Add module loading logic
Allow the engine to load modules from the bumblebee/modules/ directory. see #23
This commit is contained in:
parent
cf1693548b
commit
a2c6214baa
5 changed files with 65 additions and 5 deletions
|
@ -1,5 +1,18 @@
|
||||||
"""Core application engine"""
|
"""Core application engine"""
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
class Module(object):
|
||||||
|
"""Module instance base class
|
||||||
|
|
||||||
|
Objects of this type represent the modules that
|
||||||
|
the user configures. Concrete module implementations
|
||||||
|
(e.g. CPU utilization, disk usage, etc.) derive from
|
||||||
|
this base class.
|
||||||
|
"""
|
||||||
|
def __init__(self, engine):
|
||||||
|
pass
|
||||||
|
|
||||||
class Engine(object):
|
class Engine(object):
|
||||||
"""Engine for driving the application
|
"""Engine for driving the application
|
||||||
|
|
||||||
|
@ -8,6 +21,19 @@ class Engine(object):
|
||||||
"""
|
"""
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self._running = True
|
self._running = True
|
||||||
|
self._modules = []
|
||||||
|
self.load_modules(config.modules())
|
||||||
|
|
||||||
|
def load_modules(self, modules):
|
||||||
|
"""Load specified modules and return them as list"""
|
||||||
|
for module in modules:
|
||||||
|
self._modules.append(self.load_module(module["module"]))
|
||||||
|
return self._modules
|
||||||
|
|
||||||
|
def load_module(self, module_name):
|
||||||
|
"""Load specified module and return it as object"""
|
||||||
|
module = importlib.import_module("bumblebee.modules.{}".format(module_name))
|
||||||
|
return getattr(module, "Module")(self)
|
||||||
|
|
||||||
def running(self):
|
def running(self):
|
||||||
"""Check whether the event loop is running"""
|
"""Check whether the event loop is running"""
|
||||||
|
|
0
bumblebee/modules/__init__.py
Normal file
0
bumblebee/modules/__init__.py
Normal file
11
bumblebee/modules/test.py
Normal file
11
bumblebee/modules/test.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# pylint: disable=C0111,R0903
|
||||||
|
|
||||||
|
"""Test module"""
|
||||||
|
|
||||||
|
import bumblebee.engine
|
||||||
|
|
||||||
|
class Module(bumblebee.engine.Module):
|
||||||
|
def __init__(self, engine):
|
||||||
|
super(Module, self).__init__(engine)
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
10
runtests.sh
10
runtests.sh
|
@ -2,10 +2,12 @@
|
||||||
|
|
||||||
test=$(which nosetests)
|
test=$(which nosetests)
|
||||||
|
|
||||||
echo "testing $(python2 -V 2>&1)"
|
echo "testing with $(python2 -V 2>&1)"
|
||||||
python2 $test --rednose -v tests/
|
python2 $test --rednose -v tests/
|
||||||
|
|
||||||
echo
|
if [ $? == 0 ]; then
|
||||||
|
echo
|
||||||
|
|
||||||
echo "testing $(python3 -V 2>&1)"
|
echo "testing with $(python3 -V 2>&1)"
|
||||||
python3 $test --rednose -v tests/
|
python3 $test --rednose -v tests/
|
||||||
|
fi
|
||||||
|
|
|
@ -2,12 +2,33 @@
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from bumblebee.engine import Engine
|
from bumblebee.engine import Engine
|
||||||
|
from bumblebee.config import Config
|
||||||
|
|
||||||
class TestEngine(unittest.TestCase):
|
class TestEngine(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.engine = Engine(None)
|
self.engine = Engine(Config())
|
||||||
|
self.testModule = "test"
|
||||||
|
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
||||||
|
self.testModules = [
|
||||||
|
{ "module": "test", "name": "a" },
|
||||||
|
{ "module": "test", "name": "b" },
|
||||||
|
]
|
||||||
|
|
||||||
def test_stop(self):
|
def test_stop(self):
|
||||||
self.assertTrue(self.engine.running())
|
self.assertTrue(self.engine.running())
|
||||||
self.engine.stop()
|
self.engine.stop()
|
||||||
self.assertFalse(self.engine.running())
|
self.assertFalse(self.engine.running())
|
||||||
|
|
||||||
|
def test_load_module(self):
|
||||||
|
module = self.engine.load_module(self.testModule)
|
||||||
|
self.assertEquals(module.__module__, self.testModuleSpec)
|
||||||
|
|
||||||
|
def test_load_modules(self):
|
||||||
|
modules = self.engine.load_modules(self.testModules)
|
||||||
|
self.assertEquals(len(modules), len(self.testModules))
|
||||||
|
self.assertEquals(
|
||||||
|
[ module.__module__ for module in modules ],
|
||||||
|
[ self.testModuleSpec for module in modules ]
|
||||||
|
)
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
Loading…
Reference in a new issue