From 42b017c7246887d407304f86d94444a313ba1b0b Mon Sep 17 00:00:00 2001 From: Kirill Popov Date: Sat, 21 Mar 2015 15:10:23 +0300 Subject: [PATCH] [#1]: Implemented retries and errors handling while getting data from API --- apt_fetcher.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/apt_fetcher.py b/apt_fetcher.py index d16ba2a..895648a 100644 --- a/apt_fetcher.py +++ b/apt_fetcher.py @@ -4,7 +4,6 @@ import logging import requests -import simplejson import StringIO import base64 import zipfile @@ -14,7 +13,25 @@ def get_json_from_api(api_request=None): """ Requests data from API, handles errors and tries to convert the JSON reply into python dict """ - reply = requests.get(api_request) + max_retries = 3 + retries_done = 0 + while True: + retries_done += 1 + try: + reply = requests.get(api_request, timeout=60) + break + except (requests.exceptions.HTTPError, requests.exceptions.Timeout): + if retries_done < max_retries: + logging.warn("Error getting from %s. Retrying.", api_request) + continue + else: + logging.error( + "Failed to get from %s after %s retries. Returning None", + api_request, retries_done) + return None + except: + logging.error("Failed to get from %s. returning None", api_request) + return None if reply.status_code != 200: logging.error("Failed to receive data from %s. Code %s", api_request, reply.status_code)