Example #1
0
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
Example #2
0
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
Example #3
0
    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()
Example #4
0
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]))
Example #6
0
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)
Example #7
0
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)
Example #9
0
def wxdataset():
    return WXDataFrame(osp.join(
        osp.dirname(__file__), "sample_weather_datafile.csv"))
Example #10
0
                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_()