[Twisted-web] livepage breaks after reload
noema
mailinglists at shechen.at
Tue Jan 25 19:25:37 MST 2005
> In weever (http://vercingetorix.dyndns.org:20080) I use liveevil
> with nevow from svn and it only breaks with safari.
Your app seems to work on my browsers
> I think you are probably using an old version of nevow or
> something like that.
I just svn'd nevow the other day and to make sure I checked out the most
current version again today -> the problem persists.
> otherwise you are probably doing something
> wrong with the code but it's hard to tell without any code.
OK ... I boiled down my code to the bare minimum (originally it is
derived from the chatola app) and as i suspected the problem is still
reproducable. The following is a .tac file which I start with "twistd
-noy <filename>". It starts a server with one page that has two livepage
handlers. One of them is called when the page loads another one when you
click the link. Everything works fine until I reload the page and/or add
some locateChild action.
More constructive thoughts appreciated.
_noema
#################### START OF .TAC FILE ########################
import random
from twisted.cred import portal, checkers, credentials
from twisted.application import service, internet
from nevow import inevow, loaders, rend, tags
from nevow import livepage, guard, url, appserver
class MyPageRealm:
__implements__ = portal.IRealm
def __init__(self):
self.clients = []
self.topic = "test1"
def requestAvatar(self, avatarId, mind, *interfaces):
if inevow.IResource in interfaces:
if avatarId is checkers.ANONYMOUS:
mind.userId = random.choice(('one', 'two', 'three'))
def onSessionExpire():
self.userLeft(mind)
return (inevow.IResource,
MyPage([self, mind]), onSessionExpire)
raise NotImplementedError("Can't support that interface.")
def userJoined(self, client):
if client in self.clients:
self.userLeft(client)
self.clients.append(client)
def userLeft(self, client):
self.clients.remove(client)
class MyPage(rend.Page):
def __init__(self, data):
rend.Page.__init__(self, data)
self.realm = data[0]
self.client = data[1]
def render_body(self, ctx, data):
self.realm.userJoined(self.client)
self.client.set('sometext', tags.h1['This is from LivePage!'])
session = inevow.ISession(ctx)
def unload(client):
session.expire()
return ctx.tag(onunload=livepage.handler(unload))
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(render=render_body)[
tags.div(id='sometext')['to be filled by livepage'],
tags.div[
render_link
],
tags.span(render=render_glue)
]
])
realm = MyPageRealm()
portal = portal.Portal(realm)
portal.registerChecker(checkers.AllowAnonymousAccess(),
credentials.IAnonymous)
site = appserver.NevowSite(
guard.SessionWrapper(portal, mindFactory=livepage.LiveEvil))
application = service.Application("mypage")
internet.TCPServer(8080, site).setServiceParent(application)
#################### END OF .TAC FILE ##########################
More information about the Twisted-web
mailing list