Exemple #1
0
 def __init__(self, parent, schema):
     QWidget.__init__(self, parent)
     self.parent = parent
     self.ui = Ui()
     self.ui.setupUi(self)
     self.api = ApiOS()
     self.schema = schema
     self.set_list_files()
Exemple #2
0
    def __init__(self, parent, schema, index, type_data=1):
        QWidget.__init__(self, parent)
        self.parent = parent
        self.ui = Ui()
        self.ui.setupUi(self)
        self.api = ApiOS()
        self.schema = schema
        self.type_data = type_data

        self.set_data(index)
Exemple #3
0
class DataviewMaster(QDataviewMaster):
    def __init__(self, parent, schema, index, type_data=1):
        QWidget.__init__(self, parent)
        self.parent = parent
        self.ui = Ui()
        self.ui.setupUi(self)
        self.api = ApiOS()
        self.schema = schema
        self.type_data = type_data

        self.set_data(index)

    def __del__(self):
        self.ui = None

    # List Files ---------------------------------

    def set_data(self, index):
        try:
            self.ui.title.setText(self.schema["data"][index]["path"])
            self.ui.table.clear()
            self.ui.table.setColumnCount(2)
            self.ui.table.setRowCount(0)
            self.ui.table.setHorizontalHeaderLabels(["X", "Y"])

            data = []

            if self.type_data == 1:
                data = self.schema["data"][index]["input_data"]
            else:
                data = self.schema["data"][index]["output_data"]

            self.ui.table.setRowCount(len(data))

            i = 0
            for item in data:
                if self.type_data == 1:
                    self.ui.table.setItem(i, 0, QTableWidgetItem(str(item[0])))
                    self.ui.table.setItem(i, 1, QTableWidgetItem(str(item[1])))
                else:
                    self.ui.table.setItem(
                        i, 0, QTableWidgetItem(str(item["point"][0])))
                    self.ui.table.setItem(
                        i, 1, QTableWidgetItem(str(item["point"][1])))
                i += 1
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось отобразить данные")
Exemple #4
0
class VisualizationMaster(QVisualizationMaster):
    def __init__(self, parent, schema):
        QWidget.__init__(self, parent)
        self.parent = parent
        self.ui = Ui()
        self.ui.setupUi(self)

        self.api = ApiOS()
        self.schema = schema
        self.set_list_files()

    def __del__(self):
        self.ui = None

    def select_file(self, index):
        try:
            if index < 0:
                return
            self.draw_graph(self.ui.input_graph, self.schema["data"][index])
            self.draw_graph(self.ui.output_graph,
                            self.schema["data"][index],
                            type_data="output")
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось построить графики")

    def draw_graph(self, control, data, type_data="input"):
        count = control.count()
        for i in range(0, count):
            control.removeWidget(control.widget(0))

            control.addWidget(
                plot_creater.create_plot(data,
                                         type_graph="one",
                                         type_data=type_data))

    def set_list_files(self):
        data_sources = [("[%s] %s" % (item["code"], item["path"]))
                        for item in self.schema["data"]]

        self.ui.list_files.clear()
        self.ui.list_files.addItems(data_sources)
def push(schema, path_to_dir):
    """
    Пакетный экспорт данных в указанную папку
    :param schema: Данные для экспорта
    :param path_to_dir: Путь к папке
    :return: None
    """
    try:
        res = get_outputs(schema, path_to_dir)
        write_output(res)
    except Exception as err:
        ApiOS().send_system_message("Ошибка", "Ошибка при записи данных")
def write_output(outputs):
    """
    Запись списка данных в файлы
    :param outputs: Набор данные:путь к файлу
    :return: None
    """
    try:
        for item in outputs:
            file = open(item["path"], "w")
            for row in item["data"]:
                file.write("%s,%s\n" % (row["point"][0], row["point"][1]))
            file.close()
    except Exception as err:
        ApiOS().send_system_message("Ошибка", "Ошибка при записи данных")
