90 lines
2.2 KiB
Python

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