aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/buildbot_globals.py
blob: c3d222739665ae86a43269b66cf419caadf7f543 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/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 .
"""

import json
import svn

_global_vars = None


GLOBAL_VARS_JSON_URL = (
    'http://skia.googlecode.com/svn/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 Get(var_name):
  '''Return the value associated with this name in global_variables.json.
  Raises NoSuchGlobalVariable if there is no variable with that name.'''
  global _global_vars
  if not _global_vars:
    try:
      global_vars_text = svn.Cat(GLOBAL_VARS_JSON_URL)
    except Exception:
      raise GlobalVarsRetrievalError('Failed to retrieve %s.' %
                                     GLOBAL_VARS_JSON_URL)
    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)