Exemple #7
0
class ImportDataMaster(QImportMaster):
    def __init__(self, parent, schema):
        QWidget.__init__(self, parent)
        self.parent = parent
        self.ui = Ui()
        self.ui.setupUi(self)
        self.api = ApiOS()
        self.schema = schema
        self.set_list_files()

    def __del__(self):
        self.ui = None

    # List Files ----------------------------

    def set_list_files(self):
        """
        Установка списка файлов с контейнер списка файлов
        :return:
        """
        try:
            data_sources = [("[%s] %s" % (item["code"], item["path"]))
                            for item in self.schema["data"]]
            self.ui.list_files.clear()
            self.ui.list_files.addItems(data_sources)
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Неудалось отобразить список файлов")

    def add_list_items(self, items):
        """
        Добавление списка файлов в контейнер импортиркемых файлов
        :param items: Список файлов
        :return:
        """
        try:
            for item in items:
                try:
                    self.schema["data"].append({
                        "code":
                        self.schema["index"],
                        "path":
                        item,
                        "input_data":
                        sorted(self.read_file(item), key=lambda x: x[0]),
                        "output_data": []
                    })
                    self.schema["index"] += 1
                except Exception as err:
                    self.api.send_system_message(
                        u"Ошибка при импорте",
                        u"Файл '%s' содержит неверный формат данных, и не был импортирован"
                        % item)

            self.set_list_files()
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Неудалось добавить новые файлы")

    def select_current_file(self, index):
        """
        Событиее выбора файла из списка, для предпросмотра данных файла
        :param index: Номер файла в списке
        :return:
        """
        try:
            self.ui.table_preview.clear()
            self.ui.table_preview.setRowCount(0)
            self.ui.table_preview.setHorizontalHeaderLabels(["X", "Y"])

            if type(index) != int:
                index = self.ui.list_files.currentRow()

            if index < 0:
                return

            self.ui.table_preview.setRowCount(
                len(self.schema["data"][index]["input_data"]))

            i = 0
            for item in self.schema["data"][index]["input_data"]:
                self.ui.table_preview.setItem(i, 0,
                                              QTableWidgetItem(str(item[0])))
                self.ui.table_preview.setItem(i, 1,
                                              QTableWidgetItem(str(item[1])))
                i += 1
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось отобразить данные")

    def delete_all_files(self):
        """
        Удаление всех файлов из списка импортируемых файлов
        :return:
        """
        try:
            result = self.api.show_variants(u"Удалить все файлы?")

            if result == QMessageBox.Yes:
                self.schema["data"] = []
                self.set_list_files()
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Неудалось удалить все файлы")

    def delete_current_file(self):
        """
        Удаление выбранного файла
        :return:
        """
        try:
            current_index = self.ui.list_files.currentRow()
            if current_index > -1:
                result = self.api.show_variants_to_delete_node()
                if result == QMessageBox.Yes:
                    self.schema["data"].pop(current_index)
                    self.set_list_files()
            else:
                self.api.send_system_message("Предупреждение",
                                             "Файл не выбран")
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Неудалось удалить выбранный файл")

    # Import data ---------------------------

    def add_file_dialog(self):
        try:
            paths = self.api.show_open_data_dialog(self)
            if paths and len(paths[0]) > 0:
                paths = set(paths[0])

                exist_files = [x["path"] for x in self.schema["data"]]
                exist_files = set(exist_files)

                paths.difference_update(exist_files)
                self.add_list_items(paths)

                return paths

        except Exception as err:
            self.api.send_system_message("Ошибка", "Неудалось загрузить файлы")
        return []

    def check_files(self):
        try:
            self.parent.schema = self.schema
            self.parent.set_list_files(self.parent.ui.list_files)
            self.parent.set_list_files(self.parent.ui.output_files,
                                       type_files="output")
            self.parent.reset_chart()

            self.api.send_system_message(u"Импорт",
                                         u"Данные успешно зафиксированны")

        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Неудалось зафиксировать данные")

    def read_file(self, path):
        array = []

        try:
            with open(path, 'r') as fp:
                reader = csv.reader(fp, delimiter=',', quotechar='"')
                for row in reader:
                    array.append([float(cell) for cell in row])
        except Exception as err:
            self.api.send_system_message(
                "Ошибка", "Неудалось прочитать данные из файла '%s',"
                "данные могли иметь не вервый формат" % path)

        return array
