[Twisted-web] Nevow IResource trouble
Remi Cool
mailinglists at smartology.nl
Wed Nov 16 08:49:46 MST 2005
Hello, after batteling with XMLRPC and getting nevow to put something on
the screen, I got stuck implementing a livepage and webform example.
After changing the implements to inevow.IResource in httpResource, I got
a message about a missing locateChild method (is that about the same as
the getChild method in a twisted web resource?) ... I've created one,
but I'm not shure if it's correct.
Bottomline is I can't get it to work, not from the code and not from a
resource file ... what's wrong with this code?
Here's my code:
-----------------------------------------------------------------------------------------------
class ISimpleMethod(TypedInterface):
def simple(self, name=String(description="Your name."),
age=Integer(description="Your age.")):
"""Simple
Please enter your name and age.
"""
class Implementation(object):
implements(ISimpleMethod)
def simple(self, name, age):
print "Hello, %s, who is %s" % (name, age)
class WebForm(rend.Page):
print 'WEBFORMS:', webform.renderForms('original')
docFactory = loaders.stan(tags.html[
tags.body[
tags.h1["Here is the form:"],
webform.renderForms()]])
class httpResource(resource.Resource):
implements(inevow.IResource)
def __init__(self, service):
resource.Resource.__init__(self)
self.service = service
##self.putChild('RPC2', Example(self.service))
self.putChild('formtest', WebForm(Implementation()))
rt = static.File("rpy")
rt.ignoreExt(".rpy")
rt.processors = {'.rpy': script.ResourceScript}
self.putChild('rpy', rt)
def render(self, request):
self._clientIP = request.getClientIP()
return resource.Resource.render(self, request)
def render_GET(self, request):
"""Process HTTP GET Requests."""
print 'GET: request ->', request
return '<html><body><h3>Not Implemented</h3></body></html>'
def getChild(self, path, request):
"""This method handles http calls"""
print 'getChild path:', path
print 'getChild request:', request
if path=="":
return httpResource(self.service)
else:
return httpResource(self.service)
def locateChild(self, ctx, segments):
""""""
print 'CTX:', ctx
print 'SEGMENTS:', segments
return self, segments
components.registerAdapter(httpResource, IowwService, inevow.IResource)
def main():
""""""
application = service.Application('OWW', uid=1000, gid=1000)
s = owwService()
serviceCollection = service.IServiceCollection(application)
internet.TCPServer(7080,
appserver.NevowSite(s)).setServiceParent(serviceCollection)
serviceCollection.startService()
reactor.run()
if __name__ == '__main__':
main()
----------------------------------------------------------------------------
livepage.rpy
----------------------------------------------------------------------------
from nevow.livepage import handler
from nevow import rend, tags, loaders
def greeter(client, nodeName):
client.alert("Greetings. You clicked the %s node." % nodeName)
# Any string arguments after the event handler function will be evaluated
# as JavaScript in the context of the web browser and results passed to the
# Python event handler
handler = handler(greeter, 'node.name')
class Live(rend.Page):
docFactory = loaders.stan(
tags.html[
tags.body[
tags.ol[
tags.li(onclick=handler, name="one")["One"],
tags.li(onclick=handler, name="two")["Two"],
tags.li(onclick=handler, name="three")["Three"]
]
]
])
resource = Live()
------------------------------------------------------------------
testform.rpy
------------------------------------------------------------------
from formless.annotate import TypedInterface, Integer, String
from nevow import rend, tags, loaders, appserver, inevow
from formless import webform
from zope.interface import Interface, implements
class ISimpleMethod(TypedInterface):
def simple(self, name=String(description="Your name."),
age=Integer(description="Your age.")):
"""Simple
Please enter your name and age.
"""
class Implementation(object):
implements(ISimpleMethod)
def simple(self, name, age):
print "Hello, %s, who is %s" % (name, age)
class WebForm(rend.Page):
print 'WEBFORMS:', webform.renderForms('original')
docFactory = loaders.stan(tags.html[
tags.body[
tags.h1["Here is the form:"],
webform.renderForms()]])
resource = WebForm(Implementation())
More information about the Twisted-web
mailing list