Skip to content

Instantly share code, notes, and snippets.

@bwarren2
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bwarren2/7cc37f03fa69f7599c58 to your computer and use it in GitHub Desktop.
Save bwarren2/7cc37f03fa69f7599c58 to your computer and use it in GitHub Desktop.
api_task
#Task
class ApiCall(BaseTask):
def run(self, mode, **kwargs):
try:
modeDict = {'<mode>': "<url>"}
try:
url = modeDict[mode]
except KeyError:
logger.info("Keyerrors!")
raise
URL = url + '?' + urlencode(self.api_context.toUrlDict(mode))
try:
pageaccess = urllib2.urlopen(URL, timeout=5)
except urllib2.HTTPError, err:
if err.code == 104:
logger.error(
"Got error 104 (connection reset by peer) for mode "
+ str(mode)
+ self.api_context.toUrlDict()
+ ". Retrying."
)
self.retry(mode=mode)
elif err.code == 111:
logger.error(
"Connection Refused! "
+ URL
+ ". Retrying."
)
self.retry(mode=mode)
elif err.code == 404:
logger.error("Page not found! " + URL + ". Retrying.")
self.retry(mode=mode)
elif err.code == 403:
logger.error(
"Your access was denied. "
+ URL
+ ". Retrying."
)
self.retry(mode=mode)
elif err.code == 401:
logger.error(
"Unauth'd! "
+ URL
+ ". Retrying."
)
self.retry(mode=mode)
elif err.code == 500:
logger.error("Server Error! " + URL + ". Retrying.")
self.retry(mode=mode)
elif err.code == 503:
logger.error(
"Server busy or limit exceeded "
+ URL
+ ". Retrying."
)
self.retry(mode=mode)
else:
logger.error(
"Got error "
+ str(err)
+ " with URL "
+ URL
+ ". Retrying."
)
self.retry(mode=mode)
except BadStatusLine:
logger.error(
"Bad status line for url %s" % URL
+ ". Retrying."
)
self.retry(mode=mode)
except urllib2.URLError as err:
self.retry(mode=mode)
except (ssl.SSLError, socket.timeout) as err:
logger.error(
"Connection timeout for {url}. Error: {e} Retrying.".format(
url=URL,
e=err
)
)
self.retry(mode=mode)
# If everything is kosher, import the result and return it.
data = json.loads(pageaccess.read())
data['api_context'] = self.api_context
return data
except (
SoftTimeLimitExceeded,
WorkerLostError,
TimeLimitExceeded,
) as exc:
try:
self.retry(mode=mode, exc=exc, countdown=180)
except MaxRetriesExceededError:
send_error_email(self.api_context.__str__())
raise
except ValueError:
send_error_email(self.api_context.__str__())
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment