[Twisted-web] [Nevow] childFactory being called more than once
Manlio Perillo
manlio_perillo at libero.it
Wed Feb 21 05:19:55 CST 2007
Valentino Volonghi aka Dialtone ha scritto:
> On Wed, 21 Feb 2007 11:19:41 +0100, Manlio Perillo
> <manlio_perillo at libero.it> wrote:
>> Just forget it!
>>
>> I have a personalized locateChild in the base class, where I do:
>>
>> def locateChild(self, ctx, segments):
>> request = inevow.IRequest(ctx)
>> if request.args.get('login-failure'):
>> import login
>>
>> return login.Login(self.avatar, failure=True), ''
>>
>> res = rend.Page.locateChild(self, ctx, segments)
>> if res == rend.NotFound:
>> return NotFound(self.avatar), ''
>>
>> return rend.Page.locateChild(self, ctx, segments) # <===
>
> This code is wrong in 2 ways:
>
> 1) locateChild can return deferreds, you are not covering this aspect.
Right, thanks.
> 2) Why calling locateChild twice when once is enough? if the page is not
> rend.NotFound then it's the page you want... just return it.
>
Yes, I have marked the code with an arrow!
It was the first thing I notice when I have read the code.
>> By the way, is this code the best way to handle a login failure?
>
> Can't spot anything terribly wrong there.
>
Ok.
>> Moreover, I still do not understand why, when replacing macro with
>> render, locateChild is called 3 times, instead of 2.
>
> You probably have other confusions in your source. As I said there's no
> link _at all_ between rendering and child locating.
>
Now the code is all ok.
Regards Manlio Perillo
More information about the Twisted-web
mailing list