Beispiel #1
0
    def save_history(self):
        filename = get_save_file_name(get_main_window(), 'Save History', self.last_filename)

        if len(filename) == 0:
            return

        self.last_filename = filename

        try:
            f = open(filename, 'w')
        except OSError as e:
            QMessageBox.critical(get_main_window(), 'Save History Error',
                                 'Could not open {0} for writing:\n\n{1}'.format(filename, e))
            return

        root = self.tree_frames.invisibleRootItem()
        content = ['Frame Type;Identifier [Hex];Data [Hex];Length\n']

        for i in range(root.childCount()):
            child = root.child(i)
            row = []

            for c in range(child.columnCount()):
                row.append(child.text(c))

            content.append(';'.join(row) + '\n')

        try:
            # FIXME: add progress dialog if content is bigger than some megabytes
            f.write(''.join(content))
        except Exception as e:
            QMessageBox.critical(get_main_window(), 'Save History Error',
                                 'Could not write to {0}:\n\n{1}'.format(filename, e))

        f.close()
    def save_log(self):
        log = self.logs[self.combo_log.currentIndex()]
        content = log.content
        filename = get_save_file_name(get_main_window(), 'Save System Log',
                                      log.last_filename)

        if len(filename) == 0:
            return

        log.last_filename = filename

        try:
            f = open(filename, 'wb')
        except Exception as e:
            QMessageBox.critical(
                get_main_window(), 'Save System Log Error',
                u'Could not open {0} for writing:\n\n{1}'.format(filename, e))
            return

        try:
            # FIXME: add progress dialog if content is bigger than some megabytes
            f.write(content.encode('utf-8'))
        except Exception as e:
            QMessageBox.critical(
                get_main_window(), 'Save System Log Error',
                u'Could not write to {0}:\n\n{1}'.format(filename, e))

        f.close()
Beispiel #3
0
    def save_content(self):
        filename = get_save_file_name(get_main_window(), 'Save Log',
                                      self.last_filename, 'Log(*.log)')

        if len(filename) == 0:
            return

        self.last_filename = filename

        try:
            f = open(filename, 'w')
        except Exception as e:
            QMessageBox.critical(
                get_main_window(), 'Save Log Error',
                'Could not open {0} for writing:\n\n{1}'.format(filename, e))
            return

        try:
            # FIXME: add progress dialog if content is bigger than some megabytes
            f.write(self.content)
        except Exception as e:
            QMessageBox.critical(
                get_main_window(), 'Save Log Error',
                'Could not write to {0}:\n\n{1}'.format(filename, e))

        f.close()
Beispiel #4
0
    def save_report_to_csv_file(self):
        date = datetime.now().replace(microsecond=0).isoformat().replace(
            'T', '_').replace(':', '-')
        filename = get_save_file_name(
            self, 'Save Report To CSV File',
            os.path.join(get_home_path(),
                         'brickv_health_report_{0}.csv'.format(date)))

        if len(filename) == 0:
            return

        c = 0
        header = []

        while True:
            item = self.tree_view_model.horizontalHeaderItem(c)

            if item == None:
                break

            header.append(item.text())

            c += 1

        rows = [header] + self.collect_metric_values()

        try:
            with open(filename, 'w', newline='') as f:
                csv.writer(f).writerows(rows)
        except Exception as e:
            QMessageBox.critical(
                self, 'Save Report To CSV File',
                'Could not save report to CSV file:\n\n' + str(e),
                QMessageBox.Ok)
Beispiel #5
0
    def btn_browse_log_file_name_clicked(self):
        if len(self.edit_log_file_name.text()) > 0:
            last_dir = os.path.dirname(os.path.realpath(self.edit_log_file_name.text()))
        else:
            last_dir = get_home_path()

        filename = get_save_file_name(self, 'Choose Log File',
                                      last_dir, "Log Files (*.log)")

        if len(filename) > 0:
            if not filename.lower().endswith('.log'):
                filename += '.log'

            self.edit_log_file_name.setText(filename)
