[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

@ -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()