class Loading(QObject): """docstring for Loading""" def __init__(self, loading_list=None, tango_applier=None, progBar=None, parent=None): super(Loading, self).__init__() self.progBar = progBar self.loading_list = loading_list self.tango_applier = tango_applier self.num = 0 self.count = 0 self.parent = parent #self.tango_applier.begin_writing_signal.connect(self.begin_writing) #self.tango_applier.end_writing_signal.connect(self.end_writing) #self.progBar. #self.progBar.forceShow() reading_tango_completed_signal = pyqtSignal(dict) tango_loading_completed_signal = pyqtSignal() def check_tango_loading_list(self, loading_list, value_list=None): fixed_loading_list = {} fixed_value_list = {} error_list = [] for name, path in loading_list.items(): if not path: #error_list.append("No path for name: "+name) print("no path for name:", name) continue el = path.split('/') dev_name = '/'.join(el[:-1]) attr = el[-1] if not dev_name or not attr: error_list.append("No attr or dev for name " + name) print("no attr or dev for name:", name) continue fixed_loading_list[name] = path if value_list is not None: fixed_value_list[name] = value_list[name] if value_list is None: return fixed_loading_list, error_list return fixed_loading_list, fixed_value_list, error_list def start_read_from_tango(self, loading_list): self.tango_applier = TangoApplier() loading_list, error_list = self.check_tango_loading_list(loading_list) if error_list: error_message = "Error:\n• " + '\n• '.join(error_list) QtWidgets.QMessageBox.critical(self.parent, "Mapping failed", error_message) return self.num = 0 self.count = len(loading_list) self.progBar = ProgressDialog(loading_list) self.progBar.accepted.connect(self.canel_write_to_tango) #self.progBar.stopButton.clicked.connect(self.stop_ta) self.progBar.show() self.progBar.setValue(0) self.tango_applier.begin_writing_signal.connect( self.begin_tango_dev_writing) self.tango_applier.end_writing_signal.connect( self.end_tango_dev_writing) self.tango_applier.stop_load_snapshot_signal.connect( self.stop_tango_snapshot_loading) self.tango_applier.error_signal.connect(self.tango_error) self.tango_loading_completed_signal.connect( self.reading_tango_completed) #self.tango_applier.read_completed_signal.connect(self.reading_tango_completed) self.error_list = {} self.reverse_loading_list = {} for name, dev in loading_list.items(): self.reverse_loading_list[dev] = name self.tango_applier.load_snapshot(loading_list) def stop_tango_snapshot_loading(self): self.progBar.setValue(self.count) self.num = 0 self.count = 0 def reading_tango_completed(self): value_list = self.tango_applier.get_values() if self.num == self.count: msgBox = QMessageBox() if not self.error_list: msgBox.setText("Loading completed successfully.") else: detail_txt = self._create_tango_error_text( "Next variables don't sending:") msgBox.setText("Loading completed with errors.") msgBox.setDetailedText(detail_txt) msgBox.exec() print(self.reverse_loading_list) self.reading_tango_completed_signal.emit(value_list) def start_write_to_tango(self, loading_list, value_list): self.tango_applier = TangoApplier() self.num = 0 loading_list, value_list, error_list = self.check_tango_loading_list( loading_list, value_list) if error_list: error_message = "Error:\n• " + '\n• '.join(error_list) QtWidgets.QMessageBox.critical(self.parent, "Mapping failed", error_message) return self.count = len(loading_list) self.progBar = ProgressDialog(loading_list) self.progBar.accepted.connect(self.canel_write_to_tango) self.progBar.show() self.progBar.setValue(0) self.tango_applier.begin_writing_signal.connect( self.begin_tango_dev_writing) self.tango_applier.end_writing_signal.connect( self.end_tango_dev_writing) self.tango_applier.stop_save_snapshot_signal.connect( self.stop_tango_snapshot_saving) self.tango_applier.error_signal.connect(self.tango_error) self.tango_loading_completed_signal.connect( self.tango_writing_completed) #self.tango_applier.writing_completed_signal.connect(self.tango_writing_completed) self.error_list = {} self.reverse_loading_list = {} for name, dev in loading_list.items(): self.reverse_loading_list[dev] = name self.tango_applier.save_snapshot(loading_list, value_list) def begin_tango_dev_writing(self, dev): print(dev) self.progBar.set_loading_item(dev) def end_tango_dev_writing(self, dev): self.progBar.set_done_item(dev) self.num += 1 self.progBar.setValue(self.num) if self.num == self.count: self.tango_loading_completed_signal.emit() def tango_error(self, dev, error): dev_name = '/'.join(dev.split('/')[:-1]) attr = dev.split('/')[-1] name = self.reverse_loading_list[dev] self.error_list[name] = (dev_name, attr, error) self.progBar.set_loading_error(dev) self.num += 1 self.progBar.setValue(self.num) if self.num == self.count: self.tango_loading_completed_signal.emit() def tango_writing_completed(self): if self.num == self.count: msgBox = QMessageBox() if not self.error_list: msgBox.setText("Sending completed successfully.") else: detail_txt = self._create_tango_error_text( "Next variables don't sending:") msgBox.setText("Sending completed with errors.") msgBox.setDetailedText(detail_txt) msgBox.exec() def _create_tango_error_text(self, text): error_msg = text for name, inf in self.error_list.items(): dev_name, dev_attr, error = inf error_msg += ("\n• Variable name: %s\n Device name: %s" % (name, dev_name) + "\n Attribute name: %s\n Reason: %s\n" % (dev_attr, error)) return error_msg def canel_write_to_tango(self): print("stop!") #self.tango_applier.stop_save_snapshot() def stop_tango_snapshot_saving(self): self.progBar.setValue(self.count) self.num = 0 self.count = 0
class Loading(QObject): """docstring for Loading""" def __init__(self, loading_list=None, tango_applier=None, progBar=None): super(Loading, self).__init__() self.progBar = progBar self.loading_list = loading_list self.tango_applier = tango_applier self.num = 0 self.count = 0 #self.tango_applier.begin_writing_signal.connect(self.begin_writing) #self.tango_applier.end_writing_signal.connect(self.end_writing) #self.progBar. #self.progBar.forceShow() reading_tango_completed_signal = pyqtSignal(dict) def start_read_from_tango(self, loading_list): self.tango_applier = TangoApplier() self.num = 0 self.count = len(loading_list) self.progBar = ProgressDialog(loading_list) self.progBar.accepted.connect(self.canel_write_to_tango) #self.progBar.stopButton.clicked.connect(self.stop_ta) self.progBar.show() self.progBar.setValue(0) self.tango_applier.begin_writing_signal.connect( self.begin_tango_dev_writing) self.tango_applier.end_writing_signal.connect( self.end_tango_dev_writing) self.tango_applier.stop_load_snapshot_signal.connect( self.stop_tango_snapshot_loading) self.tango_applier.error_signal.connect(self.tango_error) self.tango_applier.read_completed_signal.connect( self.reading_tango_completed) self.error_list = {} self.reverse_loading_list = {} for name, dev in loading_list.items(): self.reverse_loading_list[dev] = name self.tango_applier.load_snapshot(loading_list) def stop_tango_snapshot_loading(self): self.progBar.setValue(self.count) self.num = 0 self.count = 0 def reading_tango_completed(self, value_list): if self.num == self.count: msgBox = QMessageBox() if not self.error_list: msgBox.setText("Loading completed successfully.") else: detail_txt = self._create_tango_error_text( "Next variables don't sending:") msgBox.setText("Loading completed with errors.") msgBox.setDetailedText(detail_txt) msgBox.exec() self.reading_tango_completed_signal.emit(value_list) def start_write_to_tango(self, loading_list): self.tango_applier = TangoApplier() self.num = 0 self.count = len(loading_list) self.progBar = ProgressDialog(loading_list) self.progBar.accepted.connect(self.canel_write_to_tango) self.progBar.show() self.progBar.setValue(0) self.tango_applier.begin_writing_signal.connect( self.begin_tango_dev_writing) self.tango_applier.end_writing_signal.connect( self.end_tango_dev_writing) self.tango_applier.stop_save_snapshot_signal.connect( self.stop_tango_snapshot_saving) self.tango_applier.error_signal.connect(self.tango_error) self.tango_applier.writing_completed_signal.connect( self.tango_writing_completed) self.error_list = {} self.reverse_loading_list = {} for name, dev in loading_list.items(): self.reverse_loading_list[dev] = name self.tango_applier.save_snapshot(loading_list) def begin_tango_dev_writing(self, dev): print(dev) self.progBar.set_loading_item(dev) def end_tango_dev_writing(self, dev): self.progBar.set_done_item(dev) self.num += 1 self.progBar.setValue(self.num) def tango_error(self, dev, error): dev_name = '/'.join(dev.split('/')[:-1]) attr = dev.split('/')[-1] name = self.reverse_loading_list[dev] self.error_list[name] = (dev_name, attr, error) self.progBar.set_loading_error(dev) self.num += 1 self.progBar.setValue(self.num) def tango_writing_completed(self): if self.num == self.count: msgBox = QMessageBox() if not self.error_list: msgBox.setText("Sending completed successfully.") else: detail_txt = self._create_tango_error_text( "Next variables don't sending:") msgBox.setText("Sending completed with errors.") msgBox.setDetailedText(detail_txt) msgBox.exec() def _create_tango_error_text(self, text): error_msg = text for name, inf in self.error_list.items(): dev_name, dev_attr, error = inf error_msg += ("\n• Variable name: %s\n Device name: %s" % (name, dev_name) + "\n Attribute name: %s\n Reason: %s\n" % (dev_attr, error)) return error_msg def canel_write_to_tango(self): print("stop!") self.tango_applier.stop_save_snapshot() def stop_tango_snapshot_saving(self): self.progBar.setValue(self.count) self.num = 0 self.count = 0