Mercurial > genshi > mirror
diff genshi/template/astutil.py @ 1023:2036193f89e7 trunk
Add support for Python 3.4 AST (support for NameConstants and changes to existing to arguments node attributes).
author | hodgestar |
---|---|
date | Sun, 16 Feb 2014 18:46:15 +0000 |
parents | 2ed9827596a4 |
children | a5e09a7ba12d |
line wrap: on
line diff
--- a/genshi/template/astutil.py +++ b/genshi/template/astutil.py @@ -21,7 +21,7 @@ def parse(source, mode): return compile(source, '', mode, _ast.PyCF_ONLY_AST) -from genshi.compat import IS_PYTHON2 +from genshi.compat import IS_PYTHON2, isstring __docformat__ = 'restructuredtext en' @@ -103,8 +103,13 @@ self._new_line() return self.visit(node.body) + # Python < 3.4 # arguments = (expr* args, identifier? vararg, # identifier? kwarg, expr* defaults) + # + # Python >= 3.4 + # arguments = (arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, + # arg? kwarg, expr* defaults) def visit_arguments(self, node): first = True no_default_count = len(node.args) - len(node.defaults) @@ -122,13 +127,21 @@ self._write(', ') else: first = False - self._write('*' + node.vararg) + self._write('*') + if isstring(node.vararg): + self._write(node.vararg) + else: + self.visit(node.vararg) if getattr(node, 'kwarg', None): if not first: self._write(', ') else: first = False - self._write('**' + node.kwarg) + self._write('**') + if isstring(node.kwarg): + self._write(node.kwarg) + else: + self.visit(node.kwarg) if not IS_PYTHON2: # In Python 3 arguments get a special node @@ -724,6 +737,17 @@ def visit_Name(self, node): self._write(node.id) + # NameConstant(singleton value) + def visit_NameConstant(self, node): + if node.value is None: + self._write('None') + elif node.value is True: + self._write('True') + elif node.value is False: + self._write('False') + else: + raise Exception("Unknown NameConstant %r" % (node.value,)) + # List(expr* elts, expr_context ctx) def visit_List(self, node): self._write('[') @@ -829,6 +853,7 @@ visit_Attribute = _clone visit_Subscript = _clone visit_Name = _clone + visit_NameConstant = _clone visit_List = _clone visit_Tuple = _clone