diff options
| author | nitromaster101 <nitromaster101@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2> | 2009-06-18 23:43:53 +0000 |
|---|---|---|
| committer | nitromaster101 <nitromaster101@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2> | 2009-06-18 23:43:53 +0000 |
| commit | c8e799acf3c1aae32bb51ab88ba54bd8d27a08cb (patch) | |
| tree | 4a2798d287b7575ac259117c3c55ebfae750e34b /examples/freebase-images-appengine/freebase/api/httpclients.py | |
| parent | 9e79ac25dbf5a38cb64d2bda878c222b0516c035 (diff) | |
finish uploading appengine example: had to force freebase... it was already in svn
git-svn-id: http://freebase-python.googlecode.com/svn/trunk@105 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2
Diffstat (limited to 'examples/freebase-images-appengine/freebase/api/httpclients.py')
| -rw-r--r-- | examples/freebase-images-appengine/freebase/api/httpclients.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/examples/freebase-images-appengine/freebase/api/httpclients.py b/examples/freebase-images-appengine/freebase/api/httpclients.py new file mode 100644 index 0000000..48af9b6 --- /dev/null +++ b/examples/freebase-images-appengine/freebase/api/httpclients.py @@ -0,0 +1,91 @@ +try: + from google.appengine.api import urlfetch + from cookie_handlers import CookiefulUrlfetch +except: + pass + +try: + import httplib2 + from cookie_handlers import CookiefulHttp +except: + pass + +try: + import urllib2 + import socket +except: + pass + +import logging +import re + +class Urllib2Client(object): + def __init__(self, cookiejar, rse): + cookiespy = urllib2.HTTPCookieProcessor(cookiejar) + self.opener = urllib2.build_opener(cookiespy) + self._raise_service_error = rse + self.log = logging.getLogger() + + def __call__(self, url, method, body, headers): + req = urllib2.Request(url, body, headers) + + try: + resp = self.opener.open(req) + + except socket.error, e: + self.log.error('SOCKET FAILURE: %s', e.fp.read()) + raise MetawebError, 'failed contacting %s: %s' % (url, str(e)) + + except urllib2.HTTPError, e: + self.log.error('HTTP ERROR: %s', e) + self._raise_service_error(url, e.code, e.info().type, e.fp.read()) + + for header in resp.info().headers: + self.log.debug('HTTP HEADER %s', header) + name, value = re.split("[:\n\r]", header, 1) + if name.lower() == 'x-metaweb-tid': + self.tid = value.strip() + + return (resp, resp.read()) + +class Httplib2Client(object): + def __init__(self, cookiejar, rse): + self.cookiejar = cookiejar + self._raise_service_error = rse + self.httpclient = CookiefulHttp(cookiejar=self.cookiejar) + + def __call__(self, url, method, body, headers): + try: + resp, content = self.httpclient.request(url, method=method, + body=body, headers=headers) + if (resp.status != 200): + self._raise_service_error(url, resp.status, resp['content-type'], content) + + except socket.error, e: + 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(url, 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) + + +class UrlfetchClient(object): + def __init__(self, cookiejar, rse): + self.cookiejar = cookiejar + self._raise_service_error = rse + self.httpclient = CookiefulUrlfetch(cookiejar=self.cookiejar) + + def __call__(self, url, method, body, headers): + resp = self.httpclient.request(url, payload=body, method=method, headers=headers) + + if resp.status_code != 200: + self._raise_service_error(url, resp.status_code, resp.headers['content-type'], resp.body) + + return (resp, resp.content) + |
