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 > [email protected] > http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web > > > _______________________________________________ Twisted-web mailing list [email protected] http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
