Skip to content

Commit

Permalink
Merge pull request #419 from jnsebgosselin/pr/417
Browse files Browse the repository at this point in the history
PR: update well name when importing a water level
  • Loading branch information
jnsebgosselin committed Jul 14, 2022
2 parents 5c1f782 + 879af04 commit c3d5014
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 19 deletions.
31 changes: 17 additions & 14 deletions gwhat/projet/manager_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -818,20 +818,7 @@ def accept_dataset(self):
del_dset(self.name)

# Update dataset attributes from UI and emit dataset.
if self._datatype == 'water level':
self._dataset['Well'] = self.station_name
self._dataset['Well ID'] = self.station_id
self._dataset['Province'] = self.province
self._dataset['Latitude'] = self.latitude
self._dataset['Longitude'] = self.longitude
self._dataset['Elevation'] = self.altitude
elif self._datatype == 'daily weather':
self._dataset.metadata['Station Name'] = self.station_name
self._dataset.metadata['Station ID'] = self.station_id
self._dataset.metadata['Location'] = self.province
self._dataset.metadata['Latitude'] = self.latitude
self._dataset.metadata['Longitude'] = self.longitude
self._dataset.metadata['Elevation'] = self.altitude
self._update_attributes_from_ui()
self.sig_new_dataset_imported.emit(self.name, self._dataset)

if len(self._queued_filenames):
Expand All @@ -848,6 +835,22 @@ def close(self):
self.directory.clear()
self.update_gui()

def _update_attributes_from_ui(self):
if self._datatype == 'water level':
self._dataset['Well'] = self.station_name
self._dataset['Well ID'] = self.station_id
self._dataset['Province'] = self.province
self._dataset['Latitude'] = self.latitude
self._dataset['Longitude'] = self.longitude
self._dataset['Elevation'] = self.altitude
elif self._datatype == 'daily weather':
self._dataset.metadata['Station Name'] = self.station_name
self._dataset.metadata['Station ID'] = self.station_id
self._dataset.metadata['Location'] = self.province
self._dataset.metadata['Latitude'] = self.latitude
self._dataset.metadata['Longitude'] = self.longitude
self._dataset.metadata['Elevation'] = self.altitude


if __name__ == '__main__':
import sys
Expand Down
14 changes: 10 additions & 4 deletions gwhat/projet/reader_waterlvl.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,10 @@ def __len__(self):
return len(self._dataf)

def __setitem__(self, key, value):
return NotImplementedError
raise NotImplementedError

def __iter__(self):
return NotImplementedError
raise NotImplementedError

# ---- Attributes
@property
Expand Down Expand Up @@ -399,12 +399,18 @@ def __getitem__(self, key):
elif key in COLUMNS:
return self.data[key].values
elif key in HEADER.keys():
return self._dataf.attrs[key]
return self.data.attrs[key]
elif key == 'filename':
return self._dataf.filename
return self.data.filename

return self.dset.__getitem__(key)

def __setitem__(self, key, value):
if key in HEADER.keys():
self.data.attrs[key] = value
else:
raise KeyError(key)

def __load_dataset__(self, filename):
"""Loads the dataset from a file and saves it in the store."""
self._dataf = read_water_level_datafile(filename)
Expand Down
62 changes: 61 additions & 1 deletion gwhat/projet/tests/test_manager_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,67 @@ def test_delete_weather_data(datamanager, mocker, qtbot):

def test_import_waterlevel_data(datamanager, mocker, qtbot):
"""
Test that importing water level data in gwhat projects is
Test that importing a water level dataset in a gwhat project is
working as expected.
Regression test for jnsebgosselin/gwhat#416
"""
datamanager.new_waterlvl_win.setModal(False)
new_waterlvl_dialog = datamanager.new_waterlvl_win

# Mock the file dialog to return the path of the weather datafiles.
mocker.patch.object(
QFileDialog, 'exec_', return_value=True)
mocker.patch.object(
QFileDialog, 'selectedFiles',
return_value=[WLFILENAME, WLFILENAME2, WLFILENAME3])

with qtbot.waitSignal(new_waterlvl_dialog.sig_new_dataset_loaded):
qtbot.mouseClick(datamanager.btn_load_wl, Qt.LeftButton)

assert new_waterlvl_dialog.directory.text() == WLFILENAME
assert new_waterlvl_dialog.name == "PO01 - Calixa-Lavallée"
assert new_waterlvl_dialog.station_name == "PO01 - Calixa-Lavallée"
assert new_waterlvl_dialog.station_id == "3040002"
assert new_waterlvl_dialog.province == "QC"
assert new_waterlvl_dialog.latitude == 45.74581
assert new_waterlvl_dialog.longitude == -73.28024
assert new_waterlvl_dialog.altitude == 19.51

# Change dataset info in the UI.
new_waterlvl_dialog._dset_name.setText("test_dataset_name")
new_waterlvl_dialog._stn_name.setText("test_well_name")
new_waterlvl_dialog._sid.setText("test_well_id")
new_waterlvl_dialog._lat.setValue(45.678)
new_waterlvl_dialog._lon.setValue(-76.543)
new_waterlvl_dialog._alt.setValue(123.23)
new_waterlvl_dialog._prov.setText("test_prov")

assert new_waterlvl_dialog.name == "test_dataset_name"
assert new_waterlvl_dialog.station_name == "test_well_name"
assert new_waterlvl_dialog.station_id == "test_well_id"
assert new_waterlvl_dialog.province == "test_prov"
assert new_waterlvl_dialog.latitude == 45.678
assert new_waterlvl_dialog.longitude == -76.543
assert new_waterlvl_dialog.altitude == 123.23

# Import the water level dataset into the project.
with qtbot.waitSignal(new_waterlvl_dialog.sig_new_dataset_imported):
qtbot.mouseClick(new_waterlvl_dialog.btn_ok, Qt.LeftButton)

wldset = datamanager.get_current_wldset()
assert wldset.name == "test_dataset_name"
assert wldset['Well'] == "test_well_name"
assert wldset['Well ID'] == "test_well_id"
assert wldset['Province'] == "test_prov"
assert wldset['Latitude'] == 45.678
assert wldset['Longitude'] == -76.543
assert wldset['Elevation'] == 123.23


def test_import_multiple_waterlevel_data(datamanager, mocker, qtbot):
"""
Test that importing multiple water level datasets in a gwhat project is
working as expected.
"""
datamanager.new_waterlvl_win.setModal(False)
Expand Down
21 changes: 21 additions & 0 deletions gwhat/projet/tests/test_read_waterlvl.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,27 @@ def test_read_waterlvl(ext):
assert list(dataset['Time']) == expected_results


def test_set_waterlvl_dataset():
"""
Test that modifying water level datasets is working as expected.
"""
filename = osp.join(DATADIR, 'water_level_datafile.csv')
dataset = WLDataset(filename)

expected_results = {
'Well': "test_well_name",
'Well ID': "test_well_id",
'Province': 'test_prov',
'Latitude': 45.678,
'Longitude': -76.543,
'Elevation': 123.23,
'Municipality': 'test_municipality'}

for key, value in expected_results.items():
dataset[key] = value
assert dataset[key] == expected_results[key]


@pytest.mark.parametrize("ext", ['.csv', '.xls', '.xlsx'])
def test_load_waterlvl_measurements(datatmpdir, ext):
filename = osp.join(datatmpdir, "waterlvl_manual_measurements" + ext)
Expand Down

0 comments on commit c3d5014

Please sign in to comment.