[core/errors] Add custom exceptions
Add custom exceptions and add error handling to the engine's module loading logic. I.e. when a non-existent module is loaded, an exception is thrown now. see #23
This commit is contained in:
parent
b6eb3ee8e6
commit
8855f1155b
4 changed files with 33 additions and 2 deletions
|
@ -16,6 +16,10 @@ def main():
|
||||||
engine.run()
|
engine.run()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
main()
|
main()
|
||||||
|
except bumblebee.error.BaseError as error:
|
||||||
|
sys.stderr.write("fatal: {}\n".format(error))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
"""Core application engine"""
|
"""Core application engine"""
|
||||||
|
|
||||||
|
import time
|
||||||
import importlib
|
import importlib
|
||||||
|
import bumblebee.error
|
||||||
|
|
||||||
class Module(object):
|
class Module(object):
|
||||||
"""Module instance base class
|
"""Module instance base class
|
||||||
|
@ -33,7 +35,10 @@ class Engine(object):
|
||||||
|
|
||||||
def load_module(self, module_name):
|
def load_module(self, module_name):
|
||||||
"""Load specified module and return it as object"""
|
"""Load specified module and return it as object"""
|
||||||
|
try:
|
||||||
module = importlib.import_module("bumblebee.modules.{}".format(module_name))
|
module = importlib.import_module("bumblebee.modules.{}".format(module_name))
|
||||||
|
except ImportError as error:
|
||||||
|
raise bumblebee.error.ModuleLoadError(error)
|
||||||
return getattr(module, "Module")(self)
|
return getattr(module, "Module")(self)
|
||||||
|
|
||||||
def running(self):
|
def running(self):
|
||||||
|
@ -53,6 +58,7 @@ class Engine(object):
|
||||||
widgets += module.widgets()
|
widgets += module.widgets()
|
||||||
self._output.draw(widgets)
|
self._output.draw(widgets)
|
||||||
self._output.flush()
|
self._output.flush()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
self._output.stop()
|
self._output.stop()
|
||||||
|
|
||||||
|
|
11
bumblebee/error.py
Normal file
11
bumblebee/error.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
"""Collection of all exceptions raised by this tool"""
|
||||||
|
|
||||||
|
class BaseError(Exception):
|
||||||
|
"""Base class for all exceptions generated by this tool"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class ModuleLoadError(BaseError):
|
||||||
|
"""Raised whenever loading a module fails"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
@ -1,6 +1,7 @@
|
||||||
# pylint: disable=C0103,C0111
|
# pylint: disable=C0103,C0111
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
from bumblebee.error import ModuleLoadError
|
||||||
from bumblebee.engine import Engine
|
from bumblebee.engine import Engine
|
||||||
from bumblebee.config import Config
|
from bumblebee.config import Config
|
||||||
|
|
||||||
|
@ -8,6 +9,7 @@ class TestEngine(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.engine = Engine(Config())
|
self.engine = Engine(Config())
|
||||||
self.testModule = "test"
|
self.testModule = "test"
|
||||||
|
self.invalidModule = "no-such-module"
|
||||||
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
||||||
self.testModules = [
|
self.testModules = [
|
||||||
{"module": "test", "name": "a"},
|
{"module": "test", "name": "a"},
|
||||||
|
@ -23,6 +25,14 @@ class TestEngine(unittest.TestCase):
|
||||||
module = self.engine.load_module(self.testModule)
|
module = self.engine.load_module(self.testModule)
|
||||||
self.assertEquals(module.__module__, self.testModuleSpec)
|
self.assertEquals(module.__module__, self.testModuleSpec)
|
||||||
|
|
||||||
|
def test_load_invalid_module(self):
|
||||||
|
with self.assertRaises(ModuleLoadError):
|
||||||
|
self.engine.load_module(self.invalidModule)
|
||||||
|
|
||||||
|
def test_load_none(self):
|
||||||
|
with self.assertRaises(ModuleLoadError):
|
||||||
|
self.engine.load_module(None)
|
||||||
|
|
||||||
def test_load_modules(self):
|
def test_load_modules(self):
|
||||||
modules = self.engine.load_modules(self.testModules)
|
modules = self.engine.load_modules(self.testModules)
|
||||||
self.assertEquals(len(modules), len(self.testModules))
|
self.assertEquals(len(modules), len(self.testModules))
|
||||||
|
|
Loading…
Reference in a new issue