16964fa53798525f39cd490e26481e8d923815406Dan Shi# Copyright 2014 The Chromium OS Authors. All rights reserved. 26964fa53798525f39cd490e26481e8d923815406Dan Shi# Use of this source code is governed by a BSD-style license that can be 36964fa53798525f39cd490e26481e8d923815406Dan Shi# found in the LICENSE file. 46964fa53798525f39cd490e26481e8d923815406Dan Shi 56964fa53798525f39cd490e26481e8d923815406Dan Shi# This file contains utility functions to get and set stable versions for given 66964fa53798525f39cd490e26481e8d923815406Dan Shi# boards. 76964fa53798525f39cd490e26481e8d923815406Dan Shi 86964fa53798525f39cd490e26481e8d923815406Dan Shiimport common 96964fa53798525f39cd490e26481e8d923815406Dan Shiimport django.core.exceptions 106964fa53798525f39cd490e26481e8d923815406Dan Shifrom autotest_lib.client.common_lib import global_config 11b72f4fbcf1583da27f09f4abb9d8162530bf4559Gabe Blackfrom autotest_lib.client.common_lib.cros.graphite import autotest_es 126964fa53798525f39cd490e26481e8d923815406Dan Shifrom autotest_lib.frontend import setup_django_environment 136964fa53798525f39cd490e26481e8d923815406Dan Shifrom autotest_lib.frontend.afe import models 146964fa53798525f39cd490e26481e8d923815406Dan Shi 156964fa53798525f39cd490e26481e8d923815406Dan Shi 166964fa53798525f39cd490e26481e8d923815406Dan Shi# Name of the default board. For boards that don't have stable version 176964fa53798525f39cd490e26481e8d923815406Dan Shi# explicitly set, version for the default board will be used. 186964fa53798525f39cd490e26481e8d923815406Dan ShiDEFAULT = 'DEFAULT' 196964fa53798525f39cd490e26481e8d923815406Dan Shi 2025e1fd446390578299d7b7da0f84914a0728c5fcDan Shi# Type of metadata to store stable_version changes. 2125e1fd446390578299d7b7da0f84914a0728c5fcDan Shi_STABLE_VERSION_TYPE = 'stable_version' 2225e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 236964fa53798525f39cd490e26481e8d923815406Dan Shidef get_all(): 246964fa53798525f39cd490e26481e8d923815406Dan Shi """Get stable versions of all boards. 256964fa53798525f39cd490e26481e8d923815406Dan Shi 266964fa53798525f39cd490e26481e8d923815406Dan Shi @return: A dictionary of boards and stable versions. 276964fa53798525f39cd490e26481e8d923815406Dan Shi """ 2825e1fd446390578299d7b7da0f84914a0728c5fcDan Shi versions = dict([(v.board, v.version) 2925e1fd446390578299d7b7da0f84914a0728c5fcDan Shi for v in models.StableVersion.objects.all()]) 3025e1fd446390578299d7b7da0f84914a0728c5fcDan Shi # Set default to the global config value of CROS.stable_cros_version if 3125e1fd446390578299d7b7da0f84914a0728c5fcDan Shi # there is no entry in afe_stable_versions table. 3225e1fd446390578299d7b7da0f84914a0728c5fcDan Shi if not versions: 3325e1fd446390578299d7b7da0f84914a0728c5fcDan Shi versions = {DEFAULT: global_config.global_config.get_config_value( 3425e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 'CROS', 'stable_cros_version')} 3525e1fd446390578299d7b7da0f84914a0728c5fcDan Shi return versions 366964fa53798525f39cd490e26481e8d923815406Dan Shi 376964fa53798525f39cd490e26481e8d923815406Dan Shi 38beb2bb20028027fa31c2790e54619c82f4d51422Simran Basidef get(board=DEFAULT, android=False): 396964fa53798525f39cd490e26481e8d923815406Dan Shi """Get stable version for the given board. 406964fa53798525f39cd490e26481e8d923815406Dan Shi 416964fa53798525f39cd490e26481e8d923815406Dan Shi @param board: Name of the board, default to value `DEFAULT`. 42beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi @param android: If True, indicates we are looking up a Android/Brillo-based 43beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi board. There is no default version that works for all 44beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi Android/Brillo boards. If False, we are looking up a Chrome 45beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi OS based board. 46beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi 4725e1fd446390578299d7b7da0f84914a0728c5fcDan Shi @return: Stable version of the given board. If the given board is not listed 4825e1fd446390578299d7b7da0f84914a0728c5fcDan Shi in afe_stable_versions table, DEFAULT will be used. 4925e1fd446390578299d7b7da0f84914a0728c5fcDan Shi Return global_config value of CROS.stable_cros_version if 5025e1fd446390578299d7b7da0f84914a0728c5fcDan Shi afe_stable_versions table does not have entry of board DEFAULT. 516964fa53798525f39cd490e26481e8d923815406Dan Shi """ 52beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi if board == DEFAULT and android: 53beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi return None 546964fa53798525f39cd490e26481e8d923815406Dan Shi try: 556964fa53798525f39cd490e26481e8d923815406Dan Shi return models.StableVersion.objects.get(board=board).version 566964fa53798525f39cd490e26481e8d923815406Dan Shi except django.core.exceptions.ObjectDoesNotExist: 576964fa53798525f39cd490e26481e8d923815406Dan Shi if board == DEFAULT: 586964fa53798525f39cd490e26481e8d923815406Dan Shi return global_config.global_config.get_config_value( 596964fa53798525f39cd490e26481e8d923815406Dan Shi 'CROS', 'stable_cros_version') 60beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi elif android: 61beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi return global_config.global_config.get_config_value( 62beb2bb20028027fa31c2790e54619c82f4d51422Simran Basi 'ANDROID', 'stable_version_%s' % board, default=None) 636964fa53798525f39cd490e26481e8d923815406Dan Shi else: 6425e1fd446390578299d7b7da0f84914a0728c5fcDan Shi return get(board=DEFAULT) 6525e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 6625e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 6725e1fd446390578299d7b7da0f84914a0728c5fcDan Shidef set(version, board=DEFAULT): 6825e1fd446390578299d7b7da0f84914a0728c5fcDan Shi """Set stable version for the given board. 6925e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 7025e1fd446390578299d7b7da0f84914a0728c5fcDan Shi @param version: The new value of stable version for given board. 7125e1fd446390578299d7b7da0f84914a0728c5fcDan Shi @param board: Name of the board, default to value `DEFAULT`. 7225e1fd446390578299d7b7da0f84914a0728c5fcDan Shi """ 7325e1fd446390578299d7b7da0f84914a0728c5fcDan Shi try: 7425e1fd446390578299d7b7da0f84914a0728c5fcDan Shi stable_version = models.StableVersion.objects.get(board=board) 7525e1fd446390578299d7b7da0f84914a0728c5fcDan Shi stable_version.version = version 7625e1fd446390578299d7b7da0f84914a0728c5fcDan Shi stable_version.save() 7725e1fd446390578299d7b7da0f84914a0728c5fcDan Shi except django.core.exceptions.ObjectDoesNotExist: 7825e1fd446390578299d7b7da0f84914a0728c5fcDan Shi models.StableVersion.objects.create(board=board, version=version) 79b72f4fbcf1583da27f09f4abb9d8162530bf4559Gabe Black autotest_es.post(type_str=_STABLE_VERSION_TYPE, 80b72f4fbcf1583da27f09f4abb9d8162530bf4559Gabe Black metadata={'board': board, 'version': version}) 8125e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 8225e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 8325e1fd446390578299d7b7da0f84914a0728c5fcDan Shidef delete(board): 8425e1fd446390578299d7b7da0f84914a0728c5fcDan Shi """Delete stable version record for the given board. 8525e1fd446390578299d7b7da0f84914a0728c5fcDan Shi 8625e1fd446390578299d7b7da0f84914a0728c5fcDan Shi @param board: Name of the board. 8725e1fd446390578299d7b7da0f84914a0728c5fcDan Shi """ 8825e1fd446390578299d7b7da0f84914a0728c5fcDan Shi stable_version = models.StableVersion.objects.get(board=board) 8925e1fd446390578299d7b7da0f84914a0728c5fcDan Shi stable_version.delete() 90b72f4fbcf1583da27f09f4abb9d8162530bf4559Gabe Black autotest_es.post(type_str=_STABLE_VERSION_TYPE, 91b72f4fbcf1583da27f09f4abb9d8162530bf4559Gabe Black metadata={'board': board, 'version': get()}) 92