# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import json import logging from google.appengine.api import urlfetch from google.appengine.runtime import apiproxy_errors from base import constants def BuildUrl(master_name, url): return '%s/%s/%s' % (constants.BUILDBOT_BASE_URL, master_name, url) def FetchData(url): try: return json.loads(FetchText(url)) except ValueError: logging.warning('Data is corrupt: %s', url) raise def FetchText(url): logging.debug('Retrieving %s', url) try: return urlfetch.fetch(url).content except (apiproxy_errors.DeadlineExceededError, urlfetch.DownloadError, urlfetch.InternalTransientError): # Could be intermittent; try again. try: return urlfetch.fetch(url).content except: logging.error('Error retrieving URL: %s', url) raise except: logging.error('Error retrieving URL: %s', url) raise