Handling rate limiting errors from search api #50

Merged
mckellister merged 2 commits from master into master 2011-11-10 14:10:17 -08:00
Showing only changes of commit f31446fa31 - Show all commits

View file

@ -93,6 +93,18 @@ class APILimit(TwythonError):
def __str__(self): def __str__(self):
return repr(self.msg) return repr(self.msg)
class RateLimitError(TwythonError):
"""
Raised when you've hit a rate limit. retry_wait_seconds is the number of seconds to
wait before trying again.
"""
def __init__(self, msg, retry_wait_seconds):
self.msg = msg
self.retry_wait_seconds = int(retry_wait_seconds)
def __str__(self):
return repr(self.msg)
class AuthError(TwythonError): class AuthError(TwythonError):
""" """
@ -308,6 +320,11 @@ class Twython(object):
searchURL = Twython.constructApiURL("http://search.twitter.com/search.json", kwargs) searchURL = Twython.constructApiURL("http://search.twitter.com/search.json", kwargs)
try: try:
resp, content = self.client.request(searchURL, "GET", headers = self.headers) resp, content = self.client.request(searchURL, "GET", headers = self.headers)
if resp.status == 420:
retry_wait_seconds = resp['retry-after']
raise RateLimitError("getSearchTimeline() is being rate limited. Retry after %s seconds." % retry_wait_seconds, retry_wait_seconds)
return simplejson.loads(content.decode('utf-8')) return simplejson.loads(content.decode('utf-8'))
except HTTPError, e: except HTTPError, e:
raise TwythonError("getSearchTimeline() failed with a %s error code." % `e.code`, e.code) raise TwythonError("getSearchTimeline() failed with a %s error code." % `e.code`, e.code)