blob: bb6c38fc841d553970b27ec04b851bea0d53c285 [file] [log] [blame]
epoger@google.comfd040112013-08-20 16:21:55 +00001#!/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
borenet@google.com6f0f5b42014-01-09 21:41:39 +000011
borenet@google.com6f0f5b42014-01-09 21:41:39 +000012import HTMLParser
epoger@google.comfd040112013-08-20 16:21:55 +000013import json
commit-bot@chromium.org9f8e2822014-01-14 19:18:45 +000014import re
borenet2e81e512014-06-05 07:32:15 -070015import retrieve_from_googlesource
epoger@google.comfd040112013-08-20 16:21:55 +000016import svn
borenet@google.com6f0f5b42014-01-09 21:41:39 +000017import sys
borenet@google.com6f0f5b42014-01-09 21:41:39 +000018
epoger@google.comfd040112013-08-20 16:21:55 +000019
20_global_vars = None
21
borenet@google.com4b897fa2013-12-02 20:27:16 +000022
borenet2e81e512014-06-05 07:32:15 -070023SKIABOT_REPO = 'https://skia.googlesource.com/buildbot'
24_GLOBAL_VARS_PATH = 'site_config/global_variables.json'
borenet@google.com4b897fa2013-12-02 20:27:16 +000025
26
27class GlobalVarsRetrievalError(Exception):
28 """Exception which is raised when the global_variables.json file cannot be
29 retrieved from the Skia buildbot repository."""
epoger@google.comfd040112013-08-20 16:21:55 +000030 pass
31
borenet@google.com4b897fa2013-12-02 20:27:16 +000032
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
epoger@google.comfd040112013-08-20 16:21:55 +000047def Get(var_name):
borenet@google.com6f0f5b42014-01-09 21:41:39 +000048 """Return the value associated with this name in global_variables.json.
commit-bot@chromium.org90a17672014-05-16 19:19:31 +000049
borenet@google.com6f0f5b42014-01-09 21:41:39 +000050 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 """
epoger@google.comfd040112013-08-20 16:21:55 +000057 global _global_vars
58 if not _global_vars:
borenet@google.com4b897fa2013-12-02 20:27:16 +000059 try:
borenet2e81e512014-06-05 07:32:15 -070060 global_vars_text = retrieve_from_googlesource.get(SKIABOT_REPO,
61 _GLOBAL_VARS_PATH)
commit-bot@chromium.org95ead5b2014-04-29 17:11:19 +000062 except Exception as e:
borenet2e81e512014-06-05 07:32:15 -070063 raise GlobalVarsRetrievalError('Failed to retrieve %s from %s:\n%s' %
64 (_GLOBAL_VARS_PATH, SKIABOT_REPO, str(e)))
borenet@google.com4b897fa2013-12-02 20:27:16 +000065 try:
66 _global_vars = json.loads(global_vars_text)
67 except ValueError as e:
68 raise JsonDecodeError(e.message + '\n' + global_vars_text)
epoger@google.comfd040112013-08-20 16:21:55 +000069 try:
70 return _global_vars[var_name]['value']
71 except KeyError:
72 raise NoSuchGlobalVariable(var_name)
borenet@google.com6f0f5b42014-01-09 21:41:39 +000073
74
75if __name__ == '__main__':
76 print Get(sys.argv[1])