From a82f1460a2ee5ff8fa6429bb54cb59b1a97e0a80 Mon Sep 17 00:00:00 2001 From: Ryan May Date: Fri, 30 Oct 2015 08:26:45 -0600 Subject: [PATCH] Make HTTP errors raise an exception. This way we don't blindly continue and get more obscure errors later. --- siphon/catalog.py | 2 ++ siphon/tests/fixtures/radarserver_ds_denied | 17 +++++++++++++++++ .../tests/fixtures/radarserver_toplevel_denied | 17 +++++++++++++++++ siphon/tests/test_radarsever.py | 14 ++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 siphon/tests/fixtures/radarserver_ds_denied create mode 100644 siphon/tests/fixtures/radarserver_toplevel_denied diff --git a/siphon/catalog.py b/siphon/catalog.py index f3703a175..f07c2c6f2 100644 --- a/siphon/catalog.py +++ b/siphon/catalog.py @@ -52,6 +52,7 @@ def __init__(self, catalog_url): # get catalog.xml file resp = session.get(self.catalog_url) + resp.raise_for_status() # If we were given an HTML link, warn about it and try to fix to xml if 'html' in resp.headers['content-type']: @@ -61,6 +62,7 @@ def __init__(self, catalog_url): new_url)) self.catalog_url = new_url resp = session.get(self.catalog_url) + resp.raise_for_status() # begin parsing the xml doc root = ET.fromstring(resp.text) diff --git a/siphon/tests/fixtures/radarserver_ds_denied b/siphon/tests/fixtures/radarserver_ds_denied new file mode 100644 index 000000000..d1f12be72 --- /dev/null +++ b/siphon/tests/fixtures/radarserver_ds_denied @@ -0,0 +1,17 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Siphon (0.3.1+20.gdd8f139.dirty)] + method: GET + uri: http://thredds-aws.unidata.ucar.edu/thredds/radarServer/nexrad/level2/S3/dataset.xml + response: + body: {string: ''} + headers: + Date: ['Thu, 29 Oct 2015 14:35:24 GMT'] + Server: [Apache-Coyote/1.1] + status: {code: 403, message: Forbidden} +version: 1 diff --git a/siphon/tests/fixtures/radarserver_toplevel_denied b/siphon/tests/fixtures/radarserver_toplevel_denied new file mode 100644 index 000000000..22b96782f --- /dev/null +++ b/siphon/tests/fixtures/radarserver_toplevel_denied @@ -0,0 +1,17 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [Siphon (0.3.1+20.gdd8f139.dirty)] + method: GET + uri: http://thredds-aws.unidata.ucar.edu/thredds/radarServer/catalog.xml + response: + body: {string: ''} + headers: + Date: ['Thu, 29 Oct 2015 14:35:24 GMT'] + Server: [Apache-Coyote/1.1] + status: {code: 403, message: Forbidden} +version: 1 diff --git a/siphon/tests/test_radarsever.py b/siphon/tests/test_radarsever.py index 9602818fd..0de04bb0f 100644 --- a/siphon/tests/test_radarsever.py +++ b/siphon/tests/test_radarsever.py @@ -5,6 +5,7 @@ get_radarserver_datasets) from nose.tools import eq_, raises +from requests import HTTPError recorder = siphon.testing.get_recorder(__file__) @@ -120,3 +121,16 @@ def test_catalog_access(self): ds = get_radarserver_datasets('http://thredds.ucar.edu/thredds/') url = ds['NEXRAD Level III Radar from IDD'].follow().catalog_url assert RadarServer(url) + + +class TestUnauthorizedErrors(object): + @recorder.use_cassette('radarserver_toplevel_denied') + @raises(HTTPError) + def test_get_rs_datasets_denied_throws(self): + get_radarserver_datasets('http://thredds-aws.unidata.ucar.edu/thredds/') + + @raises(HTTPError) + @recorder.use_cassette('radarserver_ds_denied') + def test_rs_constructor_throws(self): + RadarServer('http://thredds-aws.unidata.ucar.edu/thredds/' + 'radarServer/nexrad/level2/S3/')