[core] Rework core implementation
Experimental re-implementation of core functionality with the aim: - Depend only on the Python Standard Library for core - If modules are missing elsewhere, *never* throw - Unit test *everything* - Cleaner and more minimal implementation - Better integration points for existing implementations (charts, braille, etc.) - Full backwards-compatibility with existing module system (except where modules can be vastly simplified)
This commit is contained in:
parent
72f88b3409
commit
e931bb93c6
214 changed files with 45 additions and 13040 deletions
|
@ -1,80 +1,21 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import signal
|
||||
import bumblebee.theme
|
||||
import bumblebee.engine
|
||||
import bumblebee.config
|
||||
import bumblebee.output
|
||||
import bumblebee.input
|
||||
import bumblebee.modules.error
|
||||
|
||||
try:
|
||||
reload(sys)
|
||||
sys.setdefaultencoding('UTF8')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
import core.output
|
||||
|
||||
def main():
|
||||
def sig_USR1_handler(signum,stack):
|
||||
engine.write_output()
|
||||
output = core.output.i3()
|
||||
modules = []
|
||||
# modules = core.module.modules()
|
||||
sys.stdout.write(output.start())
|
||||
while True:
|
||||
sys.stdout.write(output.begin_status_line())
|
||||
for module in modules:
|
||||
# module.update()
|
||||
sys.stdout.write(output.draw(module))
|
||||
sys.stdout.write(output.end_status_line())
|
||||
sys.stdout.write(output.stop())
|
||||
|
||||
config = bumblebee.config.Config(sys.argv[1:])
|
||||
|
||||
if config.debug():
|
||||
if config.logfile() in ["stdout", "stderr"]:
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="[%(asctime)s] %(levelname)-8s %(message)s",
|
||||
stream=sys.stdout if config.logfile() == "stdout" else sys.stderr
|
||||
)
|
||||
else:
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="[%(asctime)s] %(levelname)-8s %(message)s",
|
||||
filename=config.logfile()
|
||||
)
|
||||
|
||||
theme = bumblebee.theme.Theme(config.theme(), config.iconset())
|
||||
output = bumblebee.output.I3BarOutput(theme=theme, config=config)
|
||||
inp = bumblebee.input.I3BarInput()
|
||||
engine = None
|
||||
|
||||
try:
|
||||
engine = bumblebee.engine.Engine(
|
||||
config=config,
|
||||
output=output,
|
||||
inp=inp,
|
||||
theme=theme,
|
||||
)
|
||||
signal.signal(10,sig_USR1_handler)
|
||||
engine.run()
|
||||
except KeyboardInterrupt as error:
|
||||
inp.stop()
|
||||
sys.exit(0)
|
||||
except BaseException as e:
|
||||
if not engine: raise
|
||||
module = engine.current_module()
|
||||
logging.exception(e)
|
||||
if output.started():
|
||||
output.flush()
|
||||
output.end()
|
||||
else:
|
||||
output.start()
|
||||
import time
|
||||
while True:
|
||||
output.begin()
|
||||
error = bumblebee.modules.error.Module(engine, config)
|
||||
error.set("exception occurred: {} in {}".format(e, module))
|
||||
widget = error.widgets()[0]
|
||||
widget.link_module(error)
|
||||
output.draw(widget, error)
|
||||
output.flush()
|
||||
output.end()
|
||||
time.sleep(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue