Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR: update well name when importing a water level #419

Merged
merged 5 commits into from
Jul 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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