aboutsummaryrefslogtreecommitdiff
path: root/i3/.config/i3/bar/bumblebee/engine.py
diff options
context:
space:
mode:
Diffstat (limited to 'i3/.config/i3/bar/bumblebee/engine.py')
-rw-r--r--i3/.config/i3/bar/bumblebee/engine.py166
1 files changed, 0 insertions, 166 deletions
diff --git a/i3/.config/i3/bar/bumblebee/engine.py b/i3/.config/i3/bar/bumblebee/engine.py
deleted file mode 100644
index c0ea9cc..0000000
--- a/i3/.config/i3/bar/bumblebee/engine.py
+++ /dev/null
@@ -1,166 +0,0 @@
-"""Core application engine"""
-
-import os
-import time
-import pkgutil
-import importlib
-import bumblebee.error
-import bumblebee.modules
-
-def all_modules():
- """Return a list of available modules"""
- result = []
- path = os.path.dirname(bumblebee.modules.__file__)
- for mod in [name for _, name, _ in pkgutil.iter_modules([path])]:
- result.append({
- "name": mod
- })
- return result
-
-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, config={}, widgets=[]):
- self.name = config.get("name", self.__module__.split(".")[-1])
- self._config = config
- self.id = self.name
- self._widgets = []
- if widgets:
- self._widgets = widgets if isinstance(widgets, list) else [widgets]
-
- def widgets(self):
- """Return the widgets to draw for this module"""
- return self._widgets
-
- def widget(self, name):
- for widget in self._widgets:
- if widget.name == name:
- return widget
-
- def widget_by_id(self, uid):
- for widget in self._widgets:
- if widget.id == uid:
- return widget
- return None
-
- def update(self, widgets):
- """By default, update() is a NOP"""
- pass
-
- def update_all(self):
- self.update(self._widgets)
-
- def parameter(self, name, default=None):
- """Return the config parameter 'name' for this module"""
- name = "{}.{}".format(self.name, name)
- return self._config["config"].get(name, default)
-
- def threshold_state(self, value, warn, crit):
- if value > float(self.parameter("critical", crit)):
- return "critical"
- if value > float(self.parameter("warning", warn)):
- return "warning"
- return None
-
-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, inp=None):
- self._output = output
- self._config = config
- self._running = True
- self._modules = []
- self.input = inp
- self._aliases = self._read_aliases()
- self.load_modules(config.modules())
-
- self.input.register_callback(None, bumblebee.input.WHEEL_UP,
- "i3-msg workspace prev_on_output")
- self.input.register_callback(None, bumblebee.input.WHEEL_DOWN,
- "i3-msg workspace next_on_output")
-
- self.input.start()
-
- def modules(self):
- return self._modules
-
- def load_modules(self, modules):
- """Load specified modules and return them as list"""
- for module in modules:
- mod = self._load_module(module["module"], module["name"])
- self._modules.append(mod)
- self._register_module_callbacks(mod)
- return self._modules
-
- def _register_module_callbacks(self, module):
- buttons = [
- { "name": "left-click", "id": bumblebee.input.LEFT_MOUSE },
- { "name": "middle-click", "id": bumblebee.input.MIDDLE_MOUSE },
- { "name": "right-click", "id": bumblebee.input.RIGHT_MOUSE },
- { "name": "wheel-up", "id": bumblebee.input.WHEEL_UP },
- { "name": "wheel-down", "id": bumblebee.input.WHEEL_DOWN },
- ]
- for button in buttons:
- if module.parameter(button["name"], None):
- self.input.register_callback(obj=module,
- button=button["id"], cmd=module.parameter(button["name"]))
-
- def _read_aliases(self):
- result = {}
- for module in all_modules():
- mod = importlib.import_module("bumblebee.modules.{}".format(module["name"]))
- for alias in getattr(mod, "ALIASES", []):
- result[alias] = module["name"]
- return result
-
- def _load_module(self, module_name, config_name=None):
- """Load specified module and return it as object"""
- if module_name in self._aliases:
- config_name is config_name if config_name else module_name
- module_name = self._aliases[module_name]
- if config_name is None:
- config_name = module_name
- try:
- module = importlib.import_module("bumblebee.modules.{}".format(module_name))
- except ImportError as error:
- raise bumblebee.error.ModuleLoadError(error)
- return getattr(module, "Module")(self, {
- "name": config_name,
- "config": self._config
- })
-
- 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():
- self._output.begin()
- for module in self._modules:
- module.update(module.widgets())
- for widget in module.widgets():
- widget.link_module(module)
- self._output.draw(widget=widget, module=module, engine=self)
- self._output.flush()
- self._output.end()
- if self.running():
- self.input.wait(float(self._config.get("interval", 1)))
-
- self._output.stop()
- self.input.stop()
-
-# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4