[Twisted-web] Livepage, ClientHandle and context
Donovan Preston
dp at ulaluma.com
Mon May 30 17:31:33 MDT 2005
On May 30, 2005, at 2:17 PM, Thomas HERVE wrote:
> I've just started to use nevow i18n and I'm pretty happy with it,
> it works very
> well and the automatic detection of browser language is invisible.
>
> But my app uses livepage a lot, and I began to face problems when
> trying to
> translate strings in "dynamic renderers". After some
> investigations, I found my
> problem : i18n uses the i18nconfig saved in context to translate
> strings, but
> livepage.ClientHandle makes a new "fake" context for each calls via
> the
> livepage.flt function.
>
> I resolved my problem by creating my ClientHandle and
> ClientHandleFactory
> implementations, the ClientHandle saving the context at its
> creation (pretty
> easy, but I would have found it cleaner if clientHandleFactory was
> a class
> variable of LivePage, Input and Output, and not a module global).
> Thus, the
> i18nconfig remains in context.
>
> My question is : is this choice good, or is there a good reason for
> ClientHandle
> not to keep track of the context ? If not, wouldn't it be better to
> save context
> in ClientHandle (it would useful for others things, getting session
> for example)
> ?
You should take a look at the branches/dp/livepage-completion-
notification-3 branch. It includes a lot of refactoring to livepage,
one of which causes all of the livepage apis to take a
JavascriptContext object instead of a ClientHandle. To use the
ClientHandle, you'll have to get it out of the context, like you
would other objects: IClientHandle(ctx).
This context is hooked up to the context chain from the outputConduit
or inputConduit HTTP request, so it should be much more useful to
you. For example, render_ methods should work properly because
nevow'll be able to find the IRendererFactory (your Page instance,
usually).
This branch is not yet fully backwards compatible with the previous
livepage API. sendScript, call, set, and append are not present as
methods of ClientHandle. Instead, there is a single ClientHandle.send
method which takes any stan which can be rendered down to javascript.
For example, IClientHandle(ctx).send(js("any javascript here")) will
work, as will client.send(livepage.set('foo', 'bar')). I will
probably add the ClientHandle convenience APIs back soon. They will
just call send with the appropriate "stan for javascript" object.
In this branch, input handlers can also return javascript which will
be executed as the response to the input event.
I encourage anyone who is interested in livepage to take a look at
this branch to see where it is going. Take a look at the examples to
see what has changed, read the code, and experiment with it. Ask
questions if you have any. I'll be trying to merge this branch into
the mainline (after adding some backwards compatibility) in the next
week.
I'll also be adding some LivePage docs. I think the API will settle
down after this last round of changes.
dp
More information about the Twisted-web
mailing list