Fixed a NameError on exception, added a unit test.
Fixes #130
diff --git a/googleapiclient/discovery.py b/googleapiclient/discovery.py
index b7c884e..be62cf7 100644
--- a/googleapiclient/discovery.py
+++ b/googleapiclient/discovery.py
@@ -29,6 +29,7 @@
]
from six import StringIO
+from six.moves import http_client
from six.moves.urllib.parse import urlencode, urlparse, urljoin, \
urlunparse, parse_qsl
@@ -190,7 +191,15 @@
requested_url = uritemplate.expand(discoveryServiceUrl, params)
- content = _retrieve_discovery_doc(requested_url, http, cache_discovery, cache)
+ try:
+ content = _retrieve_discovery_doc(requested_url, http, cache_discovery,
+ cache)
+ except HttpError as e:
+ if e.resp.status == http_client.NOT_FOUND:
+ raise UnknownApiNameOrVersion("name: %s version: %s" % (serviceName,
+ version))
+ else:
+ raise e
return build_from_document(content, base=discoveryServiceUrl, http=http,
developerKey=developerKey, model=model, requestBuilder=requestBuilder,
@@ -232,9 +241,6 @@
resp, content = http.request(actual_url)
- if resp.status == 404:
- raise UnknownApiNameOrVersion("name: %s version: %s" % (serviceName,
- version))
if resp.status >= 400:
raise HttpError(resp, content, uri=actual_url)
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 2e13e59..45962f9 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -59,6 +59,7 @@
from googleapiclient.errors import MediaUploadSizeError
from googleapiclient.errors import ResumableUploadError
from googleapiclient.errors import UnacceptableMimeTypeError
+from googleapiclient.errors import UnknownApiNameOrVersion
from googleapiclient.http import BatchHttpRequest
from googleapiclient.http import HttpMock
from googleapiclient.http import HttpMockSequence
@@ -347,6 +348,13 @@
except InvalidJsonError:
pass
+ def test_unknown_api_name_or_version(self):
+ http = HttpMockSequence([
+ ({'status': '404'}, open(datafile('zoo.json'), 'rb').read()),
+ ])
+ with self.assertRaises(UnknownApiNameOrVersion):
+ plus = build('plus', 'v1', http=http, cache_discovery=False)
+
class DiscoveryFromDocument(unittest.TestCase):