def load_file(ulog_file_path, reload=True): """ Main function to load a Ulg file and create a Flight Object return : Flight object ( and saved or not in a pkl file) """ if reload_file: # print("Reading Ulog file : " + str(ulog_file_name)) mflight = Flight() mflight.add_data_file(ulog_file_path, Device.PIXRACER, Position.PILOT) mflight.add_info("Tulipe Glider", "Razor4", None, "Paul", 94.2, "Nice Place") mflight.add_general_section() logger.info("Writing : " + name_saved_file) with open(name_saved_file, "wb") as f: pickle.dump(mflight, f) else: logger.info("Reading : " + name_saved_file) with open(name_saved_file, "rb") as f: mflight = pickle.load(f) # Print Data for debug. logger.debug(mflight) df_data = mflight.data[0].list_available_data() logger.debug(df_data) # df_data.loc[df_data['parent']=='vehicle_local_position'] mdf = mflight.get_df_by_position(Position.PILOT)[0] logger.debug(mdf)
class import_log_diaglog(QDialog): def __init__(self, parent=None): super(import_log_diaglog, self).__init__(parent) self.ui = Ui_Dialog_import_log() self.ui.setupUi(self) self.flight = None populate_combo_box(self.ui.positionComboBox, Position) populate_combo_box(self.ui.positionComboBox_2, Position) populate_combo_box(self.ui.deviceComboBox, Device) populate_combo_box(self.ui.deviceComboBox_2, Device) populate_combo_box(self.ui.deviceComboBox_video_device, VideoDevice) self.ui.positionComboBox.setCurrentIndex( self.ui.positionComboBox.findText( Position.PILOT.name)) # to have pilot as default position self.ui.deviceComboBox.setCurrentIndex( self.ui.deviceComboBox.findText( Device.PIXRACER.name)) # to have pixracer as default position #set up button self.ui.button_debug.clicked.connect(self.debug_) self.ui.button_import.clicked.connect(self.import_flight) self.ui.pushButton_import_file_log1.clicked.connect(self.browse_path) self.check_valid() #set up line edit: self.ui.gliderModelLineEdit.textChanged.connect(self.check_valid) self.imported_Flight = None def debug_(self): """Quickly populate all flied for rapid debug """ logger.debug("Populate with dummy values") file_name = "/home/fred/Ozone/paralogger/paralogger/samples/log_6_2019-11-6-13-32-36_flight_1.ulg" self.ui.label_file_log_1.setText(file_name) self.ui.gliderModelLineEdit.setText("Macpi4") self.ui.manufacturerLineEdit.setText("Exemple_gliders_ltd") self.ui.locationLineEdit.setText("niceplace") self.ui.gliderSizeLineEdit.setText("24") self.ui.pilotLineEdit.setText("Arnold") self.ui.weightKgDoubleSpinBox.setValue(95) self.ui.laboratoryLineEdit.setText("GoodLab") def update_label_status(self, str_message): self.ui.label_status.setText(str_message) QGuiApplication.processEvents() # would be better to use a progressbar def browse_path(self): filename = QFileDialog.getOpenFileName(self, 'Open pickler File', "", 'Logs Files (*.*)') if isinstance(filename, tuple): filename = filename[0] if filename: self.ui.label_file_log_1.setText(filename) def import_flight(self): """Create a Flight object, read the raw log file and add meta data . TODO mange if device != Pixracer """ self.update_label_status("Loading in progress, please wait ...") self.update() logger.debug('import flight .......') self.imported_Flight = Flight() ulog_file_path = self.ui.label_file_log_1.text() ulog_device = self.ui.deviceComboBox.currentData() ulog_position = self.ui.positionComboBox.currentData() glider_name = self.ui.gliderModelLineEdit.text() manufacturer_name = self.ui.manufacturerLineEdit.text() modif = self.ui.gliderModifLineEdit.text() location = self.ui.locationLineEdit.text() size = self.ui.gliderSizeLineEdit.text() pilot = self.ui.pilotLineEdit.text() weight = self.ui.weightKgDoubleSpinBox.value() lab = self.ui.laboratoryLineEdit.text() self.imported_Flight.add_data_file(ulog_file_path, ulog_device, ulog_position) self.imported_Flight.add_info(manufacturer_name, glider_name, size, modif, pilot, weight, location, lab) self.imported_Flight.add_general_section() logger.debug("close import dialog") self.close() def check_valid(self): """Check if the required field and ok to enble the import. """ check_list = [] item_to_check = [self.ui.gliderModelLineEdit, self.ui.label_file_log_1] for item in item_to_check: check_list.append(len(item.text()) < 1) if not any(check_list): self.ui.button_import.setEnabled(True) self.ui.label_status.setText("Field with * are mandatory (OK)") else: self.ui.button_import.setEnabled(False)