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 8 import common 9 import django.core.exceptions 10 from autotest_lib.client.common_lib import global_config 11 from autotest_lib.frontend import setup_django_environment 12 from 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. 17 DEFAULT = 'DEFAULT' 18 19 # Type of metadata to store stable_version changes. 20 _STABLE_VERSION_TYPE = 'stable_version' 21 22 def 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 37 def 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 66 def 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 80 def 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