Beispiel #1
0
        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)
Beispiel #2
0
        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()
Beispiel #3
0
        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()
Beispiel #4
0
 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)
Beispiel #5
0
        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()
Beispiel #7
0
    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()
Beispiel #8
0
 def update_data_model(self, dataobject):
     newdatamodel = view.PandasTableModel(self.facade._data)
     self.tblViewRaw.setModel(newdatamodel)
     self.raw_data_received.emit('Data loaded')
Beispiel #9
0
 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
Beispiel #10
0
 def update_data_model(self):
     newdatamodel = view.PandasTableModel(self.facade._data)
     self.tblViewRaw.setModel(newdatamodel)