[Buildbot-devel] Using dictionaries with WithProperties objects

Nicolas Alvarez nicolas.alvarez at gmail.com
Tue Dec 29 23:11:02 UTC 2009

Dustin J. Mitchell wrote:
> Nicolas: Python syntax really prevents what you want to see, unless we
> introduce PropertyKeyedDict, PropertyKeyedList, etc., which seems like
> overkill.  If your properties uses are this complex, just use a custom
> step - as you can see above, it's pretty easy.

All we need is a DeferredString class you can put anywhere you currently can 
use WithProperties (eg. a ShellCommand's "command" property). That 
DeferredString would have its evaluate() method called at build time, 
returning a string.

It would be a generalization of WithProperties. WithProperties could be a 
subclass of DeferredString that implements evaluate() by calling getProperty 
on the build object.

There could be a SimpleDeferredString subclass taking take a function in the 
constructor (or maybe do this in the default impl of DeferredString):

class SimpleDeferredString(DeferredString):
    def __impl__(self, func):
        self.func = func
    def evaluate(self, step):
        f = self.func
        return f(step)

so you could do this:

    command=["tar", "czf",
        SimpleDeferredString(lambda step: d[step.getProperty("foo")]),

so you don't even have to create a DictionaryLookupDeferredString subclass 
in the master.cfg.


(I read mailing lists through Gmane. Please don't Cc me on replies; it makes 
me get one message on my newsreader and another on email.)

More information about the devel mailing list