[issue24002] Add un-parse function to ast

2015-04-19 Thread Larry Hastings

Larry Hastings added the comment:

Actually eval(ast) is all I need for #23967 too.  But eval is a builtin, so it 
feels wrong to have it supporting--and therefore dependent on--ast.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-19 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

I think there is standard way to transform ast to bytecode and evaluate it.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-19 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

For issue24001 you need rather eval(ast). But a function for stringifying ast 
would be useful in any case.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-19 Thread Larry Hastings

Larry Hastings added the comment:

There is!  compile() will do it, though the docstring doesn't mention it. (The 
full documentation does.)

The following function meets both my use cases:

def eval_ast_expr(node, symbols=None, *, filename='-'):

Takes an ast.Expr node.  Compiles and evaluates it.
Returns the result of the expression.

symbols represents the globals dict the expression
should see.  (There's no equivalent for locals here.)


if not isinstance(node, ast.Expr):
raise RuntimeError(
eval_ast_expr: node must be of type ast.Expr)

if symbols == None:
symbols = globals()

a = ast.Expression(node.value)
co = compile(a, filename, 'eval')
fn = types.FunctionType(co, symbols)
return fn()

I am therefore closing this bug.  It still seems like a nice-to-have but I'll 
let somebody else do it when *they* have a use case.

--
resolution:  - later
stage: needs patch - resolved
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-18 Thread Larry Hastings

New submission from Larry Hastings:

Twice recently I've wanted a function that transforms an AST node tree back 
into text:

* In the hacked-up Tools/clinic/clinic.py for issue #24001
* In the hacked-up Lib/inspect.py for issue #23967

Both times I did a half-assed job just to get the patch working, so we could 
decide whether or not we want to go this route.

It seems useful and reasonable to do a proper job and add this functionality to 
ast.

--
components: Library (Lib)
messages: 241477
nosy: benjamin.peterson, georg.brandl, larry
priority: normal
severity: normal
stage: needs patch
status: open
title: Add un-parse function to ast
type: enhancement
versions: Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-18 Thread Larry Hastings

Changes by Larry Hastings la...@hastings.org:


--
nosy: +serhiy.storchaka, zach.ware

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-18 Thread Berker Peksag

Berker Peksag added the comment:

Perhaps a NodeVisitor subclass (something like Armin Ronacher's codegen module 
https://github.com/berkerpeksag/astor/blob/master/astor/codegen.py#L54 can be 
added to the ast module.

--
nosy: +berker.peksag

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24002] Add un-parse function to ast

2015-04-18 Thread Larry Hastings

Larry Hastings added the comment:

Good idea, I'll go ahead and borrow Guido's time machine.

https://docs.python.org/3/library/ast.html#ast.NodeVisitor

However, NodeVisitor does not transform the ast tree back into text.  So in 
what way is this helpful?


Also, for what it's worth: both my use cases only need to handle expressions 
(r-values if you prefer).  I don't need to generate classes, functions, 
blocks, or even statements.  If we wanted to weaken the implementation to only 
handle expressions I'd be happy.  (In fact, I'd be happier this way, because it 
means the implementation would be much simpler!)

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24002
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com