[Buildbot-devel] withproperties or interpolate in ShellCommand

Vasily 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 :-)

Thanks,
Vasily
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:
> http://docs.buildbot.net/latest/manual/new-style-steps.html
>
>
> Regards
>
> Pierre
>
>
> 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
>>
>>     @defer.inlineCallbacks
>>     def renderSync(self):
>>         self.result = yield self.properties.render(self.value)
>>
>>     def __call__(self):
>>         self.renderSync()
>>         try:
>>             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)()
>>         else:
>>             return oldPropertiesRender(self, value)
>>     Propertiesrender = newPropertiesRender
>>
>> patch()
>>
>> This adds second parameter to self.render(), returning back ability to do
>> synchronous properties call.
>>
>> Thanks,
>> Vasily
>>
>>
>> 2014-09-05 13:20 GMT+04:00 Vasily <vasslitvinov at pisem.net>:
>>
>>> Hi,
>>>
>>> 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
>>> example).
>>>
>>> Thanks,
>>> Vasily
>>> 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)
>>> ]
>>>
>>> thisStepFactory.addSteps(someSteps)
>>>
>>> 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.
>>>
>>> Best
>>>      Jürgen
>>>
>>> --
>>>
>>> think project! International GmbH & Co. KG
>>> Jürgen Schulz-Brüssel
>>> Developer
>>>
>>> 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):
>>> www.thinkproject.com/de/info
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Slashdot TV.
>>> Video for Nerds.  Stuff that matters.
>>> http://tv.slashdot.org/
>>> _______________________________________________
>>> Buildbot-devel mailing list
>>> Buildbot-devel at lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/buildbot-devel
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Slashdot TV.
>> Video for Nerds.  Stuff that matters.
>> http://tv.slashdot.org/
>> _______________________________________________
>> Buildbot-devel mailing list
>> Buildbot-devel at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/buildbot-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://buildbot.net/pipermail/devel/attachments/20140906/93403950/attachment.html>


More information about the devel mailing list