def save_close(self): ''' Method to save the study_site_table as it is seen by the user (matching sites that were accepted by user are removed from the saved table because it will be pushed) ''' self.updated_from_query_matches = False # Retrieve study_site_table data from user view self.save_data = self.sitetablemodel.data(None, QtCore.Qt.UserRole) # If there are no site because they are already # in the database then create an empty dataframe if len(self.save_data) == 0: self.save_data = self.save_data.append( DataFrame( { 'study_site_key': 'NULL', 'lat_study_site': 'nan', 'lng_study_site': 'nan', 'descript': 'NULL' }, index=[0])) else: pass # Append dataframe with current LTER lterid_df = hlp.produce_null_df(1, ['lter_table_fkey'], len(self.save_data), self.lter) print(lterid_df) self.save_data = concat([self.save_data, lterid_df], axis=1).reset_index(drop=True) #Convert types and strip stings numeric_cols = ['lat_study_site', 'lng_study_site'] self.save_data[self.save_data.columns.difference( numeric_cols)] = self.save_data[self.save_data.columns.difference( numeric_cols)].applymap(str) self.save_data[self.save_data.columns.difference( numeric_cols)] = self.save_data[self.save_data.columns.difference( numeric_cols)].applymap(lambda x: x.strip()) self.save_data[numeric_cols] = to_numeric(self.save_data[numeric_cols], errors='coerce') print('Pushed dataset: ', self.save_data) self.facade.push_tables['study_site_table'] = self.save_data # Helpers to keep track of user changes to site names hlp.write_column_to_log(self.sitelned, self._log, 'sitetable_c') oldsitetable = hlp.produce_null_df( len(self.save_data.columns), self.save_data.columns.values.tolist(), len(self.save_data), 'nan') hlp.updated_df_values(oldsitetable, self.save_data, self._log, 'sitetable') # Signal to confim this form has been completed and # user can move on to other tables self.site_unlocks.emit(self.facade._data) self._log.debug('facade site levels' + ' '.join(self.facade._valueregister['sitelevels'])) self._log.debug( 'sitelevels (Save Block): ' + ' '.join(self.save_data['study_site_key'].values.tolist())) self.close()
def save_close(self): self.update_data() session = orm.Session() sitecheck = session.query( orm.Sitetable.siteid).order_by( orm.Sitetable.siteid) session.close() sitecheckdf = read_sql( sitecheck.statement, sitecheck.session.bind) changed_df = self.sitetablemodel.data( None, QtCore.Qt.UserRole) changed_site_list = changed_df['siteid'].values.tolist() 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] checker = (len(check) == 0) else: checker = True if checker is True: pass else: self._log.debug('SiteId present under different LTER') self.error.showMessage( 'Site abbreviations already in database ' + 'from an different LTER. Please modify ' + 'site abbreviations.') raise AttributeError( 'SiteID already present under different LTER') self.save_data = self.sitetablemodel.data( None, QtCore.Qt.UserRole) # Updating site levels self.facade.register_site_levels( self.facade._data[ self.siteloc[ 'siteid']].drop_duplicates().values.tolist()) if len(self.save_data) == 0: self.save_data= self.save_data.append( DataFrame( { 'siteid':'NULL', 'lat': 'nan', 'lng': 'nan', 'descript': 'NULL' }, index=[0]) ) else: pass lterid_df = hlp.produce_null_df( 1, ['lterid'], len(self.save_data), self.lter) print(lterid_df) self.save_data = concat( [self.save_data, lterid_df] , axis=1).reset_index(drop=True) print(self.save_data) self.facade.push_tables['sitetable'] = self.save_data hlp.write_column_to_log( self.sitelned, self._log, 'sitetable_c') oldsitetable = hlp.produce_null_df( len(self.save_data.columns), self.save_data.columns.values.tolist(), len(self.save_data), 'nan' ) hlp.updated_df_values( oldsitetable, self.save_data, self._log, 'sitetable' ) self.climatesite_unlocks.emit(self.facade._data) self._log.debug( 'facade site levels' + ' '.join(self.facade._valueregister['sitelevels'])) self.submit_change() self.close()
def save_close(self): self.update_data() session = orm.Session() sitecheck = session.query(orm.Sitetable.siteid).order_by( orm.Sitetable.siteid) session.close() sitecheckdf = read_sql(sitecheck.statement, sitecheck.session.bind) changed_df = self.sitetablemodel.data(None, QtCore.Qt.UserRole) changed_site_list = changed_df['siteid'].values.tolist() 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 ] checker = (len(check) == 0) else: checker = True if checker is True: pass else: self._log.debug('SiteId present under different LTER') self.error.showMessage('Site abbreviations already in database ' + 'from an different LTER. Please modify ' + 'site abbreviations.') raise AttributeError('SiteID already present under different LTER') self.save_data = self.sitetablemodel.data(None, QtCore.Qt.UserRole) # Updating site levels self.facade.register_site_levels(self.facade._data[ self.siteloc['siteid']].drop_duplicates().values.tolist()) if len(self.save_data) == 0: self.save_data = self.save_data.append( DataFrame( { 'siteid': 'NULL', 'lat': 'nan', 'lng': 'nan', 'descript': 'NULL' }, index=[0])) else: pass lterid_df = hlp.produce_null_df(1, ['lterid'], len(self.save_data), self.lter) print(lterid_df) self.save_data = concat([self.save_data, lterid_df], axis=1).reset_index(drop=True) print(self.save_data) self.facade.push_tables['sitetable'] = self.save_data hlp.write_column_to_log(self.sitelned, self._log, 'sitetable_c') oldsitetable = hlp.produce_null_df( len(self.save_data.columns), self.save_data.columns.values.tolist(), len(self.save_data), 'nan') hlp.updated_df_values(oldsitetable, self.save_data, self._log, 'sitetable') self.climatesite_unlocks.emit(self.facade._data) self._log.debug('facade site levels' + ' '.join(self.facade._valueregister['sitelevels'])) self.submit_change() self.close()
def save_close(self): ''' Method to save the study_site_table as it is seen by the user (matching sites that were accepted by user are removed from the saved table because it will be pushed) ''' update_message = QtGui.QMessageBox.question( self,'Message', 'Did you update records?', QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if update_message == QtGui.QMessageBox.No: return else: pass # Retrieve study_site_table data from user view save_data = self.sitetablemodel.data( None, QtCore.Qt.UserRole) self.save_data = save_data.drop_duplicates() print('saved data (initial): ', self.save_data) self.facade.register_site_levels( self.facade._data[ self.siteloc[ 'study_site_key']].drop_duplicates().values.tolist()) # If there are no site because they are already # in the database then create an empty dataframe if len(self.save_data) == 0: self.save_data= self.save_data.append( DataFrame( { 'study_site_key':'NULL', 'lat_study_site': 'nan', 'lng_study_site': 'nan', 'descript': 'NULL' }, index=[0]) ) else: pass # Append dataframe with current LTER lterid_df = hlp.produce_null_df( 1, ['lter_table_fkey'], len(self.save_data), self.lter) print(lterid_df) self.save_data = concat( [self.save_data, lterid_df] , axis=1).reset_index(drop=True) #Convert types and strip stings numeric_cols = ['lat_study_site', 'lng_study_site'] self.save_data[ self.save_data.columns.difference(numeric_cols)] = self.save_data[ self.save_data.columns.difference(numeric_cols)].applymap(str) self.save_data[ self.save_data.columns.difference(numeric_cols)] = self.save_data[ self.save_data.columns.difference(numeric_cols)].applymap( lambda x: x.strip()) self.save_data[numeric_cols] = to_numeric( self.save_data[numeric_cols], errors='coerce') print('Pushed dataset: ', self.save_data) self.facade.push_tables['study_site_table'] = self.save_data # Helpers to keep track of user changes to site names hlp.write_column_to_log( self.sitelned, self._log, 'sitetable_c') oldsitetable = hlp.produce_null_df( len(self.save_data.columns), self.save_data.columns.values.tolist(), len(self.save_data), 'nan' ) hlp.updated_df_values( oldsitetable, self.save_data, self._log, 'sitetable' ) # Signal to confim this form has been completed and # user can move on to other tables self.site_unlocks.emit('study_site_mod') site_unsorted = self.facade._data[ self.siteloc[ 'study_site_key']].drop_duplicates().values.tolist() site_unsorted.sort() self.sitelevels = site_unsorted self._log.debug( 'facade site levels' + ' '.join(self.facade._valueregister['sitelevels'])) self._log.debug( 'sitelevels (Save Block): ' + ' '.join(self.sitelevels)) self.saved.append(1) self.close()