[Twisted-web] nevow athena version 9.0 vs later
Михаил Михайлов
mihailovmv77 at gmail.com
Sat Dec 8 16:43:31 EST 2007
Hi
my example consists 2 files: aacc_web.py and aacc_web.js
python aacc_web.py
will start on port 8080
generated html contains textarea and in case of input
prints the entered symbol on the console and in textarea
It works ONLY in version 9.0 and does NOT (!) work in last versions
Explain what's wrong
---------------------------------------------------------------------------=
-------------------------------------------------------
aacc_web.js
//import Nevow.Athena
function keypress(event)
{
var key =3D event.charCode ? event.charCode : event.keyCode
var node =3D $("termid");
Nevow.Athena.Widget.get(node).callRemote("aacc_keypress", event.charCod=
e,
event.keyCode, event.metaKey, event.altKey, event.ctrlKey, event.shiftKey);
}
AaccWeb.Users =3D Nevow.Athena.Widget.subclass("AaccWeb.Users");
AaccWeb.Users.methods(
function start(self, node, event) {
self.callRemote("aacc_start");
return false;
},
function showConference(self, toWhat) {
var client_data =3D Nevow.Athena.NodeByAttribute(self.node, "class",
"Users");
client_data.innerHTML =3D toWhat;
}
);
---------------------------------------------------------------------------=
-------------------------------------------------------
aacc_web.py code
# -*- coding: utf-8 -*-
""" aacc_web
"""
from twisted.application import service, internet
from twisted.internet import reactor, protocol, defer, task, ssl
from twisted.protocols import basic
from twisted.python import log, logfile, util
from twisted.cred import portal, checkers, credentials
from twisted.web import static
from nevow import appserver
from nevow import tags, guard
from nevow import rend, loaders, inevow, athena
from nevow import url
from nevow.inevow import IRequest
import os, logging, pprint, time, sys
class Users(athena.LiveFragment):
jsClass =3D u" AaccWeb.Users"
docFactory =3D loaders.xmlstr("""
<div xmlns:nevow=3D"http://nevow.com/ns/nevow/0.1"
xmlns:athena=3D" http://divmod.org/ns/athena/0.7"
nevow:render=3D"liveFragment" class=3D"Users">
</div>
""")
running =3D False
def __init__(self, **kwargs):
print 'start Users AJAX session'
def aacc_start(self):
if self.running:
return
reactor.callLater(1, self.updateConference, True)
self.running =3D True
athena.expose(aacc_start)
def aacc_keypress(self, charcode, keycode, metakey, altkey, ctrlkey,
shiftkey):
print 'charcode: %s keycode: %s metakey: %s altkey: %s ctrlkey: %s
shiftkey: %s' % (charcode, keycode, metakey, altkey, ctrlkey, shiftkey)
self.updateConference(True, unichr(charcode))
athena.expose(aacc_keypress)
def updateConference(self, force=3DFalse, sym=3D''):
""" updateConference """
#print 'updateConference'
def onUpdateConferenceOk(result):
self.callUpdateConference =3D reactor.callLater(1,
self.updateConference)
def onUpdateConferenceErr(err):
self.running =3D False
if not force:
self.callUpdateConference =3D reactor.callLater(1,
self.updateConference)
return
mystr =3D u"""<textarea id=3D"termid" cols=3D"10" rows=3D"5"
onkeypress=3D"return keypress(event)">""" + sym + u"""</textarea>"""
#self.callRemote('setFocus')
df =3D self.callRemote('showConference', mystr)
df.addCallbacks(onUpdateConferenceOk, onUpdateConferenceErr)
class ConferencePage(athena.LivePage ):
docFactory =3D loaders.xmlstr("""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
">
<html xmlns:nevow=3D"http://nevow.com/ns/nevow/0.1">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Du=
tf-8"
/>
<nevow:invisible nevow:render=3D"liveglue"/>
<script type=3D"text/javascript" src=3D"aacc_web.js">
</script>
</head>
<body>
<div nevow:render=3D"conference">
</div>
</body>
</html>
""")
def __init__(self, *a, **kw):
super(ConferencePage, self).__init__(*a, **kw)
self.jsModules.mapping[u'AaccWeb'] =3D util.sibpath(__file__,
'aacc_web.js')
addSlash =3D True
def render_liveglue(self, ctx, data):
req =3D ctx.locate(IRequest)
args =3D dict([(k,v[0]) for (k,v) in req.args.items()])
self.args =3D args
return athena.LivePage.render_liveglue(self, ctx, data)
def render_conference(self, ctx, data):
args =3D dict([(k,v) for (k,v) in self.args.items ()])
c =3D Users(**args)
c.page =3D self
reactor.callLater(0, c.aacc_start)
return ctx.tag[c]
class RootPage(rend.Page):
""" """
addSlash =3D True
docFactory =3D loaders.xmlstr("""
<html xmlns:nevow=3D"http://nevow.com/ns/nevow/0.1">
<body>
</body>
</html>
""")
def renderHTTP(self, ctx):
print 'render of root page'
req =3D ctx.locate(IRequest)
my_url =3D url.here.child('conference')
return my_url
def child_conference(self, ctx):
return ConferencePage()
class aacc_web:
""" """
def __init__(self, **kwargs):
""" """
resource =3D RootPage()
site =3D appserver.NevowSite(resource)
reactor.listenTCP(8080, site)
if __name__ =3D=3D "__main__":
aacc_web =3D aacc_web()
reactor.run()
---------------------------------------------------------------------------=
-------------------------------------------------------
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-web/attachments/20071209/0d=
499f69/attachment.htm
More information about the Twisted-web
mailing list