[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:
parent
c4683f3700
commit
4133ae1907
4 changed files with 53 additions and 9 deletions
0
bumblebee/modules/__init__.py
Normal file
0
bumblebee/modules/__init__.py
Normal file
7
bumblebee/modules/time.py
Normal file
7
bumblebee/modules/time.py
Normal 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
|
|
@ -1,13 +1,22 @@
|
|||
import json
|
||||
|
||||
class i3bar:
|
||||
def preamble(self):
|
||||
def __init__(self):
|
||||
self._data = []
|
||||
def start(self):
|
||||
return json.dumps({ "version": 1 }) + "["
|
||||
|
||||
def data(self, data):
|
||||
return json.dumps(data) + ","
|
||||
def add(self, obj):
|
||||
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 "]"
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||
|
|
38
i3bumblebee
38
i3bumblebee
|
@ -1,18 +1,46 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import time
|
||||
import argparse
|
||||
import importlib
|
||||
import bumblebee.outputs.i3
|
||||
|
||||
def print_module_list():
|
||||
# TODO
|
||||
pass
|
||||
|
||||
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()
|
||||
|
||||
print output.preamble()
|
||||
print output.start()
|
||||
sys.stdout.flush()
|
||||
|
||||
while True:
|
||||
# TODO: retrieve data from modules
|
||||
data = []
|
||||
print output.data(data)
|
||||
for m in modules:
|
||||
output.add(m)
|
||||
print output.get()
|
||||
sys.stdout.flush()
|
||||
time.sleep(1)
|
||||
|
||||
print output.finalize()
|
||||
print output.stop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
Loading…
Reference in a new issue