普通文本  |  41行  |  1 KB

# 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