[modules/datetime] Re-enable datetime module

Add datetime module + aliases date and time.

see #23
This commit is contained in:
Tobi-wan Kenobi 2016-12-09 07:11:23 +01:00
parent 2fa8d7b778
commit f40418475f
7 changed files with 51 additions and 4 deletions

View file

@ -22,6 +22,10 @@ class Module(object):
"""Return the widgets to draw for this module""" """Return the widgets to draw for this module"""
return self._widgets return self._widgets
def update(self, widgets):
"""By default, update() is a NOP"""
pass
class Engine(object): class Engine(object):
"""Engine for driving the application """Engine for driving the application

1
bumblebee/modules/date.py Symbolic link
View file

@ -0,0 +1 @@
datetime.py

View file

@ -0,0 +1,31 @@
# pylint: disable=C0111,R0903
"""Displays the current time, using the optional format string as input for strftime."""
from __future__ import absolute_import
import datetime
import bumblebee.engine
def default_format(module):
default = "%x %X"
if module == "date":
default = "%x"
if module == "time":
default = "%X"
return default
class Module(bumblebee.engine.Module):
def __init__(self, engine):
super(Module, self).__init__(engine,
bumblebee.output.Widget(full_text=self.get_time)
)
module = self.__module__.split(".")[-1]
self._fmt = default_format(module)
# self._fmt = self._config.parameter("format", default_format(module))
def get_time(self):
return datetime.datetime.now().strftime(self._fmt)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

1
bumblebee/modules/time.py Symbolic link
View file

@ -0,0 +1 @@
datetime.py

View file

@ -12,9 +12,14 @@ class Widget(object):
self._module = None self._module = None
def set_module(self, module): def set_module(self, module):
"""Set the module that spawned this widget
This is done outside the constructor to avoid having to
pass in the module name in every concrete module implementation"""
self._module = module.name self._module = module.name
def module(self): def module(self):
"""Return the name of the module that spawned this widget"""
return self._module return self._module
def full_text(self): def full_text(self):

View file

@ -31,10 +31,12 @@ class Theme(object):
return self._get(widget, "suffix", None) return self._get(widget, "suffix", None)
def loads(self, data): def loads(self, data):
"""Initialize the theme from a JSON string"""
theme = json.loads(data) theme = json.loads(data)
self._init(theme) self._init(theme)
def _load_icons(self, name): def _load_icons(self, name):
"""Load icons for a theme"""
path = "{}/icons/".format(theme_path()) path = "{}/icons/".format(theme_path())
return self.load(name, path=path) return self.load(name, path=path)
@ -52,7 +54,7 @@ class Theme(object):
raise bumblebee.error.ThemeLoadError("no such theme: {}".format(name)) raise bumblebee.error.ThemeLoadError("no such theme: {}".format(name))
def _get(self, widget, name, default=None): def _get(self, widget, name, default=None):
"""Return the config value 'name' for 'widget'"""
module_theme = self._theme.get(widget.module(), {}) module_theme = self._theme.get(widget.module(), {})
padding = None padding = None
@ -71,6 +73,7 @@ class Theme(object):
# http://blog.impressiver.com/post/31434674390/deep-merge-multiple-python-dicts # http://blog.impressiver.com/post/31434674390/deep-merge-multiple-python-dicts
# nicely done :) # nicely done :)
def _merge(self, target, *args): def _merge(self, target, *args):
"""Merge two arbitrarily nested data structures"""
if len(args) > 1: if len(args) > 1:
for item in args: for item in args:
self._merge(item) self._merge(item)

View file

@ -44,7 +44,7 @@ class TestI3BarOutput(unittest.TestCase):
self.output.flush() self.output.flush()
result = json.loads(stdout.getvalue()) result = json.loads(stdout.getvalue())
for res in result: for res in result:
self.assertEquals(res["full_text"], widget.full_text()) self.assertEquals(res["full_text"], self.someWidget.full_text())
@mock.patch("sys.stdout", new_callable=StringIO) @mock.patch("sys.stdout", new_callable=StringIO)
def test_begin(self, stdout): def test_begin(self, stdout):
@ -84,7 +84,9 @@ class TestI3BarOutput(unittest.TestCase):
self.output.flush() self.output.flush()
result = json.loads(stdout.getvalue())[0] result = json.loads(stdout.getvalue())[0]
self.assertEquals(result["full_text"], "{}{}{}".format( self.assertEquals(result["full_text"], "{}{}{}".format(
self.theme.prefix(self.someWidget), self.someWidget.full_text(), self.theme.suffix(self.someWidget)) self.theme.prefix(self.someWidget),
) self.someWidget.full_text(),
self.theme.suffix(self.someWidget)
))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4