[modules] Initial module loading framework

Add a very simplistic framework for loading modules that query system
data. The user can provide a list of modules via an argument switch, and
the name of the module is used to look up a Python module that has to
have a class called "Module".

The outer framework (the outputs, in particular) then uses various query
methods of that class to construct a meaningful output.
This commit is contained in:
Tobias Witek 2016-10-30 17:30:09 +01:00
parent c4683f3700
commit 4133ae1907
4 changed files with 53 additions and 9 deletions

View file

View file

@ -0,0 +1,7 @@
import datetime
class Module:
def data(self):
return datetime.datetime.now().strftime("%x %X")
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -1,13 +1,22 @@
import json import json
class i3bar: class i3bar:
def preamble(self): def __init__(self):
self._data = []
def start(self):
return json.dumps({ "version": 1 }) + "[" return json.dumps({ "version": 1 }) + "["
def data(self, data): def add(self, obj):
return json.dumps(data) + "," self._data.append({
"full_text": obj.data()
})
def finalize(self): def get(self):
data = json.dumps(self._data)
self._data = []
return data + ","
def stop(self):
return "]" return "]"
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -1,18 +1,46 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys
import time
import argparse
import importlib
import bumblebee.outputs.i3 import bumblebee.outputs.i3
def print_module_list():
# TODO
pass
def main(): def main():
parser = argparse.ArgumentParser(description="display system data in the i3bar")
parser.add_argument("-m", "--modules", nargs="+", help="List of modules to load. The order of the list determines their order in the i3bar (from left to right)")
parser.add_argument("-l", "--list", action="store_true", help="List all available modules")
args = parser.parse_args()
if args.list:
print_module_list()
sys.exit(0)
modules = []
for m in args.modules:
# TODO: how to cleanly handle errors here?
# (useful error messages)
module = importlib.import_module("bumblebee.modules.%s" % m)
modules.append(getattr(module, "Module")())
output = bumblebee.outputs.i3.i3bar() output = bumblebee.outputs.i3.i3bar()
print output.preamble() print output.start()
sys.stdout.flush()
while True: while True:
# TODO: retrieve data from modules for m in modules:
data = [] output.add(m)
print output.data(data) print output.get()
sys.stdout.flush()
time.sleep(1)
print output.finalize() print output.stop()
if __name__ == "__main__": if __name__ == "__main__":
main() main()