def test_delete_weather_data(datamanager, mocker, qtbot): """ Test deleting weather datasets from the project. """ datamanager.new_wxdset_imported('wxdset1', WXDataFrame(WXFILENAME)) datamanager.new_wxdset_imported('wxdset2', WXDataFrame(WXFILENAME)) assert datamanager.wxdataset_count() == 2 # Click to delete the current weather dataset, but cancel. mock_exec_ = mocker.patch.object(QMessageBox, 'exec_', return_value=QMessageBox.Cancel) qtbot.mouseClick(datamanager.btn_del_wxdset, Qt.LeftButton) assert datamanager.wxdataset_count() == 2 assert datamanager._confirm_before_deleting_dset is True assert mock_exec_.call_count == 1 # Click to delete the current weather dataset, check the # 'Don't show this message again' option and answer Yes. mock_exec_.return_value = QMessageBox.Yes mocker.patch.object(QCheckBox, 'isChecked', return_value=True) with qtbot.waitSignal(datamanager.sig_new_console_msg, raising=True): qtbot.mouseClick(datamanager.btn_del_wxdset, Qt.LeftButton) assert datamanager.wxdataset_count() == 1 assert datamanager._confirm_before_deleting_dset is False assert mock_exec_.call_count == 2 # Click to delete the current weather dataset. with qtbot.waitSignal(datamanager.sig_new_console_msg, raising=True): qtbot.mouseClick(datamanager.btn_del_wxdset, Qt.LeftButton) assert datamanager.wxdataset_count() == 0 assert datamanager._confirm_before_deleting_dset is False assert mock_exec_.call_count == 2
def export_weather_bot(qtbot): datafile = osp.join(OUTPUTDIR, "IBERVILLE (7023270)", "IBERVILLE (7023270)_2000-2015.out") export_btn = ExportWeatherButton(model=WXDataFrame(datafile)) qtbot.addWidget(export_btn) return export_btn, qtbot
def load_dataset(self, filename): """Load the dataset and display the information in the UI.""" if not osp.exists(filename): print('Path does not exist. Cannot open %s.' % filename) return # Load the Data : QApplication.setOverrideCursor(Qt.WaitCursor) self.ConsoleSignal.emit("<font color=black>Loading %s data...</font>" % self._datatype) for i in range(5): QCoreApplication.processEvents() try: if self._datatype == 'water level': self._dataset = WLDataFrame(filename) elif self._datatype == 'daily weather': self._dataset = WXDataFrame(filename) except Exception as e: print(e) self._dataset = None self.update_gui(filename) QApplication.restoreOverrideCursor()
def project(projectpath): # Create a project and add add the wldset to it. project = ProjetReader(osp.join(projectpath, "project_test_hydrocalc.gwt")) # Add the weather dataset to the project. wxdset = WXDataFrame(WXFILENAME) project.add_wxdset(wxdset.metadata['Station Name'], wxdset) # Add the water level dataset to the project. wldset = WLDataFrame(WLFILENAME) project.add_wldset(wldset['Well'], wldset) return project
def test_read_weather_data(ext): fmeteo = osp.join(osp.dirname(__file__), "sample_weather_datafile" + ext) wxdset = WXDataFrame(fmeteo) # Assert that the dataset was loaded correctly and that the 3 lines that # were removed manually from the dataset were added back. The lines were # removed for december 18, 19, and 20 of 2017. assert len(wxdset.data) == 2188 + 3 assert np.all(np.diff(wxdset.data.index) == np.timedelta64(1, 'D')) assert wxdset.get_data_period() == (2010, 2015) assert np.array_equal(datetimeindex_to_xldates(wxdset.data.index), np.arange(40179, 42369 + 1)) assert np.array_equal( wxdset.data.index, pd.date_range(start=dt.datetime(2010, 1, 1), end=dt.datetime(2015, 12, 31), freq='D')) assert np.array_equal(wxdset.data.index.year.unique(), np.arange(2010, 2015 + 1)) assert np.array_equal(wxdset.data.index.month.unique(), np.arange(1, 13)) # Assert the data for a sample of the dataset. assert np.array_equal(wxdset.data['Ptot'][-15:-10], np.array([14, 0, 0, 0, 8.5])) assert np.array_equal(wxdset.data['Rain'][-15:-10], np.array([14, 0, 0, 0, 0])) assert np.array_equal(wxdset.data['Snow'][-15:-10], np.array([0, 0, 0, 0, 8.5])) assert np.array_equal(np.round(wxdset.data['Tavg'][-15:-10], 3), np.array([4.300, 3.100, 1.900, 0.700, -0.500])) assert np.array_equal(np.round(wxdset.data['Tmax'][-15:-10], 3), np.array([9.000, 7.750, 6.500, 5.250, 4.000])) assert np.array_equal(np.round(wxdset.data['Tmin'][-15:-10], 3), np.array([-0.500, -1.125, -1.750, -2.375, -3.00]))
def test_export_yearly_monthly_daily(datamanager, mocker, qtbot, tmp_path): """ Test exporting a weather dataset to various file format and time frame. """ datamanager.show() wxdset = WXDataFrame(WXFILENAME) datamanager.new_wxdset_imported(wxdset.metadata['Station Name'], wxdset) for ftype in ['xlsx', 'csv', 'xls']: for time_frame in ['daily', 'monthly', 'yearly']: filename = osp.join( tmp_path, "export_{}_weather.{}".format(time_frame, ftype)) mocker.patch.object(QFileDialog, 'getSaveFileName', return_value=(filename, '*.' + ftype)) datamanager.btn_export_weather.select_export_file(time_frame) assert osp.exists(filename)
def test_last_opened_datasets(qtbot, projectpath): """ Test that the data manager recall correctly the water level and weather datasets that were last opened when opening a new project. Cover the new feature added in PR #267. """ datamanager = DataManager(projet=ProjetReader(projectpath)) qtbot.addWidget(datamanager) datamanager.show() # Add some water level dataset. for name in ['wldset1', 'wldset2', 'wldset3']: datamanager.new_wldset_imported(name, WLDataFrame(WLFILENAME)) assert datamanager.get_current_wldset().name == 'wldset3' # Add some weather dataset. for name in ['wxdset1', 'wxdset2', 'wxdset3']: datamanager.new_wxdset_imported(name, WXDataFrame(WXFILENAME)) assert datamanager.get_current_wxdset().name == 'wxdset3' # Change the current water level and weather datasets. datamanager.set_current_wldset('wldset2') assert datamanager.get_current_wldset().name == 'wldset2' datamanager.set_current_wxdset('wxdset2') assert datamanager.get_current_wxdset().name == 'wxdset2' # Close the datamanager and its project. datamanager.projet.close() datamanager.close() # Create a new datamanager and assert that the last opened water level # and weather datasets are remembered correctly. datamanager2 = DataManager(projet=ProjetReader(projectpath)) qtbot.addWidget(datamanager2) datamanager2.show() assert datamanager2.get_current_wldset().name == 'wldset2' assert datamanager2.get_current_wxdset().name == 'wxdset2'
def test_read_weather_data(): fmeteo = osp.join(osp.dirname(__file__), "sample_weather_datafile.csv") wxdset = WXDataFrame(fmeteo) # Assert that the dataset was loaded correctly and that the 3 lines that # were removed manually from the dataset were added back. The lines were # removed for december 18, 19, and 20 of 2017. assert len(wxdset['Time']) == 2188 + 3 assert np.all(np.diff(wxdset['Time']) == 1) expected_times = np.arange(40179, 42369 + 1) assert np.array_equal(wxdset['Time'], expected_times) expected_years = np.arange(2010, 2015 + 1) assert np.array_equal(np.unique(wxdset['Year']), expected_years) expected_months = np.arange(1, 13) assert np.array_equal(np.unique(wxdset['Month']), expected_months) # Assert the data for a sample of the dataset. expected_results = np.array([14, 0, 0, 0, 8.5]) assert np.array_equal(wxdset['Ptot'][-15:-10], expected_results) expected_results = np.array([14, 0, 0, 0, 0]) assert np.array_equal(wxdset['Rain'][-15:-10], expected_results) expected_results = np.array([0, 0, 0, 0, 8.5]) assert np.array_equal(wxdset['Snow'][-15:-10], expected_results) expected_results = np.array([4.300, 3.100, 1.900, 0.700, -0.500]) assert np.array_equal(np.round(wxdset['Tavg'][-15:-10], 3), expected_results) expected_results = np.array([9.000, 7.750, 6.500, 5.250, 4.000]) assert np.array_equal(np.round(wxdset['Tmax'][-15:-10], 3), expected_results) expected_results = np.array([-0.500, -1.125, -1.750, -2.375, -3.00]) assert np.array_equal(np.round(wxdset['Tmin'][-15:-10], 3), expected_results)
def wxdataset(): return WXDataFrame(osp.join( osp.dirname(__file__), "sample_weather_datafile.csv"))
self.model.export_dataset_to_file(savefilename, time_frame) except PermissionError: self.show_permission_error() self.select_export_file(time_frame, savefilename) QApplication.restoreOverrideCursor() # %% if __name__ == '__main__' if __name__ == '__main__': from gwhat.meteo.weather_reader import WXDataFrame app = QApplication(sys.argv) ft = app.font() ft.setFamily('Segoe UI') ft.setPointSize(11) app.setFont(ft) fmeteo = ("..\\..\\Projects\\Example\\Meteo\\Output\\" "MARIEVILLE (7024627)\MARIEVILLE (7024627)_1980-2017.out") wxdset = WXDataFrame(fmeteo) w = WeatherViewer() w.save_fig_dir = os.getcwd() w.set_lang('French') w.set_weather_dataset(wxdset) w.show() app.exec_()