Beispiel #6
0
    def btn_browse_csv_file_name_clicked(self):
        if len(self.edit_csv_file_name.text()) > 0:
            last_dir = os.path.dirname(os.path.realpath(self.edit_csv_file_name.text()))
        else:
            last_dir = get_home_path()

        filename = get_save_file_name(get_main_window(), 'Choose CSV File',
                                      last_dir, "CSV Files (*.csv)")

        if len(filename) > 0:
            if not filename.lower().endswith('.csv'):
                filename += '.csv'

            self.edit_csv_file_name.setText(filename)
Beispiel #7
0
    def btn_save_config_clicked(self):
        filename = get_save_file_name(self, 'Save Config',
                                      get_home_path(), 'JSON Files(*.json)')

        if len(filename) == 0:
            return

        if not filename.lower().endswith('.json'):
            filename += '.json'

        config = GuiConfigHandler.create_config(self)

        if not save_config(config, filename):
            QMessageBox.warning(self, 'Save Config',
                                'Could not save config to file! See Debug tab for details.',
                                QMessageBox.Ok)
Beispiel #8
0
    def save():
        date = datetime.datetime.now().replace(
            microsecond=0).isoformat().replace('T', '_').replace(':', '-')
        filename = get_save_file_name(
            window, 'Save Report To File',
            os.path.join(get_home_path(),
                         'brickv_error_report_{}.txt'.format(date)))

        if len(filename) == 0:
            return

        try:
            with open(filename, 'w') as f:
                f.write(error_message)
        except Exception as e:
            QMessageBox.critical(window, 'Save Report To File',
                                 'Could not save report to file:\n\n' + str(e),
                                 QMessageBox.Ok)
Beispiel #9
0
    def export_archive(self):
        #FIXME: fromTime_t is obsolete: https://doc.qt.io/qt-5/qdatetime-obsolete.html#toTime_t
        timestamp   = QDateTime.fromTime_t(int(time.time())).toString('yyyyMMdd-HHmmss')
        target_path = os.path.join(self.last_directory, 'red-brick-export-{0}.tfrba'.format(timestamp))
        target_path = get_save_file_name(get_main_window(), 'Save Archive', target_path, 'Tinkerforge RED-Brick Archive(*.tfrba)')

        if len(target_path) == 0:
            return

        self.last_directory = os.path.split(target_path)[0]
        script_instance_ref = [None]

        def progress_canceled():
            script_instance = script_instance_ref[0]

            if script_instance != None:
                self.script_manager.abort_script(script_instance)

            chunked_downloader = self.chunked_downloader

            if chunked_downloader != None:
                chunked_downloader.canceled = True

        self.progress = ExpandingProgressDialog(self)
        self.progress.set_progress_text_visible(False)
        self.progress.setModal(True)
        self.progress.setWindowTitle('Export Archive')
        self.progress.setLabelText('Step 1 of 2: Archiving selected programs')
        self.progress.setRange(0, 0)
        self.progress.setAutoClose(False)
        self.progress.canceled.connect(progress_canceled)
        self.progress.show()

        selected_identifiers = []

        for selected_item in self.tree_programs.selectedItems():
            selected_identifiers.append(selected_item.text(1))

        def cb_export(result):
            script_instance = script_instance_ref[0]

            if script_instance != None:
                aborted = script_instance.abort
            else:
                aborted = False

            script_instance_ref[0] = None

            if aborted:
                return

            if not report_script_result(result, 'Export Error', 'Could not archive selected programs',
                                        before_message_box=self.progress.close):
                return

            # step 2/2: download created archive
            source_path             = posixpath.join(result.stdout.strip(), 'archive.tfrba')
            self.chunked_downloader = ChunkedDownloader(self)

            if not self.chunked_downloader.prepare(source_path):
                return

            self.progress.setLabelText('Step 2 of 2: Downloading archive')
            self.progress.set_progress_text_visible(True)
            self.chunked_downloader.start(target_path)

        # step 1/2: run export script to create archive
        script_instance_ref[0] = self.script_manager.execute_script('export', cb_export, selected_identifiers)