blob: e4fbf38c480e68881c2b88581d451911465cbe29 [file] [log] [blame]
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Utility classes to enhance process.properties.Properties usefulness."""
import buildbot
from buildbot.process.properties import WithProperties
class ListProperties(WithProperties):
"""Act like a list but skip over items that are None.
This class doesn't use WithProperties methods but inherits from it since it is
used as a flag in Properties.render() to defer the actual work to
self.render()."""
compare_attrs = ('items')
def __init__(self, items):
"""items should be a list."""
# Dummy initialization.
WithProperties.__init__(self, '')
self.items = items
# For buildbot 8.3 and below.
if buildbot.version == '0.7.12':
def render(self, pmap):
results = []
# For each optional item, look up the corresponding property in the
# PropertyMap.
for item in self.items:
if isinstance(item, WithProperties):
item = item.render(pmap)
# Skip over None items.
if item is not None and item != '':
results.append(item)
return results
# For buildbot 8.4 and above.
if buildbot.version == '0.8.4p1':
def getRenderingFor(self, build):
results = []
# For each optional item, look up the corresponding property in the
# PropertyMap.
for item in self.items:
if isinstance(item, WithProperties):
item = item.getRenderingFor(build)
# Skip over None items.
if item is not None and item != '':
results.append(item)
return results