bumblebee-status/bumblebee/engine.py
Tobi-wan Kenobi 6f52825ef0 [core/output] Add initial version of i3bar output
Add output handler for i3bar protocol and add some tests for it. Right
now, it only support start and end.

see #23
2016-12-04 12:26:20 +01:00

55 lines
1.5 KiB
Python

"""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):
"""Engine for driving the application
This class connects input/output, instantiates all
required modules and drives the "event loop"
"""
def __init__(self, config, output=None):
self._output = output
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):
"""Check whether the event loop is running"""
return self._running
def stop(self):
"""Stop the event loop"""
self._running = False
def run(self):
"""Start the event loop"""
self._output.start()
while self.running():
pass
self._output.stop()
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4