from lib.helpers import timing from PyQt5.QtGui import QKeySequence from PyQt5.QtWidgets import QShortcut from ui.test_test import Test_Test class Test_Barcodes(Test_Test): def __init__(self, components=None, recipe=None, step=None): super().__init__(components=components, recipe=recipe, step=step) self.barcodes_spec = { "serial": self.check_serial_barcode } QShortcut(QKeySequence("Return"), self).activated.connect(self.get) QShortcut(QKeySequence("Enter"), self).activated.connect(self.get) self.barcodes_le.setFocus() def start(self, recipe=None, step=None): super().start(recipe=recipe, step=step) self.barcodes = {} self.visualize() self.barcodes_le.setPalette(self.status_palettes[None]) self.barcodes_le.setText("") self.barcodes_le.setFocus() # def stop(self): # super().stop() def get(self, data=None, override=False): if self.ok_timer.isActive(): # avoid proccessing if completed return if data is None: data = self.barcodes_le.text() if not len(data): data = None if data is None: super().get(None, override=override) return barcode_ok = False for barcode_name, barcode_check in self.barcodes_spec.items(): if barcode_check(data): self.barcodes[barcode_name] = data barcode_ok = True break if barcode_ok: self.barcodes_le.setPalette(self.status_palettes[True]) else: self.barcodes_le.setPalette(self.status_palettes[False]) self.barcodes_le.setText("") self.barcodes_le.setFocus() if len(self.barcodes_spec.keys() - self.barcodes.keys()) == 0: result = self.barcodes ok = True else: result = None ok = None super().get([{ "time": timing(), "results": { "ok": ok, "result": result, "data": self.barcodes, }, }], override=override, fail=ok is False) def visualize(self, data=None): if data is None: data = {} d = data.get("results", {}).get("data", {}) for k, l in { "serial": self.serial_l, }.items(): l.setText(str(d.get(k, "-"))) super().visualize(data) def check_serial_barcode(self, barcode=None): return barcode is not None and len(barcode)