summaryrefslogtreecommitdiff
path: root/freebase/api/session.py
diff options
context:
space:
mode:
Diffstat (limited to 'freebase/api/session.py')
-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)