1# Copyright 2015 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import json 6import logging 7 8from google.appengine.api import urlfetch 9from google.appengine.runtime import apiproxy_errors 10 11from base import constants 12 13 14def BuildUrl(master_name, url): 15 return '%s/%s/%s' % (constants.BUILDBOT_BASE_URL, master_name, url) 16 17 18def FetchData(url): 19 try: 20 return json.loads(FetchText(url)) 21 except ValueError: 22 logging.warning('Data is corrupt: %s', url) 23 raise 24 25 26def FetchText(url): 27 logging.debug('Retrieving %s', url) 28 try: 29 return urlfetch.fetch(url).content 30 except (apiproxy_errors.DeadlineExceededError, urlfetch.DownloadError, 31 urlfetch.InternalTransientError): 32 # Could be intermittent; try again. 33 try: 34 return urlfetch.fetch(url).content 35 except: 36 logging.error('Error retrieving URL: %s', url) 37 raise 38 except: 39 logging.error('Error retrieving URL: %s', url) 40 raise 41