diff options
Diffstat (limited to 'freebase/api/session.py')
| -rw-r--r-- | freebase/api/session.py | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/freebase/api/session.py b/freebase/api/session.py index 078afdb..c763088 100644 --- a/freebase/api/session.py +++ b/freebase/api/session.py @@ -135,7 +135,7 @@ class HTTPMetawebSession(MetawebSession): # see each other's writes immediately. _default_cookiejar = cookielib.CookieJar() - def __init__(self, service_url, username=None, password=None, prev_session=None, cookiejar=None): + def __init__(self, service_url, username=None, password=None, prev_session=None, cookiejar=None, cookiefile=None): """ create a new MetawebSession for interacting with the Metaweb. @@ -159,6 +159,9 @@ class HTTPMetawebSession(MetawebSession): if prev_session: self.service_url = prev.service_url + if cookiefile is not None: + cookiejar = self.open_cookie_file(cookiefile) + if cookiejar is not None: self.cookiejar = cookiejar elif prev_session: @@ -166,7 +169,6 @@ class HTTPMetawebSession(MetawebSession): else: self.cookiejar = self._default_cookiejar - if CookiefulHttp is not None: self.httpclient = CookiefulHttp(cookiejar=self.cookiejar) else: @@ -174,6 +176,20 @@ class HTTPMetawebSession(MetawebSession): self.opener = urllib2.build_opener(cookiespy) + def open_cookie_file(self, cookiefile=None): + if cookiefile is None or cookiefile == '': + if os.environ.has_key('HOME'): + cookiefile = os.path.join(os.environ['HOME'], '.pyfreebase/cookiejar') + else: + raise MetawebError("no cookiefile specified and no $HOME/.pyfreebase directory" % cookiefile) + + cookiejar = cookielib.LWPCookieJar(cookiefile) + if os.path.exists(cookiefile): + cookiejar.load(ignore_discard=True) + + return cookiejar + + def _httpreq(self, service_path, method='GET', body=None, form=None, headers=None): """ @@ -348,8 +364,9 @@ class HTTPMetawebSession(MetawebSession): def _check_mqlerror(self, r): if r.code != '/api/status/ok': for msg in r.messages: - self.log.error('mql error: %s %s' % (msg.code, msg.message)) - raise MetawebError, 'query failed: %s' % r.messages[0].code + self.log.error('mql error: %s %s %r' % (msg.code, msg.message, msg.get('query', None))) + print 'MSGI %r' % (r,) + raise MetawebError, 'query failed: %s %r' % (r.messages[0].code, r.messages[0].get('query', None)) def _mqlresult(self, r): self._check_mqlerror(r) @@ -362,6 +379,8 @@ class HTTPMetawebSession(MetawebSession): return r.result + + def login(self): """sign in to the service""" |
