Index: third_party/buildbot_7_12/buildbot/process/properties.py |
diff --git a/third_party/buildbot_7_12/buildbot/process/properties.py b/third_party/buildbot_7_12/buildbot/process/properties.py |
deleted file mode 100644 |
index c98b91dbfca89f0341122d6f420f978823c217a2..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/process/properties.py |
+++ /dev/null |
@@ -1,160 +0,0 @@ |
-import re |
-import weakref |
-from buildbot import util |
- |
-class Properties(util.ComparableMixin): |
- """ |
- I represent a set of properties that can be interpolated into various |
- strings in buildsteps. |
- |
- @ivar properties: dictionary mapping property values to tuples |
- (value, source), where source is a string identifing the source |
- of the property. |
- |
- Objects of this class can be read like a dictionary -- in this case, |
- only the property value is returned. |
- |
- As a special case, a property value of None is returned as an empty |
- string when used as a mapping. |
- """ |
- |
- compare_attrs = ('properties',) |
- |
- def __init__(self, **kwargs): |
- """ |
- @param kwargs: initial property values (for testing) |
- """ |
- self.properties = {} |
- self.pmap = PropertyMap(self) |
- if kwargs: self.update(kwargs, "TEST") |
- |
- def __getstate__(self): |
- d = self.__dict__.copy() |
- del d['pmap'] |
- return d |
- |
- def __setstate__(self, d): |
- self.__dict__ = d |
- self.pmap = PropertyMap(self) |
- |
- def __contains__(self, name): |
- return name in self.properties |
- |
- def __getitem__(self, name): |
- """Just get the value for this property.""" |
- rv = self.properties[name][0] |
- return rv |
- |
- def has_key(self, name): |
- return self.properties.has_key(name) |
- |
- def getProperty(self, name, default=None): |
- """Get the value for the given property.""" |
- return self.properties.get(name, (default,))[0] |
- |
- def getPropertySource(self, name): |
- return self.properties[name][1] |
- |
- def asList(self): |
- """Return the properties as a sorted list of (name, value, source)""" |
- l = [ (k, v[0], v[1]) for k,v in self.properties.items() ] |
- l.sort() |
- return l |
- |
- def __repr__(self): |
- return repr(dict([ (k,v[0]) for k,v in self.properties.iteritems() ])) |
- |
- def setProperty(self, name, value, source): |
- self.properties[name] = (value, source) |
- |
- def update(self, dict, source): |
- """Update this object from a dictionary, with an explicit source specified.""" |
- for k, v in dict.items(): |
- self.properties[k] = (v, source) |
- |
- def updateFromProperties(self, other): |
- """Update this object based on another object; the other object's """ |
- self.properties.update(other.properties) |
- |
- def render(self, value): |
- """ |
- Return a variant of value that has any WithProperties objects |
- substituted. This recurses into Python's compound data types. |
- """ |
- # we use isinstance to detect Python's standard data types, and call |
- # this function recursively for the values in those types |
- if isinstance(value, (str, unicode)): |
- return value |
- elif isinstance(value, WithProperties): |
- return value.render(self.pmap) |
- elif isinstance(value, list): |
- return [ self.render(e) for e in value ] |
- elif isinstance(value, tuple): |
- return tuple([ self.render(e) for e in value ]) |
- elif isinstance(value, dict): |
- return dict([ (self.render(k), self.render(v)) for k,v in value.iteritems() ]) |
- else: |
- return value |
- |
-class PropertyMap: |
- """ |
- Privately-used mapping object to implement WithProperties' substitutions, |
- including the rendering of None as ''. |
- """ |
- colon_minus_re = re.compile(r"(.*):-(.*)") |
- colon_plus_re = re.compile(r"(.*):\+(.*)") |
- def __init__(self, properties): |
- # use weakref here to avoid a reference loop |
- self.properties = weakref.ref(properties) |
- |
- def __getitem__(self, key): |
- properties = self.properties() |
- assert properties is not None |
- |
- # %(prop:-repl)s |
- # if prop exists, use it; otherwise, use repl |
- mo = self.colon_minus_re.match(key) |
- if mo: |
- prop, repl = mo.group(1,2) |
- if properties.has_key(prop): |
- rv = properties[prop] |
- else: |
- rv = repl |
- else: |
- # %(prop:+repl)s |
- # if prop exists, use repl; otherwise, an empty string |
- mo = self.colon_plus_re.match(key) |
- if mo: |
- prop, repl = mo.group(1,2) |
- if properties.has_key(prop): |
- rv = repl |
- else: |
- rv = '' |
- else: |
- rv = properties[key] |
- |
- # translate 'None' to an empty string |
- if rv is None: rv = '' |
- return rv |
- |
-class WithProperties(util.ComparableMixin): |
- """ |
- This is a marker class, used fairly widely to indicate that we |
- want to interpolate build properties. |
- """ |
- |
- compare_attrs = ('fmtstring', 'args') |
- |
- def __init__(self, fmtstring, *args): |
- self.fmtstring = fmtstring |
- self.args = args |
- |
- def render(self, pmap): |
- if self.args: |
- strings = [] |
- for name in self.args: |
- strings.append(pmap[name]) |
- s = self.fmtstring % tuple(strings) |
- else: |
- s = self.fmtstring % pmap |
- return s |