1#!/usr/bin/python 2 3# Copyright (c) 2013 The Chromium Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6 7""" 8Provides read access to buildbot's global_variables.json . 9""" 10 11 12import HTMLParser 13import json 14import re 15import retrieve_from_googlesource 16import svn 17import sys 18 19 20_global_vars = None 21 22 23SKIABOT_REPO = 'https://skia.googlesource.com/buildbot' 24_GLOBAL_VARS_PATH = 'site_config/global_variables.json' 25 26 27class GlobalVarsRetrievalError(Exception): 28 """Exception which is raised when the global_variables.json file cannot be 29 retrieved from the Skia buildbot repository.""" 30 pass 31 32 33class JsonDecodeError(Exception): 34 """Exception which is raised when the global_variables.json file cannot be 35 interpreted as JSON. This may be due to the file itself being incorrectly 36 formatted or due to an incomplete or corrupted downloaded version of the file. 37 """ 38 pass 39 40 41class NoSuchGlobalVariable(KeyError): 42 """Exception which is raised when a given variable is not found in the 43 global_variables.json file.""" 44 pass 45 46 47def Get(var_name): 48 """Return the value associated with this name in global_variables.json. 49 50 Args: 51 var_name: string; the variable to look up. 52 Returns: 53 The value of the variable. 54 Raises: 55 NoSuchGlobalVariable if there is no variable with that name. 56 """ 57 global _global_vars 58 if not _global_vars: 59 try: 60 global_vars_text = retrieve_from_googlesource.get(SKIABOT_REPO, 61 _GLOBAL_VARS_PATH) 62 except Exception as e: 63 raise GlobalVarsRetrievalError('Failed to retrieve %s from %s:\n%s' % 64 (_GLOBAL_VARS_PATH, SKIABOT_REPO, str(e))) 65 try: 66 _global_vars = json.loads(global_vars_text) 67 except ValueError as e: 68 raise JsonDecodeError(e.message + '\n' + global_vars_text) 69 try: 70 return _global_vars[var_name]['value'] 71 except KeyError: 72 raise NoSuchGlobalVariable(var_name) 73 74 75if __name__ == '__main__': 76 print Get(sys.argv[1]) 77