Yes __import__ is much more clean.

other option is importing as T and having T.html, T.body etc. (many
nevow/stan docs use this style)

As I said this was just quick&dirty hack to prototype, but now that we
gonna have a super-flexible setup with _real_ template plugins (I mean
really independant of TG / CP / whatever, just relying on the template
engine + entry_points), my code is thing of the past :-)


Cliff Wells wrote:
>
> Olivier Favre-Simon wrote:
>> Hi Cliff,
>>
>> Not a real breakage, rather an issue with eval() itself.
>>
>> I hacked a quick and dirty prototype based on Buffet-0.4 and
>> TurboStan-0.7.
>>
>> eval() was crying on the CRs in the template file but:
>>   
> Actually I've seen the same thing and never had an explanation for
> it.  I found myself having to run unix2dos on a file with fragments
> copy/pasted from the web (getting a "syntax error" on blank lines, for
> instance).  I don't think this should happen, although the idea of an
> actual bug in Python is a bit startling to me.  AFAIK, Python is
> supposed to handle newline translation transparently and I'm not aware
> that eval() is an exception to that (although it seems possible that
> the type of translation happening is global, at least within the scope
> of the current module and that fragments of code within that module
> must be of the same line-ending type... but that's just speculation).
>
> One thing I will note about your  adapters.py is that "from foo import
> *" doesn't work in the context of a function definition.  That is why,
> along with the avoidance of namespace pollution, I use __import__ in
> TurboStan for getting nevow.tags into the template namespace:
>
> Python 2.4.2 (#1, Oct 16 2005, 16:00:21)
> [GCC 3.3.6 (Gentoo 3.3.6, ssp-3.3.6-1.0, pie-8.7.8)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> def foo():
> ...         from stan.tags import *
> ...
> <stdin>:1: SyntaxWarning: import * only allowed at module level
> >>> def foo():
> ...         ns = {}
> ...         __import__('stan.tags', '__all__', ns, ns)
> ...
> >>>
>
> This effectively creates a namespace that the Stan template can be
> eval()'d in that provides easy access to all the Stan predefined tags
> and doesn't stick things like "a" and "p" into the outer module's
> namespace where they might cause... confusion ;-)
>
>
> Regards,
> Cliff
>
>

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to