95ead5b0e8
BUG=skia:2480 NOTRY=true R=epoger@google.com Author: borenet@google.com Review URL: https://codereview.chromium.org/254013003 git-svn-id: http://skia.googlecode.com/svn/trunk@14439 2bbb7eff-a529-9590-31e7-b0007b416f81
90 lines
2.3 KiB
Python
Executable File
90 lines
2.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
# Copyright (c) 2013 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.
|
|
|
|
"""
|
|
Provides read access to buildbot's global_variables.json .
|
|
"""
|
|
|
|
|
|
from contextlib import closing
|
|
|
|
import HTMLParser
|
|
import json
|
|
import re
|
|
import svn
|
|
import sys
|
|
import urllib2
|
|
|
|
|
|
_global_vars = None
|
|
|
|
|
|
GLOBAL_VARS_JSON_URL = ('http://skia-tree-status.appspot.com/repo-serving/'
|
|
'buildbot/site_config/global_variables.json')
|
|
|
|
|
|
class GlobalVarsRetrievalError(Exception):
|
|
"""Exception which is raised when the global_variables.json file cannot be
|
|
retrieved from the Skia buildbot repository."""
|
|
pass
|
|
|
|
|
|
class JsonDecodeError(Exception):
|
|
"""Exception which is raised when the global_variables.json file cannot be
|
|
interpreted as JSON. This may be due to the file itself being incorrectly
|
|
formatted or due to an incomplete or corrupted downloaded version of the file.
|
|
"""
|
|
pass
|
|
|
|
|
|
class NoSuchGlobalVariable(KeyError):
|
|
"""Exception which is raised when a given variable is not found in the
|
|
global_variables.json file."""
|
|
pass
|
|
|
|
|
|
def retrieve_from_mirror(url):
|
|
"""Retrieve the given file from the Skia Buildbot repo mirror.
|
|
|
|
Args:
|
|
url: string; the URL of the file to retrieve.
|
|
Returns:
|
|
The contents of the file in the repository.
|
|
"""
|
|
with closing(urllib2.urlopen(url)) as f:
|
|
return f.read()
|
|
|
|
|
|
def Get(var_name):
|
|
"""Return the value associated with this name in global_variables.json.
|
|
|
|
Args:
|
|
var_name: string; the variable to look up.
|
|
Returns:
|
|
The value of the variable.
|
|
Raises:
|
|
NoSuchGlobalVariable if there is no variable with that name.
|
|
"""
|
|
global _global_vars
|
|
if not _global_vars:
|
|
try:
|
|
global_vars_text = retrieve_from_mirror(GLOBAL_VARS_JSON_URL)
|
|
except Exception as e:
|
|
raise GlobalVarsRetrievalError('Failed to retrieve %s:\n%s' %
|
|
(GLOBAL_VARS_JSON_URL, str(e)))
|
|
try:
|
|
_global_vars = json.loads(global_vars_text)
|
|
except ValueError as e:
|
|
raise JsonDecodeError(e.message + '\n' + global_vars_text)
|
|
try:
|
|
return _global_vars[var_name]['value']
|
|
except KeyError:
|
|
raise NoSuchGlobalVariable(var_name)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print Get(sys.argv[1])
|