import os import logging os.environ["KIVY_NO_CONSOLELOG"] = "1" logging.basicConfig(level=logging.INFO) import kivy kivy.require("1.0.7") from kivy.app import App from kivy.properties import ObjectProperty from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout logging.getLogger("kivy").setLevel(level=logging.WARN) logger = logging.getLogger("core") from sejf.modules.base import BaseModule from sejf.modules.snake import SnakeModule from sejf.modules.barcode import BarcodeModule modules = { "snake": SnakeModule, "barcode": BarcodeModule, "input": InputModule, } class Sejf(BoxLayout): pass class ProgressReport(Label): task = ObjectProperty(None) def on_task(self, obj, v: BaseModule = None): v.bind(finished=lambda o, v: self.update_text()) self.update_text() def update_text(self): if self.task.finished: self.text = "%s: done" % (self.task.__class__.__name__,) self.color = (0.0, 1.0, 0.0, 1.0) elif self.task.enabled: self.text = "%s: inprogress" % (self.task.__class__.__name__,) self.color = (1.0, 1.0, 0.0, 1.0) else: self.text = "%s: nope" % (self.task.__class__.__name__,) self.text.color = (0.3, 0.3, 0.3, 1.0) class SejfApp(App): def __init__(self, config, *args, **kwargs): logger.info("Loading modules...") logger.info("%r", config) self.tasks = [] for i, task in enumerate(config["tasks"]): if task["module"] in modules: logger.info("%d: %r", i, task) conf = task.copy() conf.pop("module") self.tasks.append(modules[task["module"]](self, conf)) else: logger.warn("%d: %r - unsupported module", i, task) super(SejfApp, self).__init__(*args, **kwargs) def build(self): main = Sejf() for task in self.tasks: task.build(main) w = main.ids["progress"] w.add_widget(ProgressReport(task=task)) return main if __name__ == "__main__": import yaml with open("config.yml") as fd: config = yaml.load(fd) SejfApp(config).run()