Malthe Borch wrote:
> 2009/5/4 Carlos de la Guardia <carlos.delaguar...@gmail.com>:
>> If Malthe or anyone else has a good idea about how to do this and will give
>> me some pointers, I'm willing to use my limited abilities to make this work.
>> Otherwise, I might try to bring in old zpt.
> 
> It can be done, but it requires the introduction of a new compilation
> mode, which will essentially produce a source-file which will "fit
> all"; currently, the compiler produces one source-file per
> keyword-argument signature. That's obviously not something you can
> reasonably determine at compile-time.
> 
> The way to go about this is probably to have the render-method do
> something like this:
> 
> def render(**kwargs):
>    kwargs['econtext'].update(kwargs)
>    return render_template(econtext=kwargs['econtext'])
> 
> Such that all variables will be pulled from the dynamic variable
> scope; this should work, but otoh, there's always some trickery with
> that 'econtext'.

This might also slowdown the lookup of the argument values. Especially
whatever regular "context" is often passed in as an argument. But it may
not be dramatic.

In general I'd like the idea of this. I'd assume that there's gonna be
some nice subtle problems with it, but nothing the excellent test
coverage shouldn't find.

> Chameleon has a mode of operation triggered by the CHAMELEON_EAGER
> flag; this basically parses all templates at initialization; I think
> we can hijack this mode to force the above-mentioned "fallback"
> compilation. The render-logic would then be something like this:
> 
> 1) Do we have ``ast`` and ``compiler`` available?
> 2) If not, is a fallback source-file available?

If we'd get this, I'd like to expose the "compile" step in an additional
way. It should be possible to do this as a distutils build_templates
command in the setup.py. That'd make it similar in concept to building
extensions (or for example gettext .mo files). It's something you can do
as part of your build before releasing a package. The underlying
compiled templates format is just a pickle protocol 2 dump and thus
doesn't vary on any platform or Python build settings. So putting those
files into a source distribution should be fine in general.

Hanno

_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to