[Twisted-web] livepage breaks after reload
noema
mailinglists at shechen.at
Thu Jan 27 19:01:45 MST 2005
Thanx a lot Matt! Your suggestion was close enough.
In case somebody else is interested. This is what finally did the trick
for me:
def locateChild(self, ctx, segments):
r = rend.Page.locateChild(self, ctx, segments[-1:])
if r is not rend.NotFound:
return r
return self, segments[1:]
#noema
Matt Goodall wrote:
> On Wed, 2005-01-26 at 19:29 +0100, noema wrote:
>
>>>You're locate child should look something more like ...
>>>
>>>def locateChild(self, context, segments):
>>>
>>> # Do whatever you need to do here, probably returning
>>> # a resource and the remaining segments.
>>>
>>> # I don't know what it is so let Page (my subclass) try.
>>> return rend.Page.locateChild(self, context, segments)
>>
>>
>>I am not sure I fully understand what you mean. Am I not exactly doing
>>what you are suggesting?! I return a resource and the remaining
>>segments. Just that in my case the resource is the current resource
>>itself and the remaining segments are empty. (to make any child valid
>>and be handled by MyPage (which it does just not with livepage support))
>
>
> Oops, my reasoning was completely flawed although I'm still confident
> I'm correct about the problem.
>
> Liveevil connects to the nevow_liveOutput and nevow_liveInput child
> resources (see rend.LiveEvilChildMixin). By overriding locateChild, and
> not allowing the super class to play, you are blocking access to those
> liveevil resources.
>
>
>> > return rend.Page.locateChild(self, context, segments)
>>
>>Isn't this returned/called anyways if I wouldn't overwrite the inherited
>>locateChild methode.
>
>
> Yes, *if* you don't override locateChild. But in your code, the problem
> occurs once you uncomment locateChild and replace rend.Page's
> implementation of locateChild.
>
> If you want to handle all segments but still let Liveevil work, perhaps
> the following will help:
>
> def locateChild(self, ctx, segments):
> r = rend.Page(self, ctx, segments)
> if r is not appserver.NotFound:
> return r
> return self, ()
>
> That /should/ let the super class locate the resources needed by
> liveevil and make your page handle all other segments.
>
> Hope this makes more sense this time ;-).
>
> Cheers, Matt
>
>
>>
>>
>>>>What follows is some code that illustrates exactly that. Javascript
>>>>events come perfectly through until I uncommend the localChild methode.
>>>>
>>>>#noema
>>>>
>>>>
>>>>
>>>>#################### START OF .TAC FILE ########################
>>>>
>>>>import random
>>>
>>>>from twisted.application import service, internet
>>>>from nevow import loaders, rend, tags, livepage, url
>>>
>>>>
>>>>class MyPage(rend.Page):
>>>> addSlash = True
>>>>
>>>> #def locateChild(self, context, segments):
>>>> # #store the rest of the url for any kind of manual processing
>>>> # self.postpath = segments
>>>> # return self, ()
>>>>
>>>> def onLinkAction(self, client):
>>>> client.set('atag',
>>>> random.choice(('one', 'two', 'three', 'four', 'five')))
>>>>
>>>> def render_link(self, context, data):
>>>> return tags.a(onclick=livepage.handler(self.onLinkAction),
>>>> href=url.here, id="atag")['click!']
>>>>
>>>>
>>>> def render_glue(self, context, data):
>>>> return livepage.glue
>>>>
>>>>
>>>> docFactory = loaders.stan(
>>>> tags.html[
>>>> tags.head[
>>>> tags.title["mypage"],
>>>> ],
>>>> tags.body[
>>>> tags.div[
>>>> render_link
>>>> ],
>>>> tags.span(render=render_glue)
>>>> ]
>>>> ])
>>>>
>>>>
>>>>
>>>>application = service.Application('mypage')
>>>>internet.TCPServer(8080, livepage.LiveSite(MyPage()))\
>>>> .setServiceParent(application)
>>>>
>>>>
>>>>#################### END OF .TAC FILE ##########################
>>
>>
>>_______________________________________________
>>Twisted-web mailing list
>>Twisted-web at twistedmatrix.com
>>http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
>
>
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
More information about the Twisted-web
mailing list