diff --git a/demo.py b/demo.py index 5d94303a7f733f56acf5cc6dd42a3478b7f7af66..77e285ea1375645fba6ae781f4e96c33c89c9046 100755 --- a/demo.py +++ b/demo.py @@ -8,7 +8,8 @@ import yaml # # A very rough script to demonstrate 'nvcl_kit' # - +# NB: requires 'pyyaml' - install via 'pip3 install pyyaml' +# # Provider list. Format is (WFS service URL, NVCL service URL, bounding box coords, local filtering, WFS version, max boreholes)) prov_list = [ ("http://www.mrt.tas.gov.au:80/web-services/ows", "http://www.mrt.tas.gov.au/NVCLDataServices/", { "west": 143.75, "south": -43.75, "east": 148.75, "north": -39.75 }, False, "1.1.0", 20), @@ -47,7 +48,7 @@ def do_demo(wfs, nvcl, bbox, local_filt, version, max): bh_list = reader.get_boreholes_list() print("len(bh_list) = ", len(bh_list)) - # Print borehole details and Australian Stratigraphic Units Database records + # Print borehole details and relevant records from Australian Stratigraphic Units Database (https://asud.ga.gov.au/) for bh in bh_list[:5]: print("\nBOREHOLE:") print(yaml.dump(bh)) diff --git a/nvcl_kit/asud.py b/nvcl_kit/asud.py index 14f41884ff209398c5d837fcd057a8ad0d077125..43f5ac6b0b26512c97762e3429f31583a36b2f58 100755 --- a/nvcl_kit/asud.py +++ b/nvcl_kit/asud.py @@ -121,11 +121,30 @@ def _get_asud_strat_no(lon, lat): def get_asud_record(lon, lat): ''' Retrieves a stratigraphy record from the 'Australian Strategraphic Units Database' - :param lon: longitude - :param lat: latitude + :param lon: longitude (float or string) + :param lat: latitude (float or string) :returns: stratigraphy record as a dict or None upon error or not found ''' - strat_no = _get_asud_strat_no(lon, lat) + # Check input parameters + if not isinstance(lon, float): + try: + lon_flt = float(lon) + except (ValueError, TypeError): + LOGGER.warning("lon parameter is not a float") + return None + else: + lon_flt = lon + + if not isinstance(lat, float): + try: + lat_flt = float(lat) + except (ValueError, TypeError): + LOGGER.warning("lat parameter is not a float") + return None + else: + lat_flt = lat + + strat_no = _get_asud_strat_no(lon_flt, lat_flt) if strat_no is not None: try: resp = post(GSUD_API, data=json.dumps({"actionName": "searchStratigraphicUnitsDetails", "stratNo": strat_no})) diff --git a/test/test_asud.py b/test/test_asud.py new file mode 100755 index 0000000000000000000000000000000000000000..2346535e9f6d1be32e93d5538ec99ec3073670c1 --- /dev/null +++ b/test/test_asud.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +import sys, os +import unittest +from unittest.mock import patch, Mock +from requests.exceptions import Timeout, RequestException +from owslib.util import ServiceException +from http.client import HTTPException +import logging + +from types import SimpleNamespace + +from nvcl_kit.asud import get_asud_record + + +class TestNVCLAsud(unittest.TestCase): + + def try_input_param(self, lon, lat, msg): + ''' Used to test variations in erroneous input parameters + :param lon: longitude (float) + :param lat: latitude (float) + :param msg: expected warning message + ''' + with self.assertLogs('nvcl_kit.asud', level='WARN') as nvcl_log: + rec = get_asud_record(lon, lat) + self.assertIn(msg, nvcl_log.output[0]) + self.assertEqual(rec, None) + + def test_params(self): + ''' Tests exception handling in get_borehole_data() + ''' + self.try_input_param(0.0, None, 'lat parameter is not a float') + self.try_input_param(None, 8.0, 'lon parameter is not a float') + self.try_input_param(None, "", 'lon parameter is not a float') diff --git a/test/test_reader.py b/test/test_reader.py index 358024a7492bdfe09ca98edcb518a5c7970ed193..03d023b67970e8762b0f07c94bde550cac91d23b 100755 --- a/test/test_reader.py +++ b/test/test_reader.py @@ -776,7 +776,3 @@ class TestNVCLReader(unittest.TestCase): self.assertEqual(log_list[0].log_id, 'b80a98e4-6d9b-4a58-ab04-d105c172e67') self.assertEqual(log_list[0].log_name, 'Imagery') self.assertEqual(log_list[0].sample_count, 30954) - - -if __name__ == '__main__': - unittest.main()