def _add_qc0_to_merge(self): try: self.main_app.update_help_information( 'Adding QC0 information to merge file...', bg='red') manage = tavastland.ManageTavastlandFiles(self._get_qc_directory()) manage.add_qc0_info_to_nodc_column_file() self.main_app.update_help_information( 'QC0 information added to merge file!', bg='green') except Exception as e: main_gui.show_internal_error(e)
def _add_qc_columns(self): try: self.main_app.update_help_information( 'Adding QC columns to file...', bg='red') manage = tavastland.ManageTavastlandFiles(self._get_qc_directory()) manage.add_nodc_qc_columns() self.main_app.update_help_information('QC columns added!', bg='green') except Exception as e: main_gui.show_internal_error(e)
def _create_qc0_file(self): try: self.main_app.update_help_information('Creating QC0 file...', bg='red') manage = tavastland.ManageTavastlandFiles(self._get_qc_directory()) manage.create_qc0_file() self.main_app.update_help_information('QC0 file created!', bg='green') except Exception as e: main_gui.show_internal_error(e)
def _inspect_files(self): """ Create tavastland.FileHandler and loads import directories. Fills the table with information. :return: """ try: mit_directory = self.directory_widget_mit.get_directory() co2_directory = self.directory_widget_co2.get_directory() if not all([ mit_directory, co2_directory, os.path.exists(mit_directory), os.path.exists(co2_directory) ]): main_gui.show_information('Invalid directories', 'Please check inport directories!') return self.main_app.update_help_information( 'Inspecting MIT and CO2 files. Please wait...', bg='red') # Initiate handler try: self.handler = tavastland.FileHandler( mit_directory=mit_directory, co2_directory=co2_directory, log_info=dict(name='gismo_gui')) except tavastland.TavastlandException as e: self.logger.debug('Tavastland error: {}'.format(e.message)) main_gui.show_information('Tavastland error', e.message) self.main_app.update_help_information( 'Could not inspect files!') else: self.table_widget_mit.reset_table() self.table_widget_co2.reset_table() # Update tables mit_data, mit_error_data = self._get_table_data_from_df( self.handler.dfs['mit'], 'mit') self.table_widget_mit.set_table(mit_data) co2_data, co2_error_data = self._get_table_data_from_df( self.handler.dfs['co2'], 'co2') self.table_widget_co2.set_table(co2_data) self.main_app.update_help_information( 'MIT and/or CO2 files have been updated') error_data = mit_error_data + co2_error_data self.table_widget_err.set_table(error_data) # Update time widgets from_time, to_time = self.handler.get_min_and_max_time() now = datetime.datetime.now() if to_time > now: to_time = now self.time_widget_start.set_valid_time_span(from_time, to_time) self.time_widget_end.set_valid_time_span(from_time, to_time) main_gui.communicate.sync_user_and_time_widgets( user_sub_object=self.user.tavastland, time_widget_start=self.time_widget_start, time_widget_end=self.time_widget_end, source='user') self._toggle_use_time_span() except Exception as e: main_gui.show_internal_error(e)
def _export_data(self): directory = self.directory_widget_save_merge.get_value() if not directory: try: gui.show_information( 'Missing input', 'Missing export directory. ' 'Export canceled!') except: main_gui.show_information( 'Missing input', 'Missing export directory. ' 'Export canceled!') return try: # file_path = self.handler.save_merge_data(directory=directory, co2_types=selected_types) # changed method name? @Johannes # file_path = self.handler._save_merge_data(directory=directory, co2_types=selected_types) # directory = self.directory_widget_save_merge.get_value() if not directory: main_gui.show_information( 'Missing input', 'Missing export directory. Export canceled!') return self.main_app.update_help_information( 'Exporting merge data. Please wait...', bg='red') # Save data deselected_types = self.handler.exclude_co2_types[:] all_types = self.handler.get_types_in_merge_data() selected_types = [''] + [ t for t in all_types if t not in deselected_types ] try: try: save_directory = self.handler.save_data( directory=directory, co2_types=selected_types) except FileExistsError: if not messagebox.askyesno( 'Save merge data', 'Merge data already exist. Do you want to overwrite files?' ): return save_directory = self.handler.save_data( directory=directory, co2_types=selected_types, overwrite=True) self.user.tavastland.set('deselected_types', deselected_types) self.main_app.update_help_information('Export done!', bg='green') self.directory_widget_qc.set_value(self.handler.save_dir) except PermissionError as e: main_gui.show_error('PermissionError', e) else: main_gui.show_information( 'Export data', f'Merged data has been exported:\n{save_directory}') except Exception as e: main_gui.show_internal_error(e)
def _merge_data(self): """ Merge data and export. :return: """ try: source = self.use_widget.get_value() if 'time' in source: time_start = self.time_widget_start.get_time_object() time_end = self.time_widget_end.get_time_object() # Have to add the day as well time_end = time_end + datetime.timedelta( days=1) - datetime.timedelta(seconds=1) if not all([time_start, time_end]): main_gui.show_information( 'Missing input', 'You have not made all required options to merge data. ' 'Merge canceled!') return # Check time span selected_time_delta = time_end - time_start nr_days = self.user_manager.get_default_user_settings( 'tavastland', 'alert_t_delta_days') if not nr_days: nr_days = 60 if selected_time_delta.days > self.user.tavastland.setdefault( 'alert_t_delta_days', nr_days): if not messagebox.askyesno( 'Time span warning!', 'Your selected time is {} days. ' 'This might take som time to merge. ' 'Do you want to continue?'.format( selected_time_delta.days)): self.main_app.update_help_information( 'Merge canceled by user do to long time span.') return # Set time range to work with self.handler.set_time_range(time_start=time_start, time_end=time_end) elif 'month' in source: year, month = self.month_widget.get() # year and month as int time_start = datetime.datetime(year, month, 1) time_end = datetime.datetime(year, month + 1, 1) - datetime.timedelta(seconds=1) # Set time range to work with self.handler.set_time_range(time_start=time_start, time_end=time_end) time_delta_seconds = self.time_widget_tolerance.get_value() if not all([time_delta_seconds]): main_gui.show_information( 'Missing input', 'You have not made all required options to merge data. ' 'Merge canceled!') return self.main_app.update_help_information( 'Merging data. Please wait...', bg='red') # Set timedelta self.handler.set_time_delta(seconds=int(time_delta_seconds)) # Load data within time range try: self.handler.load_data() except tavastland.TavastlandExceptionNoCO2data: self.logger.debug('No CO2 data matches the given time!') try: gui.show_information( 'No match', 'No CO2 data matches the given time!') except: main_gui.show_information( 'No match', 'No CO2 data matches the given time!') self.main_app.update_help_information('No co2 data found!') return # Merge data self.handler.merge_data() # Calculate pCO2 self.handler.calculate_pCO2() all_types = self.handler.get_types_in_merge_data() exclude_types = self.handler.exclude_co2_types include_types = [t for t in all_types if t not in exclude_types] self.stringvar_exclude_types.set(exclude_types) self.stringvar_include_types.set(include_types) self._enable_and_disable() except tavastland.TavastlandExceptionNoMatchWhenMerging as e: self.main_app.update_help_information( 'No match between mit and co2 files!') main_gui.show_error('No match!', e.message) except tavastland.TavastlandException as e: self.main_app.update_help_information('Merge failed!') main_gui.show_error('Could not merge data!', e.message) except Exception as e: main_gui.show_internal_error(e) # self.main_app.update_help_information('Merge failed!') # main_gui.show_error('Internal Error!', e) # raise else: self.main_app.update_help_information('Merge done!', bg='green') finally: self._save_time_to_user()
def _load_file(self): def load_file(data_file_path, **kwargs): self.main_app.update_help_information('') self.button_load_file.configure(state='disabled') settings_file = self.combobox_widget_settings_file.get_value() sampling_type = self.combobox_widget_sampling_type.get_value() self.session.load_file( sampling_type=sampling_type, data_file_path=data_file_path, settings_file=settings_file, # settings_file_path=settings_file_path, reload=False, root_directory=self.root_directory, **kwargs) # self.reset_help_information() data_file_path = self.stringvar_data_file.get() settings_file = self.combobox_widget_settings_file.get_value() settings_file_path = self.settings_files.get_path(settings_file) # sampling_type = self.combobox_widget_sampling_type.get_value() if not all([data_file_path, settings_file_path]): self.main_app.update_help_information('No file selected!', fg='red') return data_file_path = self.stringvar_data_file.get() if ';' in data_file_path: data_file_list = [] directory = None for k, file_name in enumerate(data_file_path.split(';')): file_name = file_name.strip() if k == 0: directory = os.path.dirname(file_name) data_file_list.append(file_name) else: data_file_list.append(os.path.join(directory, file_name)) else: data_file_list = [data_file_path] for file_path in data_file_list: # Load file try: load_file(file_path) # self.run_progress(load_file, message='Loading file...please wait...') except GISMOExceptionMissingPath as e: self.logger.debug(e) main_gui.show_information( 'Invalid path', 'The path "{}" given in i settings file "{} can not be found' .format(e.message, settings_file_path)) self.main_app.update_help_information( 'Please try again with a different settings file.') except GISMOExceptionMissingInputArgument as e: self.logger.debug(e) if 'depth' in e.message: platform_depth = self.entry_widget_platform_depth.get_value( ) if not platform_depth: main_gui.show_information( 'No depth found!', 'You need to provide platform depth for this sampling type!' ) return load_file(file_path, depth=platform_depth) except GISMOExceptionInvalidParameter as e: self.logger.debug(e) main_gui.show_information( 'Invalid parameter', f'Could not find parameter {e}. Settings file might have wrong information.' ) return except GISMOExceptionQCfieldError: main_gui.show_error( 'QC field error', f'Something is wrong with the qf columns in file: {file_path}' ) return except Exception as e: self.logger.debug(e) main_gui.show_internal_error(e) return self.stringvar_data_file.set('') self._update_loaded_files_widget() self.update_all() self.button_load_file.configure(state='normal') self.main_app.update_help_information('File loaded! Please continue.', bg='green')