From bd12a51bfb6efdfca5f8033e1e0efae8bcf8a5c7 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Sun, 19 Jan 2020 16:06:21 +0100 Subject: [PATCH] [core] Add simple module loading Add a way to load modules located in modules/* --- core/module.py | 15 ++++++++++++++- modules/test.py | 10 ++++------ tests/test_module.py | 23 +++++++++++++++++++++++ 3 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 tests/test_module.py diff --git a/core/module.py b/core/module.py index 4307014..829ca46 100644 --- a/core/module.py +++ b/core/module.py @@ -1,9 +1,22 @@ +import importlib +import logging + +log = logging.getLogger(__name__) def load(module_name): - pass + try: + mod = importlib.import_module('modules.{}'.format(module_name)) + except ImportError as error: + log.fatal('failed to import {}: {}'.format(module_name, str(error))) + return Error(module_name) + return getattr(mod, 'Module')() class Module(object): def update(self): pass +class Error(Module): + def __init__(self, loaded_module_name): + self._loaded_module_name = loaded_module_name + # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/modules/test.py b/modules/test.py index 5e92e0e..57af6db 100644 --- a/modules/test.py +++ b/modules/test.py @@ -3,12 +3,10 @@ """Test module """ -import bumblebee.engine +import core.module -class Module(bumblebee.engine.Module): - def __init__(self, engine, config): - super(Module, self).__init__(engine, config, - bumblebee.output.Widget(full_text="test") - ) +class Module(core.module.Module): + def __init__(self): + pass # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/tests/test_module.py b/tests/test_module.py new file mode 100644 index 0000000..85a3e17 --- /dev/null +++ b/tests/test_module.py @@ -0,0 +1,23 @@ +import unittest + +import core.module + +class module(unittest.TestCase): + def setUp(self): + self._invalidModuleName = 'invalid-module-name' + self._validModuleName = 'test' + + def tearDown(self): + pass + + def test_load_invalid_module(self): + module = core.module.load(self._invalidModuleName) + self.assertEqual('core.module', module.__class__.__module__, 'module must be a module object') + self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error') + + def test_load_valid_module(self): + module = core.module.load(self._validModuleName) + self.assertEqual('modules.{}'.format(self._validModuleName), module.__class__.__module__, 'module must be a modules. object') + self.assertEqual('Module', module.__class__.__name__, 'a valid module must have a Module class') + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4