1fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com#!/usr/bin/python 2fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 3fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com# Copyright (c) 2013 The Chromium Authors. All rights reserved. 4fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com# Use of this source code is governed by a BSD-style license that can be 5fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com# found in the LICENSE file. 6fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 7fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com""" 8fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.comProvides read access to buildbot's global_variables.json . 9fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com""" 10fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 116f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com 126f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.comimport HTMLParser 13fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.comimport json 149f8e282901752e95e3b43059a19f08ea0a1a073ecommit-bot@chromium.orgimport re 152e81e51d1e932d34d602183130359514203efbbfborenetimport retrieve_from_googlesource 16fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.comimport svn 176f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.comimport sys 186f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com 19fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 20fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com_global_vars = None 21fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 224b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 232e81e51d1e932d34d602183130359514203efbbfborenetSKIABOT_REPO = 'https://skia.googlesource.com/buildbot' 242e81e51d1e932d34d602183130359514203efbbfborenet_GLOBAL_VARS_PATH = 'site_config/global_variables.json' 254b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 264b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 274b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.comclass GlobalVarsRetrievalError(Exception): 284b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com """Exception which is raised when the global_variables.json file cannot be 294b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com retrieved from the Skia buildbot repository.""" 304b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com pass 314b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 324b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 334b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.comclass JsonDecodeError(Exception): 344b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com """Exception which is raised when the global_variables.json file cannot be 354b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com interpreted as JSON. This may be due to the file itself being incorrectly 364b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com formatted or due to an incomplete or corrupted downloaded version of the file. 374b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com """ 384b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com pass 394b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 404b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 41fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.comclass NoSuchGlobalVariable(KeyError): 424b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com """Exception which is raised when a given variable is not found in the 434b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com global_variables.json file.""" 44fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com pass 45fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com 464b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com 47fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.comdef Get(var_name): 486f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com """Return the value associated with this name in global_variables.json. 4990a17674f16feeea606908264cb75c769c5b4884commit-bot@chromium.org 506f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com Args: 516f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com var_name: string; the variable to look up. 526f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com Returns: 536f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com The value of the variable. 546f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com Raises: 556f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com NoSuchGlobalVariable if there is no variable with that name. 566f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com """ 57fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com global _global_vars 58fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com if not _global_vars: 594b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com try: 602e81e51d1e932d34d602183130359514203efbbfborenet global_vars_text = retrieve_from_googlesource.get(SKIABOT_REPO, 612e81e51d1e932d34d602183130359514203efbbfborenet _GLOBAL_VARS_PATH) 6295ead5b0e800e64ba6b6cf6642d8e77bc711c803commit-bot@chromium.org except Exception as e: 632e81e51d1e932d34d602183130359514203efbbfborenet raise GlobalVarsRetrievalError('Failed to retrieve %s from %s:\n%s' % 642e81e51d1e932d34d602183130359514203efbbfborenet (_GLOBAL_VARS_PATH, SKIABOT_REPO, str(e))) 654b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com try: 664b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com _global_vars = json.loads(global_vars_text) 674b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com except ValueError as e: 684b897fa1f6f2f3c2319699545c6e3b8d3c82db17borenet@google.com raise JsonDecodeError(e.message + '\n' + global_vars_text) 69fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com try: 70fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com return _global_vars[var_name]['value'] 71fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com except KeyError: 72fd040116c55116e122a1bb0a89944754fbdf5eb3epoger@google.com raise NoSuchGlobalVariable(var_name) 736f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com 746f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com 756f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.comif __name__ == '__main__': 766f0f5b4aad40fbdcbadcbbc32a38bd4c7d8998bcborenet@google.com print Get(sys.argv[1]) 77