90 lines
2.2 KiB
Python
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()
|