Home | History | Annotate | Download | only in site_utils
      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