Exemple #8
0
 def __init__(self, parent=None):
     QMainWindow.__init__(self, parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.api = ApiOS()
Exemple #9
0
class MainWindow(QMainWindow):
    schema = {"data": [], "index": 0}

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.api = ApiOS()

    def __del__(self):
        self.ui = None

    # List files -----------------------------

    def set_list_files(self, element, type_files="input"):
        data_sources = []

        try:
            if type_files == "input":
                data_sources = [("[%s] %s" % (item["code"], item["path"]))
                                for item in self.schema["data"]]
            elif type_files == "output":
                for item in self.schema["data"]:
                    if item["output_data"] and (len(item["output_data"]) > 0):
                        data_sources.append("OUT [%s] %s" %
                                            (item["code"], item["path"]))

            element.clear()
            element.addItems(data_sources)
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось добавить список файлов")

    def select_file(self, index):
        """
        Событие выбора файла для предпосмотра данных
        :param index: Номер выбранного файла
        :return:
        """
        try:
            if type(index) != int:
                index = self.ui.list_files.currentRow()

            if index < 0:
                return
            self.draw_graph(self.schema["data"][index])
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось отобразить данные")

    # Masters --------------------------------

    def open_import_master(self):
        """
        Запуск мастера импорта
        :return:
        """
        try:
            modal = ImportDataMaster(parent=self, schema=self.schema)
            modal.setWindowModality(Qt.ApplicationModal)
            modal.show()
        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось открыть мастер импорта")

    def open_export_master(self):
        """
        Запуск мастера экспорта
        :return:
        """
        try:
            if self.ui.output_files.count() <= 0:
                self.api.send_system_message(
                    u"Предупреждение", u"Отсутствуют данные для экспорта")
            else:
                path = self.api.show_open_dir_dialog(self)
                if not path or (path == ""):
                    return
                master_export.push(self.schema, path)

                self.api.send_system_message(
                    u"Экспорт",
                    u"Данные были успешно записанны в директорию: '%s'" % path)

        except Exception as err:
            self.api.send_system_message("Ошибка",
                                         "Не удалось открыть мастер экспорта")

    def open_visualization_master(self):
        """
        Запуск мастера визуализации данных
        :return:
        """
        try:
            modal = VisualizationMaster(parent=self, schema=self.schema)
            modal.setWindowModality(Qt.ApplicationModal)
            modal.show()
        except Exception as err:
            self.api.send_system_message(
                "Ошибка", "Не удалось открыть мастер отображения данных")

    def open_conversion_master(self):
        """
        Запуск мастера преобразования данных
        :return:
        """
        try:
            modal = ConversionMaster(parent=self, schema=self.schema)
            modal.setWindowModality(Qt.ApplicationModal)
            modal.show()
        except Exception as err:
            self.api.send_system_message(
                "Ошибка", "Не удалось открыть мастер преобразования данных")

    def open_dataview_output_master(self):
        """
        Запуск мастера просмотра выходных данных
        :return:
        """
        try:
            index = self.ui.output_files.currentRow()
            if index >= 0:
                modal = DataviewMaster(parent=self,
                                       schema=self.schema,
                                       index=index,
                                       type_data=0)
                modal.setWindowModality(Qt.ApplicationModal)
                modal.show()
            else:
                self.api.send_system_message("Предупреждение",
                                             "Необходимо выбрать файл")
        except Exception as err:
            self.api.send_system_message(
                "Ошибка",
                "Не удалось открыть мастер просмотра выходных данных")

    def open_dataview_input_master(self):
        """
        Запуск мастера просмотра входных данных
        :return:
        """
        try:
            index = self.ui.list_files.currentRow()
            if index >= 0:
                modal = DataviewMaster(parent=self,
                                       schema=self.schema,
                                       index=index,
                                       type_data=1)
                modal.setWindowModality(Qt.ApplicationModal)
                modal.show()
            else:
                self.api.send_system_message("Предупреждение",
                                             "Необходимо выбрать файл")

        except Exception as err:
            self.api.send_system_message(
                "Ошибка", "Не удалось открыть мастер просмотра входных данных")

    # Graphic --------------------------------

    def draw_graph(self, data):
        """
        Отрисовка графика предпросмотра
        :param data: Набор точек
        :return:
        """
        self.reset_chart()

        self.ui.graph_widget.addWidget(plot_creater.create_plot(data))

    def reset_chart(self):
        """
        Очистка графика
        :return:
        """
        count = self.ui.graph_widget.count()
        for i in range(0, count):
            self.ui.graph_widget.removeWidget(self.ui.graph_widget.widget(0))
Exemple #10
0
class ConversionMaster(QConversionMaster):
    def __init__(self, parent, schema):
        QWidget.__init__(self, parent)
        self.parent = parent
        self.ui = Ui()
        self.ui.setupUi(self)
        self.api = ApiOS()
        self.schema = schema
        self.set_list_files()

    def __del__(self):
        self.ui = None

    # List Files ---------------------------------

    def set_list_files(self):
        data_sources = []
        try:
            data_sources = [("[%s] %s" % (item["code"], item["path"])) for item in self.schema["data"]]

            self.ui.list_files.clear()
            self.ui.list_files.addItems(data_sources)
        except Exception as err:
            self.api.send_system_message("Ошибка", "Не удалось добавить список файлов")

    def run(self):
        count = len(self.schema["data"])
        beta = 0.0
        width = 0.0
        try:
            beta = float(str(self.ui.tb_beta.text()).replace(",", "."))
            width = float(str(self.ui.tb_with.text()).replace(",", "."))
        except Exception as err:
            self.api.send_system_message("Ошибка", "Неверный формат данных")
            return

        for index in range(0, count):
            threading.Thread(target=self.f, args=(index, count, beta, width)).run()

    def f(self, index, count, beta, width):
        try:
            k = (float(index) + 1.0) / float(count) * 100.0
            self.schema["data"][index]["output_data"] = \
                peak_detection.detect_peaks(self.schema["data"][index]["input_data"], beta, width)

            self.ui.progress.setValue(k)
            if k == 100:
                self.api.send_system_message("Выполнено", "Преобразование выполнено")

            self.set_list_files()
            QApplication.processEvents()
        except Exception as err:
            self.api.send_system_message("Ошибка", "Не удалось преобразовать данные")

    def apply(self):
        try:
            self.parent.schema = self.schema
            self.parent.set_list_files(self.parent.ui.list_files)
            self.parent.set_list_files(self.parent.ui.output_files, type_files="output")
            self.parent.reset_chart()
            self.api.send_system_message("Выполнено", "Данные сохранены")

        except:
            pass

    def select_file(self, index):
        try:
            if index < 0:
                return

            self.draw_graph(self.schema["data"][index])
        except Exception as err:
            self.api.send_system_message("Ошибка", "Не удалось отобразить данные")

    def draw_graph(self, data):
        """
        Отрисовка графика предпросмотра
        :param data: Набор точек
        :return:
        """
        self.reset_chart()

        self.ui.graph_widget.addWidget(plot_creater.create_plot(data, type_data="output"))

    def reset_chart(self):
        """
        Очистка графика
        :return:
        """
        count = self.ui.graph_widget.count()
        for i in range(0, count):
            self.ui.graph_widget.removeWidget(self.ui.graph_widget.widget(0))