[Twisted-Python] session
Glyph Lefkowitz
glyph at twistedmatrix.com
Sun Feb 16 08:57:10 MST 2003
On Sunday, February 16, 2003, at 09:06 AM, Thomas Weholt wrote:
>> No -- you want to use .rpys (.rpys can be used for XML-RPC resources
>> too, of course). William made some nice changes to that example, but
>> changing it to instantiate its own server.Site was a bad one.
> I cannot get the grip on how to use childs and leafs in Twisted. I
> think my code should be written to use that somehow. The reason I need
> this is because I need to have a perstistent object, containing
> compiled templates ( using simple TAL/ES ), users-information and a
> dict of what I've called webapps, similar to the rpys I guess, in
> memory. I think that can work with some of the sample code I've seen.
> But I want to pass more parameters to the rpy-file that will produce
> the content, not just call it's render method.
You want to use twisted.web.woven.tapestry: however, it's not entirely
ready. At last I knew of it, this module was going to be deprecated
and functionality was going to be rolled back into Controller. At any
rate, reading the code there should give you some ideas.
Nothing horribly confusing is going to happen to it though. You will
probably have to spend 30 minutes renaming some classes when we polish
and finalize it.
As to the theory:
An RPY is a file that can generate a resource. It is NOT suggested, in
an application, to have multiple related resources in different .rpy's.
They are conceptually related objects, which you can aggregate by
using request.putChild and overriding request.getChild.
What you want to do is to create a top-level "site" resource, (not a
server.Site) and then handle getChild there, returning other Resource
instances that you can dynamically create, cache, or load from your own
files.
As far as "leafs" -- in Twisted Web, isLeaf is just a flag that says
"stop calling getChild here, please". There's nothing really special
about it.
A simple example:
http://asdf.com/foo/bar/baz => root.getChild("foo",
...).getChild("bar", ...).getChild("baz", ...).render(...)
What happens at each step of that path is pretty much up to you ;).
More information about the Twisted-Python
mailing list