[issue24002] Add un-parse function to ast
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
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
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
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
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
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
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
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