Home | History | Annotate | Download | only in tools
      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 """
      8 Provides read access to buildbot's global_variables.json .
      9 """
     10 
     11 
     12 import HTMLParser
     13 import json
     14 import re
     15 import retrieve_from_googlesource
     16 import svn
     17 import sys
     18 
     19 
     20 _global_vars = None
     21 
     22 
     23 SKIABOT_REPO = 'https://skia.googlesource.com/buildbot'
     24 _GLOBAL_VARS_PATH = 'site_config/global_variables.json'
     25 
     26 
     27 class 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 
     33 class 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 
     41 class 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 
     47 def 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 
     75 if __name__ == '__main__':
     76   print Get(sys.argv[1])
     77