Hi Valentino, On Tue, July 11, 2006 8:07 am, Valentino Volonghi aka Dialtone wrote:
For IResource the right example is most_basic which uses the following code:
Note that I've added the road map to http://twisted.paisite.com. When I started to rebuild my Twisted environment, I realized that version updates may have broken Turkey Adventures one through four. Todo list: 1. Retest Adventures one through four using current Twisted versions. 2. Update Adventures one through four if necessary Once I have my environment back up I'll try to tackle these two tasks. If anyone else feels so inclined, feel free to jump in. Re: IRequest code: Great start, Valentino! Questions: -- Does this need some kind or wrapper to run it or will it run as is? -- What's the step-by-step procedure to get it running? -- What should we see when we do get it running? -- How does it work? -- From the big picture point-of-view, what have we learned by running this code? Best wishes, Lloyd
from zope.interface import implements
from nevow import inevow
## ## How does a request come to the Page? ## ## or How to use Nevow without all the fancy automations ##
# This is a simple Root page object, the inevow.IResource interface # tells us that it must implement 2 methods: # locateChild and renderHTTP. # locateChild is used to find children of the current page, it must return a # tuple of (page, remaining_segments) # if there is no page, and you want to display a 404 page, you will need to return # a None, () tuple. class Root(object): implements(inevow.IResource)
def locateChild(self, ctx, segments): # This locateChild is 'stupid' since it can only work if the tree of # pages is static. Anyway it will work for our simple example if segments[0] == '': # If the server is looking for the root page segments will be ('',) # then renderHTTP will be called on self return self, () elif segments[0] == 'foo': # Now we received a request
whose
segments had in the first position # the string foo # like http://example.org/foo/baz/ -> ('foo', 'baz') # after the page has been located we return it with the remaining segments # ('baz') return self.foo, segments[1:] else: return None, ()
def renderHTTP(self, ctx): # When the server needs to return a response to the request it will call # the renderHTTP method that will return a string of what needs to be sent. return """<html><body>Hello world!<br /> <a href="./foo" id="foo">foo</a></body></html> """
class Foo(object): implements(inevow.IResource)
def locateChild(self, ctx, segments): # segments is the remaining segments returned by the root locateChild # see segments[1:] if segments[0] == 'baz': return self.baz, segments[1:] else: return None, ()
def renderHTTP(self, ctx): return """<html><body><h1 id="heading">You are in Foo</h1> <a href="./foo/baz" id="baz">baz</a></body></html> """
class Baz(object): implements(inevow.IResource) def locateChild(self, ctx, segments): return None, () def renderHTTP(self, ctx): return '<html><body><h1 id="heading">You are in Baz</h1></body></html>'
# We are adding children to the pages. # This could also happen inside the class. root = Root() root.foo = Foo() root.foo.baz = Baz()
This example was written with the clear intent to just show the IResource interface separated from Nevow. Keep in mind that this is the IResource interface from Nevow and not the one from twisted.web.
_______________________________________________ Twisted-web mailing list Twisted-web@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web