From d6f806215f47a0360796b9d3c3b0ff1c456e05b3 Mon Sep 17 00:00:00 2001 From: elmerehbi Date: Sat, 4 Jul 2020 12:18:04 +0300 Subject: [PATCH 1/4] fix/ raise a custom error when the rdb result is an error report --- dataretrieval/exceptions.py | 6 ++++++ dataretrieval/nwis.py | 4 ++++ tests/nwis_test.py | 9 ++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 dataretrieval/exceptions.py diff --git a/dataretrieval/exceptions.py b/dataretrieval/exceptions.py new file mode 100644 index 00000000..863277c2 --- /dev/null +++ b/dataretrieval/exceptions.py @@ -0,0 +1,6 @@ +class DataRetrievalError(BaseException): + """Base exception for dataretrieval""" + + +class EmptyQueryResultError(DataRetrievalError): + """Raised when a query returns an error""" diff --git a/dataretrieval/nwis.py b/dataretrieval/nwis.py index 1d9791bd..16ef760f 100644 --- a/dataretrieval/nwis.py +++ b/dataretrieval/nwis.py @@ -11,6 +11,7 @@ from io import StringIO from dataretrieval.utils import to_str, format_datetime, update_merge, set_metadata as set_md +from .exceptions import EmptyQueryResultError from .utils import query WATERDATA_BASE_URL = 'https://nwis.waterdata.usgs.gov/' @@ -575,6 +576,9 @@ def read_rdb(rdb): fields = rdb.splitlines()[count].split('\t') dtypes = {'site_no': str} + if "Error report" in (fields[0]): + raise EmptyQueryResultError + df = pd.read_csv(StringIO(rdb), delimiter='\t', skiprows=count + 2, names=fields, na_values='NaN', dtype=dtypes) diff --git a/tests/nwis_test.py b/tests/nwis_test.py index 22ecfca7..2fe7bf6b 100644 --- a/tests/nwis_test.py +++ b/tests/nwis_test.py @@ -1,5 +1,7 @@ import pytest -from dataretrieval.nwis import get_record + +from dataretrieval.exceptions import EmptyQueryResultError +from dataretrieval.nwis import get_record, read_rdb START_DATE = '2018-01-24' END_DATE = '2018-01-25' @@ -39,6 +41,11 @@ def test_iv_service_answer(): assert df.index.names == [SITENO_COL, DATETIME_COL], "iv service returned incorrect index: {}".format(df.index.names) +def test_read_rdb_raises_error(): + with pytest.raises(EmptyQueryResultError): + read_rdb("Error report") + + if __name__=='__main__': test_measurements_service_answer() test_iv_service_answer() From 5af5aec68e5840f4841d12d4d568b1ab82d66e5d Mon Sep 17 00:00:00 2001 From: elmerehbi Date: Fri, 3 Jul 2020 16:53:14 +0300 Subject: [PATCH 2/4] WIP: raise custom error if query returns error --- dataretrieval/nwis.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dataretrieval/nwis.py b/dataretrieval/nwis.py index dfeb8753..1be5261f 100644 --- a/dataretrieval/nwis.py +++ b/dataretrieval/nwis.py @@ -709,6 +709,10 @@ def _read_rdb(rdb): fields = rdb.splitlines()[count].split('\t') dtypes = {'site_no': str, 'dec_long_va': float, 'dec_lat_va': float} + # raise error if result has error + if "Error report" in (fields[0]): + raise ValueError + df = pd.read_csv(StringIO(rdb), delimiter='\t', skiprows=count + 2, names=fields, na_values='NaN', dtype=dtypes) From 8a196c1c9866030b01bc2165e5e98d2b234373c5 Mon Sep 17 00:00:00 2001 From: elmerehbi Date: Thu, 6 May 2021 10:57:52 +0300 Subject: [PATCH 3/4] remove duplicate statement --- dataretrieval/nwis.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/dataretrieval/nwis.py b/dataretrieval/nwis.py index ee6dd460..9c81626a 100644 --- a/dataretrieval/nwis.py +++ b/dataretrieval/nwis.py @@ -711,9 +711,6 @@ def _read_rdb(rdb): dtypes = {'site_no': str, 'dec_long_va': float, 'dec_lat_va': float} # raise error if result has error - if "Error report" in (fields[0]): - raise ValueError - if "Error report" in (fields[0]): raise EmptyQueryResultError From bad9e966754b6401ed42bc521e8bfde5ad06cea2 Mon Sep 17 00:00:00 2001 From: elmerehbi Date: Thu, 6 May 2021 10:59:06 +0300 Subject: [PATCH 4/4] update import read_rdb > _read_rdb --- tests/nwis_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/nwis_test.py b/tests/nwis_test.py index 2fe7bf6b..e5a75410 100644 --- a/tests/nwis_test.py +++ b/tests/nwis_test.py @@ -1,7 +1,7 @@ import pytest from dataretrieval.exceptions import EmptyQueryResultError -from dataretrieval.nwis import get_record, read_rdb +from dataretrieval.nwis import get_record, _read_rdb START_DATE = '2018-01-24' END_DATE = '2018-01-25' @@ -43,7 +43,7 @@ def test_iv_service_answer(): def test_read_rdb_raises_error(): with pytest.raises(EmptyQueryResultError): - read_rdb("Error report") + _read_rdb("Error report") if __name__=='__main__':