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.client.common_lib.cros.graphite import autotest_es 12from autotest_lib.frontend import setup_django_environment 13from autotest_lib.frontend.afe import models 14 15 16# Name of the default board. For boards that don't have stable version 17# explicitly set, version for the default board will be used. 18DEFAULT = 'DEFAULT' 19 20# Type of metadata to store stable_version changes. 21_STABLE_VERSION_TYPE = 'stable_version' 22 23def get_all(): 24 """Get stable versions of all boards. 25 26 @return: A dictionary of boards and stable versions. 27 """ 28 versions = dict([(v.board, v.version) 29 for v in models.StableVersion.objects.all()]) 30 # Set default to the global config value of CROS.stable_cros_version if 31 # there is no entry in afe_stable_versions table. 32 if not versions: 33 versions = {DEFAULT: global_config.global_config.get_config_value( 34 'CROS', 'stable_cros_version')} 35 return versions 36 37 38def get(board=DEFAULT, android=False): 39 """Get stable version for the given board. 40 41 @param board: Name of the board, default to value `DEFAULT`. 42 @param android: If True, indicates we are looking up a Android/Brillo-based 43 board. There is no default version that works for all 44 Android/Brillo boards. If False, we are looking up a Chrome 45 OS based board. 46 47 @return: Stable version of the given board. If the given board is not listed 48 in afe_stable_versions table, DEFAULT will be used. 49 Return global_config value of CROS.stable_cros_version if 50 afe_stable_versions table does not have entry of board DEFAULT. 51 """ 52 if board == DEFAULT and android: 53 return None 54 try: 55 return models.StableVersion.objects.get(board=board).version 56 except django.core.exceptions.ObjectDoesNotExist: 57 if board == DEFAULT: 58 return global_config.global_config.get_config_value( 59 'CROS', 'stable_cros_version') 60 elif android: 61 return global_config.global_config.get_config_value( 62 'ANDROID', 'stable_version_%s' % board, default=None) 63 else: 64 return get(board=DEFAULT) 65 66 67def set(version, board=DEFAULT): 68 """Set stable version for the given board. 69 70 @param version: The new value of stable version for given board. 71 @param board: Name of the board, default to value `DEFAULT`. 72 """ 73 try: 74 stable_version = models.StableVersion.objects.get(board=board) 75 stable_version.version = version 76 stable_version.save() 77 except django.core.exceptions.ObjectDoesNotExist: 78 models.StableVersion.objects.create(board=board, version=version) 79 autotest_es.post(type_str=_STABLE_VERSION_TYPE, 80 metadata={'board': board, 'version': version}) 81 82 83def delete(board): 84 """Delete stable version record for the given board. 85 86 @param board: Name of the board. 87 """ 88 stable_version = models.StableVersion.objects.get(board=board) 89 stable_version.delete() 90 autotest_es.post(type_str=_STABLE_VERSION_TYPE, 91 metadata={'board': board, 'version': get()}) 92