Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Idea for pure-python templates using AST.
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  11 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Paul Wray  
View profile  
 More options Aug 16 2011, 7:33 am
Newsgroups: comp.lang.python
From: "Paul Wray" <paul.w...@det.nsw.edu.au>
Date: Tue, 16 Aug 2011 21:33:29 +1000
Local: Tues, Aug 16 2011 7:33 am
Subject: Idea for pure-python templates using AST.
Hello all

Ive had what I think is a great idea for pure-python templates (I can almost
hear the groans, bear with me...)

For the impatient, proof of concept is at http://pastie.org/2379978
demonstrating simple substitution, balanced tags using context manager,
subtemplates,  and template inheritance.

I'm posting here to get opinions on:
* the merits of the idea, (or otherwise!)
* whether there are any established/mature templating systems that use this
approach, or whether its come up before,
* ideas for improvements and advice on other aspects such as sandboxing
* of course, to share the idea in case others want to use it

Background: Ive been working on an application that recursively renders
html/xml documents from heterogenoeus trees, with separate classes for each
document component. First I built my own renderer but was dissatisfied with
the repetitive code. Then looked at Mako and Jinja, and used Jinja but was
still disatisfied, because I still needed a render method in each class to
do preparation, and also the template which was centrally managed by the
Jinja loader and environment. I found a way to call templates recursively
via Jinja filters, but was not sure that it wouldnt blow up in my face, so I
also had separate calls to render the children of each node, and then feed
the value to the parent template. I kept thinking that there must be a way
to get the brevity and clarity of declarative templates, plus the simplicity
of pure python loops, tests and function calls.

The idea:
Python syntax allows a statement to be a bare literal or identifier. These
have no effect on the program.

So the function below is legal python:

def myFunc():
    'a'
    x = 45
    'b'; 'c'; x

So is this (within the appropriate class context of course):

def body(self, r):
        '<h1>'; self.heading; '</h1>'
        '<ul>'
        for itm in self.items:
            '<li>'; itm; '</li>'
        '</ul>'

The idea is simply to use python ASTs to transform this code so that it
accumulates the values of the bare expressions.

I think this give the best of both worlds - declarative syntax for the
template literals, but in a pure python context, giving you all the power of
python control statements, classes etc.

For application contexts outside pure python code (ie user-created
templates) , it would be simple to extend the technique to creating template
functions from strings, and insert the resulting methods into a namespace
for execution.)

I think, given the technique is already working with the AST, that
sandboxing should not be too hard either - advice on this aspect would be
appreciated.

Paul Wray


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
aspineux  
View profile  
 More options Aug 16 2011, 8:32 am
Newsgroups: comp.lang.python
From: aspineux <aspin...@gmail.com>
Date: Tue, 16 Aug 2011 05:32:18 -0700 (PDT)
Local: Tues, Aug 16 2011 8:32 am
Subject: Re: Idea for pure-python templates using AST.
On Aug 16, 1:33 pm, "Paul Wray" <paul.w...@det.nsw.edu.au> wrote:

> Hello all

> Ive had what I think is a great idea for pure-python templates (I can almost
> hear the groans, bear with me...)

> For the impatient, proof of concept is athttp://pastie.org/2379978
> demonstrating simple substitution, balanced tags using context manager,
> subtemplates,  and template inheritance.

You code fail, see below for other comment

Traceback (most recent call last):
  File "Download/pastie-2379978.rb", line 108, in <module>
    make_template(template1)
  File "Download/pastie-2379978.rb", line 60, in make_template
    ast.fix_missing_locations(astFromSrc)
  File "/usr/lib/python2.6/ast.py", line 133, in fix_missing_locations
    _fix(node, 1, 0)
  File "/usr/lib/python2.6/ast.py", line 132, in _fix
    _fix(child, lineno, col_offset)
  File "/usr/lib/python2.6/ast.py", line 132, in _fix
    _fix(child, lineno, col_offset)
  File "/usr/lib/python2.6/ast.py", line 121, in _fix
    if 'lineno' in node._attributes:
