From d2e80571414f96d880a3e8868d1b7a761d598b82 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Fri, 6 Mar 2020 14:31:29 +0100 Subject: [PATCH] [modules] Add CPU module Also, change minwidth from theme.minwidth to widget property --- core/decorators.py | 2 +- core/module.py | 5 +++++ core/output.py | 2 +- core/widget.py | 2 ++ doc/MODULE_MIGRATION.md | 2 +- modules/core/cpu.py | 38 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 modules/core/cpu.py diff --git a/core/decorators.py b/core/decorators.py index 4c241a8..635e123 100644 --- a/core/decorators.py +++ b/core/decorators.py @@ -8,7 +8,7 @@ def scrollable(func): return text width = widget.get('theme.width', util.format.asint(module.parameter('width', 30))) if util.format.asbool(module.parameter('scrolling.makewide', True)): - widget.set('theme.minwidth', 'A'*width) + widget.minwidth = 'A'*width if width < 0 or len(text) <= width: return text diff --git a/core/module.py b/core/module.py index 5979b8b..49f8016 100644 --- a/core/module.py +++ b/core/module.py @@ -5,6 +5,11 @@ import core.input import core.widget import core.decorators +try: + error = ModuleNotFoundError('') +except Exception as e: + ModuleNotFoundError = Exception + log = logging.getLogger(__name__) def load(module_name, config=None): diff --git a/core/output.py b/core/output.py index 62436df..0a7fa00 100644 --- a/core/output.py +++ b/core/output.py @@ -86,7 +86,7 @@ class i3(object): 'full_text': self.__decorate(module, widget, text), 'color': self._theme.fg(widget), 'background': self._theme.bg(widget), - 'min_width': widget.get('theme.minwidth'), + 'min_width': self.__decorate(module, widget, widget.minwidth), }) return [attr] diff --git a/core/widget.py b/core/widget.py index 5dfb4d9..660f4f2 100644 --- a/core/widget.py +++ b/core/widget.py @@ -9,6 +9,8 @@ class Widget(util.store.Store, core.input.Object): self._module = module self._name = name + self.minwidth = None + def name(self): return self._name diff --git a/doc/MODULE_MIGRATION.md b/doc/MODULE_MIGRATION.md index 161c4d1..607ebd8 100644 --- a/doc/MODULE_MIGRATION.md +++ b/doc/MODULE_MIGRATION.md @@ -4,6 +4,6 @@ - bumblebee.engine.Module has been replaced with core.module.Module - module __init__ has less parameters - super() works differently -- register_callback is now core.input.register +- engine.input.register_callback is now core.input.register - update() doesn't have a list of widgets anymore diff --git a/modules/core/cpu.py b/modules/core/cpu.py new file mode 100644 index 0000000..3c9787f --- /dev/null +++ b/modules/core/cpu.py @@ -0,0 +1,38 @@ +# pylint: disable=C0111,R0903 + +'''Displays CPU utilization across all CPUs. + +Parameters: + * cpu.warning : Warning threshold in % of CPU usage (defaults to 70%) + * cpu.critical: Critical threshold in % of CPU usage (defaults to 80%) + * cpu.format : Format string (defaults to '{:.01f}%') +''' + +import psutil + +import core.module +import core.widget +import core.input + +class Module(core.module.Module): + def __init__(self, config=None): + super().__init__(config, core.widget.Widget(self.utilization)) + self.widget().minwidth = self._format.format(100.0-10e-20) + self._utilization = psutil.cpu_percent(percpu=False) + core.input.register(self, button=core.input.LEFT_MOUSE, + cmd='gnome-system-monitor') + + @property + def _format(self): + return self.parameter('format', '{:.01f}%') + + def utilization(self, _): + return self._format.format(self._utilization) + + def update(self): + self._utilization = psutil.cpu_percent(percpu=False) + + def state(self, _): + return self.threshold_state(self._utilization, 70, 80) + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4