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
Example #2
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