import sys if "--sim-serial" in sys.argv: from components.dummies.serial import serial else: import serial from PyQt5.QtWidgets import QMessageBox from .component import Component class Serial_Label_Printer(Component): def __init__(self, config=None, name=None): super().__init__(config=config, name=name, threaded=False) def config_changed(self): self.address = self.config[self.name]["address"] self.baudrate = int(self.config[self.name]["baudrate"]) self.stopbits = getattr(serial, self.config[self.name].get("stopbits", "stopbits_one").upper()) self.parity = getattr(serial, self.config[self.name].get("parity", "parity_none").upper()) self.bytesize = getattr(serial, self.config[self.name].get("bytesize", "eightbits").upper()) @Component.reconfig_on_error def print_label(self, template, context=None): if context is None: context = {} # LOAD LABEL TEMPLATE with open(f"config/label_templates/{str(template)}", "r", errors="surrogateescape") as f: label = f.read() # LABEL PRINT label = label.format(**context) try: conn = serial.Serial( self.address, baudrate=self.baudrate, stopbits=self.stopbits, parity=self.parity, bytesize=self.bytesize, ) conn.write(label.encode(errors="surrogateescape")) conn.close() except serial.serialutil.SerialException as e: QMessageBox.critical( None, "Errore Connessione Stampante", "Non e stato possibile connettersi alla stampante di etichette\nL'etichetta non verra stampata.\n\nErrore:\n" + str(e) )