summaryrefslogtreecommitdiff
path: root/freebase
diff options
context:
space:
mode:
authormjtnix <mjtnix@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2007-12-07 05:28:54 +0000
committermjtnix <mjtnix@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2007-12-07 05:28:54 +0000
commit58de9ae985891fd10995b35d1b94b634fe937d44 (patch)
treebb1281a63998748f722590ce8d6d22e812a778e6 /freebase
parent595c902f6c4ff1af25955b32eea07e343c856836 (diff)
better handling of httplib2 errors. parsing the json responses
is untested. git-svn-id: http://freebase-python.googlecode.com/svn/trunk@26 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2
Diffstat (limited to 'freebase')
-rw-r--r--freebase/api/session.py26
1 files changed, 17 insertions, 9 deletions
diff --git a/freebase/api/session.py b/freebase/api/session.py
index 82eda50..078afdb 100644
--- a/freebase/api/session.py
+++ b/freebase/api/session.py
@@ -264,6 +264,17 @@ class HTTPMetawebSession(MetawebSession):
else:
return self._urllib2_request(url, method, body, headers)
+
+ def _raise_service_error(self, status, ctype, body):
+ is_jsbody = (e.info().type.endswith('javascript')
+ or e.info().type.endswith('json'))
+ if str(status) == '400' and is_jsbody:
+ r = self._loadjson(body)
+ msg = r.messages[0]
+ raise MetawebError(u'%s %s %r' % (msg.get('code',''), msg.message, msg.info))
+
+ raise MetawebError, 'request failed: %s: %r %r' % (url, str(e), body)
+
def _urllib2_request(self, url, method, body, headers):
req = urllib2.Request(url, body, headers)
@@ -275,15 +286,7 @@ class HTTPMetawebSession(MetawebSession):
raise MetawebError, 'failed contacting %s: %s' % (url, str(e))
except urllib2.HTTPError, e:
- if e.code == 400 and e.info().type == 'application/json':
- r = self._loadjson(e.fp.read())
- for msg in r.messages:
- if msg.get('level', 'error') == 'error':
- raise MetawebError(u'%s %s %r' % (msg.get('code',''), msg.message, msg.info))
-
- # some 400 we don't recognize. hmm.
- raise MetawebError(u'%r' % r)
- raise MetawebError, 'request failed: %s: %r %r' % (url, str(e), e.fp.read())
+ _raise_service_error(e.code, e.info().type, e.fp.read())
for header in resp.info().headers:
self.log.debug('HTTP HEADER %s', header)
@@ -301,6 +304,11 @@ class HTTPMetawebSession(MetawebSession):
self.log.error('SOCKET FAILURE: %s', e.fp.read())
raise MetawebError, 'failed contacting %s: %s' % (url, str(e))
+ except httplib2.HttpLib2ErrorWithResponse, e:
+ self._raise_service_error(resp.status, resp['content-type'], content)
+ except httplib2.HttpLib2Error, e:
+ raise MetawebError(u'HTTP error: %s' % (e,))
+
#tid = resp.get('x-metaweb-tid', None)
return (resp, content)