Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 667c7534 authored by Tao Bao's avatar Tao Bao
Browse files

releasetools: Add dict-like setter to BuildInfo.

BuildInfo already has dict-like getters. This CL adds the matching
setter method to keep it backward compatible with device-specific
scripts that expect a dict.

It also adds items() method that allows iterating the items.

Bug: 111087332
Test: python -m unittest test_ota_from_target_files.BuildInfoTest
Test: Generate an incremental OTA that sets info_dict in device-specific
      releasetools script.
Change-Id: Idd033f98a9186740f9da1a300d4c2bdddd9c1345
parent 8c01b71e
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -250,6 +250,8 @@ class BuildInfo(object):
  def __init__(self, info_dict, oem_dicts):
    """Initializes a BuildInfo instance with the given dicts.

    Note that it only wraps up the given dicts, without making copies.

    Arguments:
      info_dict: The build-time info dict.
      oem_dicts: A list of OEM dicts (which is parsed from --oem_settings). Note
@@ -289,9 +291,15 @@ class BuildInfo(object):
  def __getitem__(self, key):
    return self.info_dict[key]

  def __setitem__(self, key, value):
    self.info_dict[key] = value

  def get(self, key, default=None):
    return self.info_dict.get(key, default)

  def items(self):
    return self.info_dict.items()

  def GetBuildProp(self, prop):
    """Returns the inquired build property."""
    try:
+16 −0
Original line number Diff line number Diff line
@@ -190,6 +190,16 @@ class BuildInfoTest(unittest.TestCase):
    self.assertRaises(KeyError,
                      lambda: target_info['build.prop']['ro.build.foo'])

  def test___setitem__(self):
    target_info = BuildInfo(copy.deepcopy(self.TEST_INFO_DICT), None)
    self.assertEqual('value1', target_info['property1'])
    target_info['property1'] = 'value2'
    self.assertEqual('value2', target_info['property1'])

    self.assertEqual('build-foo', target_info['build.prop']['ro.build.foo'])
    target_info['build.prop']['ro.build.foo'] = 'build-bar'
    self.assertEqual('build-bar', target_info['build.prop']['ro.build.foo'])

  def test_get(self):
    target_info = BuildInfo(self.TEST_INFO_DICT, None)
    self.assertEqual('value1', target_info.get('property1'))
@@ -209,6 +219,12 @@ class BuildInfoTest(unittest.TestCase):
    self.assertRaises(KeyError,
                      lambda: target_info.get('build.prop')['ro.build.foo'])

  def test_items(self):
    target_info = BuildInfo(self.TEST_INFO_DICT, None)
    items = target_info.items()
    self.assertIn(('property1', 'value1'), items)
    self.assertIn(('property2', 4096), items)

  def test_GetBuildProp(self):
    target_info = BuildInfo(self.TEST_INFO_DICT, None)
    self.assertEqual('build-foo', target_info.GetBuildProp('ro.build.foo'))