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()
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()
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)
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)
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)
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)
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)
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)