AttributeError: 'arguments' object has no attribute '_attributes'

> I'm posting here to get opinions on:
> * the merits of the idea, (or otherwise!)
> * whether there are any established/mature templating systems that use this
> approach, or whether its come up before,
> * ideas for improvements and advice on other aspects such as sandboxing
> * of course, to share the idea in case others want to use it

This is very original ! First time I see it. I like it.
But how to debug large template ?
How to find/detect a missing </TAG> ?
This is very important. This is one big advantage of Genshi over Kid
How to report the correct error at the correct line ?
How to find/get nice editor to edit large template ?

You could call it PHP :-)

> I think this give the best of both worlds - declarative syntax for the
> template literals, but in a pure python context, giving you all the power of
> python control statements, classes etc.

> For application contexts outside pure python code (ie user-created
> templates) , it would be simple to extend the technique to creating template
> functions from strings, and insert the resulting methods into a namespace
> for execution.)

> I think, given the technique is already working with the AST, that
> sandboxing should not be too hard either - advice on this aspect would be
> appreciated.

Maybe a good idea.
But still a lot of work to get the level of existing libraries.

Maybe better if mixed with other tools like Genshi to create widget.
Maybe next toscawidget could use such a technique.

Thanks for sharing


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Terry Reedy  
View profile  
 More options Aug 16 2011, 11:47 am
Newsgroups: comp.lang.python
From: Terry Reedy <tjre...@udel.edu>
Date: Tue, 16 Aug 2011 11:47:58 -0400
Local: Tues, Aug 16 2011 11:47 am
Subject: Re: Idea for pure-python templates using AST.
On 8/16/2011 7:33 AM, Paul Wray wrote:

More generally, Python has expression statements, with the result of the
expression ignored. These are usually function calls with side-effects.
"print('x')" has no effect on the program and the return value is
usually ignored.

Interesting idea, though I have no experience for comparison.

--
Terry Jan Reedy


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Chris Angelico  
View profile  
 More options Aug 16 2011, 12:14 pm
Newsgroups: comp.lang.python
From: Chris Angelico <ros...@gmail.com>
Date: Tue, 16 Aug 2011 17:14:24 +0100
Local: Tues, Aug 16 2011 12:14 pm
Subject: Re: Idea for pure-python templates using AST.

On Tue, Aug 16, 2011 at 12:33 PM, Paul Wray <paul.w...@det.nsw.edu.au> wrote:
> The idea is simply to use python ASTs to transform this code so that it
> accumulates the values of the bare expressions.

That'd be similar to what the interactive loop does. Are you aware,
though, that docstrings are bare expressions? You may have a syntactic
collision there.

ChrisA


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
anand jeyahar  
View profile  
 More options Aug 16 2011, 12:16 pm
Newsgroups: comp.lang.python
From: anand jeyahar <anand.ibm...@gmail.com>
Date: Tue, 16 Aug 2011 21:46:07 +0530
Local: Tues, Aug 16 2011 12:16 pm
Subject: Re: Idea for pure-python templates using AST.
Hi all,
   I did it. Finally managed to port mysqltuner.pl to python. Was a
real pain in the butt doing it from bottom up manually, without ever
really learing perl syntax. But i finally got it done. Now i need help
testing it. find it here.
 g...@github.com:anandjeyahar/mysqlDbAdmin-python.git.

Also i never really thought about design. Just blindly/mechanically,
translated from perl to python. So criticize and let me know how i can
improve this.

Thanks and Regards,
==============================================
Anand Jeyahar
https://sites.google.com/site/anandjeyahar
==============================================
The man who is really serious,
with the urge to find out what truth is,
has no style at all. He lives only in what is.
                  ~Bruce Lee

Love is a trade with lousy accounting policies.
                 ~Aang Jie


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Irmen de Jong  
View profile  
 More options Aug 16 2011, 3:23 pm
