def __init__(self, parent=None): super().__init__(parent) # attributes self.setupUi(self) # ------- SITE DIALOG CONSTRUCTOR ARGS ----- # self.facade = face.Facade() self.dsite = SiteDialog() # Actions self.actionSiteTable.triggered.connect(self.site_display) # Custom Signals self.dsite.site_unlocks.connect(self.site_complete_enable) self.dsite.update_data # ------ SESSION DIALOG CONSTRUCTOR ARGS ----- # # Dialog boxes for user feedback self.dsession = logicsess.SessionDialog() self.error = QtGui.QErrorMessage() self.message = QtGui.QMessageBox # Custom signals self.dsession.raw_data_model.connect(self.update_data_model) # actions self.actionStart_Session.triggered.connect(self.session_display) self.mdiArea.addSubWindow(self.subwindow_2) self.mdiArea.addSubWindow(self.subwindow_1) metadf = read_csv(rootpath + end + 'data' + end + 'Cataloged_Data_Current_sorted.csv', encoding='iso-8859-11') metamodel = view.PandasTableModel( metadf[['global_id', 'lter', 'title', 'site_metadata']]) self.tblViewMeta.setModel(metamodel)
def update_data(self): changed_df = self.sitetablemodel.data(None, QtCore.Qt.UserRole) changed_site_list = changed_df['siteid'].values.tolist() self._log.debug('changed_site_list: ' + ' '.join(changed_site_list)) self._log.debug('sitelevels list: ' + ' ' + ' '.join(self.sitelevels)) if len(changed_df) == 0: pass else: try: for i, item in enumerate(changed_site_list): self.facade._data.replace( {self.sitelevels[i]: item.rstrip()}, inplace=True) except Exception as e: print(str(e)) self._log.debug(str(e)) self.error.showMessage('could not alter levels: ' + str(e)) session = orm.Session() sitecheck = session.query(orm.Climatesite).order_by( orm.Climatesite.stationid).filter( orm.Climatesite.lterid == self.facade._valueregister['lterid']) session.close() sitecheckdf = read_sql(sitecheck.statement, sitecheck.session.bind) print('checker df: ', sitecheckdf) if sitecheckdf is not None: if len(sitecheckdf) == 0: checker = True else: records_entered = sitecheckdf['siteid'].values.tolist() check = [ x for x in list(set(records_entered)) if x in changed_site_list ] print('check list: ', check) print('test check: ', len(check) == 0) checker = (len(check) == 0) else: checker = True print('checker status: ', checker) if checker == True: pass else: check_view = view.PandasTableModel( sitecheckdf[sitecheckdf['siteid'].isin(check)]) self.preview_validate.tabviewPreview.setModel(check_view) self.sitequerymodel = check_view self.tabviewDbSiteQuery.setModel(self.sitequerymodel) self.sitelevels = changed_site_list self.preview_validate.show()
def submit_change(self): sender = self.sender() self.widetolonglned = { 'value_columns': hlp.string_to_list(self.lnedValuecolumns.text()), 'datatype_name': self.cboxDatatypecolumn.currentText(), 'panel_data': self.ckPaneldata.isChecked() } self.widetolongini = ini.InputHandler( name='widetolong', lnedentry=self.widetolonglned) self.facade.input_register(self.widetolongini) self.facade.create_log_record('widetolong') self._log = self.facade._tablelog['widetolong'] try: if self.widetolonglned['panel_data'] is False: self.widetolongtable = hlp.wide_to_long( self.facade._data, value_columns=self.widetolonglned['value_columns'], value_column_name=self.widetolonglned['datatype_name']) else: temp = self.facade._data.copy() temp['id'] = temp.index self.widetolongtable = wide_to_long( temp, self.widetolonglned['value_columns'], i="id", j=self.widetolonglned['datatype_name']) self.widetolongtable[self.widetolonglned[ 'datatype_name']] = self.widetolongtable.index.get_level_values( self.widetolonglned['datatype_name']) self.widetolongtable.reset_index(drop=True, inplace=True) except Exception as e: print(str(e)) self.error.showMessage('Could not melt data: ', str(e)) try: assert self.widetolonglned['datatype_name'] != 'NULL' except Exception as e: print(str(e)) self.error.showMessage('Invalid datatype column: ' + str(e)) return if sender is self.btnPreview: self.widetolongmodel = view.PandasTableModel( self.widetolongtable) self.preview.tabviewPreview.setModel(self.widetolongmodel) self.preview.show() elif sender is self.btnSaveClose: hlp.write_column_to_log(self.widetolonglned, self._log, 'widetolong') self.facade._data = self.widetolongtable self.update_data.emit('update') self.close()
def climate_session_display(self): ''' Displays the Climate session dialog box''' self.dclimatesession.show() self.dclimatesession.facade = self.facade self.actionSiteTable.setEnabled(False) self.actionClimateSiteTable.setEnabled(True) metapath = (str(os.getcwd()) + '/Datasets_manual_test/meta_climate_test.csv') metadf = read_csv(metapath, encoding='iso-8859-11') metamodel = view.PandasTableModel(metadf) self.tblViewMeta.setModel(metamodel)
def __init__(self, parent=None): super().__init__(parent) # attributes self.setupUi(self) # ------- SITE DIALOG CONSTRUCTOR ARGS ----- # self.facade = face.Facade() self.dsite = s_.SiteDialog() self.climatesite = ClimateSite() self.climatesite.climatesite_unlocks.connect( self.climate_site_complete_enabled) # Actions self.actionSiteTable.triggered.connect(self.site_display) self.actionClimateSiteTable.triggered.connect( self.climate_site_display) # Custom Signals # ------ SESSION DIALOG CONSTRUCTOR ARGS ----- # # Dialog boxes for user feedback self.dsession = logicsess.SessionDialog() self.dsession.raw_data_model.connect(self.update_data_model) self.climatesession = logicsess.SessionDialog() self.climatesession.raw_data_model.connect(self.update_data_model) self.error = QtGui.QErrorMessage() self.message = QtGui.QMessageBox # actions self.actionStart_Session.triggered.connect(self.session_display) self.actionNew_Climate.triggered.connect( self.climate_session_display) self.mdiArea.addSubWindow(self.subwindow_2) self.mdiArea.addSubWindow(self.subwindow_1) # Dialog boxes for user feedback self.error = QtGui.QErrorMessage() self.message = QtGui.QMessageBox metadf = read_csv(metapath, encoding='iso-8859-11') metamodel = view.PandasTableModel(metadf) self.tblViewMeta.setModel(metamodel)
def update_data(self): ''' Method to check whether the study sites (study_site_key) have already been uploaded into the database; either from the same LTER or different LTER's. If there are matches it updates the query view table class AND prompts the user to check if the sites about to be entered are exactly the same site as in the db (so studies can be joined by similar LTER study site locations) Note, if the user changes one of the site names, this method will account for that before the 'check' begins ''' # Query to check is study sites are in db session = orm.Session() sitecheck = session.query(orm.study_site_table.__table__).order_by( orm.study_site_table.study_site_key).filter( orm.study_site_table.study_site_key.in_( self.sitelevels_submit_block)) session.close() site_df_from_query = read_sql(sitecheck.statement, sitecheck.session.bind) # Conditionals to make sure that no results were # returned or not and sets check object (checker) # First conditional is in case the database is empty # and/or query returns None print('checker df: ', site_df_from_query) if site_df_from_query is not None: if site_df_from_query.empty is True: no_site_matches_from_db = True else: # If there are matches for study sites # make a list of match names to be promt user # with no_site_matches_from_db = False site_matches_from_db = site_df_from_query[ 'study_site_key'].values.tolist() else: no_site_matches_from_db = True print('no_site_matches_from_db status: ', no_site_matches_from_db) # If there are matches and user confirms they # are the same site's in the database then accept # changes and query site id's again to make sure # no more shared study sites are left if no_site_matches_from_db == True: self.sitetablemodel = self.viewEdit( self.site_table_data_to_upload_to_db.applymap(str)) self.listviewSiteLabels.setModel(self.sitetablemodel) else: query_matches_view = view.PandasTableModel( site_df_from_query[site_df_from_query['study_site_key'].isin( site_matches_from_db)]) self.preview_validate.tabviewPreview.setModel(query_matches_view) self.sitequerymodel = query_matches_view self.tabviewDbSiteQuery.setModel(self.sitequerymodel) self.tabviewDbSiteQuery.resizeColumnsToContents() self.preview_validate.show()
def __init__(self, parent=None): super().__init__(parent) # attributes self.setupUi(self) self.facade = face.Facade() self._log = None self.dsite = sitelogic.SiteDialog() self.dsession = sesslogic.SessionDialog() self.dmain = mainlogic.MainDialog() self.dtaxa = taxalogic.TaxaDialog() self.dtime = timelogic.TimeDialog() self.draw = rawlogic.ObsDialog() self.dcovar = covarlogic.CovarDialog() self.dclimatesite = climsitelogic.ClimateSite() self.dclimatesession = sesslogic.SessionDialog() self.dwidetolong = widetolonglogic.WidetoLongDialog() self.dsplitcolumn = splitcolumnlogic.SplitColumnDialog() self.dreplacevalue = replacelogic.ReplaceValueDialog() self.dcbind = cbindlogic.CbindDialog() self.data_model = view.PandasTableModelEdit(None) self.data_model.log_change.connect(self.write_to_log) self.change_count = 0 # Actions self.actionUndo.triggered.connect(self.undo_data_mod) self.actionCombine_Columns.triggered.connect(self.cbind_display) self.actionReplace.triggered.connect(self.replace_value_display) self.actionConvert_Wide_to_Long.triggered.connect( self.wide_to_long_display) self.actionSplit_Column_By.triggered.connect(self.split_column_display) self.actionSiteTable.triggered.connect(self.site_display) self.actionStart_Session.triggered.connect(self.session_display) self.actionEnd_Session.triggered.connect(self.end_session) self.actionMainTable.triggered.connect(self.main_display) self.actionTaxaTable.triggered.connect(self.taxa_display) self.actionTimeFormat.triggered.connect(self.time_display) self.actionRawTable.triggered.connect(self.obs_display) self.actionCovariates.triggered.connect(self.covar_display) self.actionCommit.triggered.connect(self.commit_data) self.actionClimateSiteTable.triggered.connect( self.climate_site_display) self.actionNew_Climate.triggered.connect(self.climate_session_display) self.mdiArea.addSubWindow(self.subwindow_2) self.mdiArea.addSubWindow(self.subwindow_1) # Custom Signals self.dsite.site_unlocks.connect(self.site_complete_enable) self.dwidetolong.update_data.connect(self.update_data_model) self.dsplitcolumn.update_data.connect(self.update_data_model) self.dreplacevalue.update_data.connect(self.update_data_model) self.dcbind.update_data.connect(self.update_data_model) self.dclimatesite.climatesite_unlocks.connect( self.climate_site_complete_enabled) self.dsession.raw_data_model.connect(self.update_data_model) self.dclimatesession.raw_data_model.connect(self.update_data_model) # Dialog boxes for user feedback self.error = QtGui.QErrorMessage() self.message = QtGui.QMessageBox metadf = read_csv(metapath, encoding='iso-8859-11') metamodel = view.PandasTableModel( metadf[['global_id', 'lter', 'title', 'site_metadata', 'temp_int']]) self.tblViewMeta.setModel(metamodel) self.tblViewMeta.resizeColumnsToContents() self.tblViewRaw.horizontalHeader().sectionDoubleClicked.connect( self.changeHorizontalHeader) self.tblViewRaw.resizeColumnsToContents()
def update_data_model(self, dataobject): newdatamodel = view.PandasTableModel(self.facade._data) self.tblViewRaw.setModel(newdatamodel) self.raw_data_received.emit('Data loaded')
def update_data_model(self): newdatamodel = view.PandasTableModel(self.facade._data) self.tblViewRaw.setModel(newdatamodel) self.dsite.facade = self.facade self.climatesite.facade = self.facade
def update_data_model(self): newdatamodel = view.PandasTableModel(self.facade._data) self.tblViewRaw.setModel(newdatamodel)