[Buildbot-devel] withproperties or interpolate in ShellCommand
vasslitvinov at pisem.net
Sat Sep 6 09:43:15 UTC 2014
I completely agree. The code I provided just solved the incompatibility we
stumbled into in the easy but unmaintainable way.
So it's loads better to just write your steps right as Pierre suggests :-)
06 сент. 2014 г. 12:37 пользователь "Pierre Tardy" <tardyp at gmail.com>
> I would strongly advise to avoid using such hacks.
> Sounds like your use cases would be best handled if you rewrite your
> customs steps as new style steps:
> On Fri, Sep 5, 2014 at 5:16 PM, Vasily <vasslitvinov at pisem.net> wrote:
>> Hi again,
>> The class to make synchronous call I've implemented is below:
>> from twisted.internet import defer
>> from buildbot.process.properties import Properties
>> class RenderPropertiesSync(object):
>> def __init__(self, properties, value):
>> self.properties = properties
>> self.value = value
>> def renderSync(self):
>> self.result = yield self.properties.render(self.value)
>> def __call__(self):
>> return self.result
>> except AttributeError:
>> raise ValueError("Bad value supplied - cannot substitute
>> properties in it")
>> And to get the value of a WithProperties() stuff you do this:
>> def patch():
>> oldPropertiesRender = Properties.render
>> def newPropertiesRender(self, value, sync = False):
>> if sync:
>> return RenderPropertiesSync(self, value)()
>> return oldPropertiesRender(self, value)
>> Propertiesrender = newPropertiesRender
>> This adds second parameter to self.render(), returning back ability to do
>> synchronous properties call.
>> 2014-09-05 13:20 GMT+04:00 Vasily <vasslitvinov at pisem.net>:
>>> I recall they changed the behavior either at 0.8.5 or 0.8.7 - prior to
>>> that change WithProperties call (and call to self.render) was synchronous,
>>> and all worked okay, but in latest code both are asynchronous, so it isn't
>>> easy to get the same result.
>>> I have a piece of code that does synchronous substitution of the
>>> properties, but I'll be able to post it later - right now I'm writing this
>>> from my cell phone, and the piece is on my laptop. I'll try to post it
>>> sometime later if you need it, but it is probably better to embrace new
>>> logic and use "renderables" field (see ShellCommand implementation for the
>>> 05 сент. 2014 г. 12:29 пользователь "Jürgen Schulz-Brüssel" <
>>> juergen.schulz-bruessel at thinkproject.com> написал:
>>> sorry of getting back on this so late.
>>> > I'm surprised that you got an error about Interpolate when you were
>>> > using WithProperties.
>>> that was obviously misunderstanding. I used to use WithProperties and
>>> tried Interpolate as well (after upgrading), with the same result.
>>> > I see that you were calling 'self.render', which suggests that this
>>> > 'self.command = ' is not in the step's constructor, but in some method
>>> > that runs later, after the properties have been rendered.
>>> right. My master.cfg looks like this:
>>> someSteps = [
>>> myStep1(configInfo, someStepConfig),
>>> myStep2(configInfo, someStepConfig)
>>> self.command is called in myStep1 etc.
>>> > Most likely what is happening is that Buildbot is then trying to
>>> send the
>>> > command, including the Interpolate instance, to the slave, and Twisted
>>> > is complaining that you're not allowed to send such objects over the
>>> > network.
>>> In this cases I would expect an error in twistd.log -- but nothing was
>>> showing up there. The error is just shown in the regarding stdio of the
>>> step in question.
>>> > In order to use renderables like Interpolate, you need to put them in
>>> > place before the step is started, which basically means in the step's
>>> > constructor.
>>> this would mean, that I would pass the information into the call of
>>> 'myStep1' for example? Has this behavior changed (actually 0.8.6 seems
>>> quite old by now)?
>>> I helped myself by using
>>> revision = self.getProperty('revision') in the start method of the
>>> subclassed shell command.
>>> think project! International GmbH & Co. KG
>>> Jürgen Schulz-Brüssel
>>> Phone +49 30 92 10 17-83
>>> Fax +49 30 92 10 17-50
>>> juergen.schulz-bruessel at thinkproject.com
>>> Legal information (imprint): www.thinkproject.com/en/info
>>> Rechtliche Informationen zum Absender (Impressum):
>>> Slashdot TV.
>>> Video for Nerds. Stuff that matters.
>>> Buildbot-devel mailing list
>>> Buildbot-devel at lists.sourceforge.net
>> Slashdot TV.
>> Video for Nerds. Stuff that matters.
>> Buildbot-devel mailing list
>> Buildbot-devel at lists.sourceforge.net
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the devel