Newsgroups: comp.lang.python
From: Irmen de Jong <ir...@-NOSPAM-xs4all.nl>
Date: Tue, 16 Aug 2011 21:23:34 +0200
Local: Tues, Aug 16 2011 3:23 pm
Subject: Re: Idea for pure-python templates using AST.
On 16-08-11 13:33, Paul Wray wrote:

Looks very similar to PTL what Quixote uses:
http://www.quixote.ca/overview/paper.html

(never used it though, and I doubt Quixote used ASTs)

Irmen


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul Wray  
View profile  
 More options Aug 16 2011, 7:57 pm
Newsgroups: comp.lang.python
From: Paul Wray <paulwray111...@gmail.com>
Date: Tue, 16 Aug 2011 16:57:51 -0700 (PDT)
Local: Tues, Aug 16 2011 7:57 pm
Subject: Re: Idea for pure-python templates using AST.
On Aug 17, 2:14 am, Chris Angelico <ros...@gmail.com> wrote:

> On Tue, Aug 16, 2011 at 12:33 PM, Paul Wray <paul.w...@det.nsw.edu.au> wrote:
> > The idea is simply to use python ASTs to transform this code so that it
> > accumulates the values of the bare expressions.

> That'd be similar to what the interactive loop does. Are you aware,
> though, that docstrings are bare expressions? You may have a syntactic
> collision there.

> ChrisA

Thanks yes ama aware of docstrings but did not consider.
They are easy to strip out though.

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Chris Angelico  
View profile  
 More options Aug 16 2011, 8:03 pm
Newsgroups: comp.lang.python
From: Chris Angelico <ros...@gmail.com>
Date: Wed, 17 Aug 2011 01:03:34 +0100
Local: Tues, Aug 16 2011 8:03 pm
Subject: Re: Idea for pure-python templates using AST.

On Wed, Aug 17, 2011 at 12:57 AM, Paul Wray <paulwray111...@gmail.com> wrote:
> Thanks yes ama aware of docstrings but did not consider.
> They are easy to strip out though.

Maybe. You'd have to take notice of what's a docstring and what's the
first element to be outputted. Or alternatively, just forbid
docstrings on those functions.

ChrisA


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Tim Roberts  
View profile  
 More options Aug 16 2011, 8:39 pm
Newsgroups: comp.lang.python
From: Tim Roberts <t...@probo.com>
Date: Tue, 16 Aug 2011 17:39:39 -0700
Local: Tues, Aug 16 2011 8:39 pm
Subject: Re: Idea for pure-python templates using AST.

This is essentially how the original CherryPy version 1 web framework
worked.    In the end, I think it was decided that this represented too
much of a mix of processing and presentation, and CherryPy 2 and 3 use a
different scheme.
--
Tim Roberts, t...@probo.com
Providenza & Boekelheide, Inc.

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul Wray  
View profile  
 More options Aug 16 2011, 9:02 pm
Newsgroups: comp.lang.python
From: Paul Wray <paulwray111...@gmail.com>
Date: Tue, 16 Aug 2011 18:02:40 -0700 (PDT)
Local: Tues, Aug 16 2011 9:02 pm
Subject: Re: Idea for pure-python templates using AST.
On Aug 17, 5:23 am, Irmen de Jong <ir...@-NOSPAM-xs4all.nl> wrote:

Thanks. Yes it looks much the same, and it does use AST. This from the
ptl_compile.py module:

"""Compile a PTL template.

First template function names are mangled, noting the template type.
Next, the file is parsed into a parse tree.  This tree is converted
into
a modified AST.  It is during this state that the semantics are
modified
by adding extra nodes to the tree.  Finally bytecode is generated
using
the compiler package.
"""


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Paul Wray  
View profile  
 More options Aug 16 2011, 9:10 pm
Newsgroups: comp.lang.python
From: Paul Wray <paulwray111...@gmail.com>
Date: Tue, 16 Aug 2011 18:10:00 -0700 (PDT)
Subject: Re: Idea for pure-python templates using AST.

Sorry, should have specified Python 2.7.
Also Pastie thinks its ruby code so the donwloaded file is confusingly
___.rb

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »