• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2014 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# This file contains utility functions to get and set stable versions for given
6# boards.
7
8import common
9import django.core.exceptions
10from autotest_lib.client.common_lib import global_config
11from autotest_lib.frontend import setup_django_environment
12from autotest_lib.frontend.afe import models
13
14
15# Name of the default board. For boards that don't have stable version
16# explicitly set, version for the default board will be used.
17DEFAULT = 'DEFAULT'
18
19# Type of metadata to store stable_version changes.
20_STABLE_VERSION_TYPE = 'stable_version'
21
22def get_all():
23    """Get stable versions of all boards.
24
25    @return: A dictionary of boards and stable versions.
26    """
27    versions = dict([(v.board, v.version)
28                     for v in models.StableVersion.objects.all()])
29    # Set default to the global config value of CROS.stable_cros_version if
30    # there is no entry in afe_stable_versions table.
31    if not versions:
32        versions = {DEFAULT: global_config.global_config.get_config_value(
33                            'CROS', 'stable_cros_version')}
34    return versions
35
36
37def get(board=DEFAULT, android=False):
38    """Get stable version for the given board.
39
40    @param board: Name of the board, default to value `DEFAULT`.
41    @param android: If True, indicates we are looking up a Android/Brillo-based
42                    board. There is no default version that works for all
43                    Android/Brillo boards. If False, we are looking up a Chrome
44                    OS based board.
45
46    @return: Stable version of the given board. If the given board is not listed
47             in afe_stable_versions table, DEFAULT will be used.
48             Return global_config value of CROS.stable_cros_version if
49             afe_stable_versions table does not have entry of board DEFAULT.
50    """
51    if board == DEFAULT and android:
52        return None
53    try:
54        return models.StableVersion.objects.get(board=board).version
55    except django.core.exceptions.ObjectDoesNotExist:
56        if board == DEFAULT:
57            return global_config.global_config.get_config_value(
58                    'CROS', 'stable_cros_version')
59        elif android:
60            return global_config.global_config.get_config_value(
61                    'ANDROID', 'stable_version_%s' % board, default=None)
62        else:
63            return get(board=DEFAULT)
64
65
66def set(version, board=DEFAULT):
67    """Set stable version for the given board.
68
69    @param version: The new value of stable version for given board.
70    @param board: Name of the board, default to value `DEFAULT`.
71    """
72    try:
73        stable_version = models.StableVersion.objects.get(board=board)
74        stable_version.version = version
75        stable_version.save()
76    except django.core.exceptions.ObjectDoesNotExist:
77        models.StableVersion.objects.create(board=board, version=version)
78
79
80def delete(board):
81    """Delete stable version record for the given board.
82
83    @param board: Name of the board.
84    """
85    stable_version = models.StableVersion.objects.get(board=board)
86    stable_version.delete()
87