summaryrefslogtreecommitdiff
path: root/jinja2
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2013-05-19 13:46:22 +0100
committerArmin Ronacher <armin.ronacher@active-4.com>2013-05-19 13:46:22 +0100
commitc87d4cf11fe91dc4f477e0f815d0d0dfd6434d12 (patch)
treea7f074ace9ad1d5940584309d9f23dc2934f1a20 /jinja2
parent5cf31686c3709bd7f10e750752df92873bdde941 (diff)
downloadjinja2-c87d4cf11fe91dc4f477e0f815d0d0dfd6434d12.tar.gz
six.advance_iterator -> next
Diffstat (limited to 'jinja2')
-rw-r--r--jinja2/_compat.py8
-rw-r--r--jinja2/compiler.py7
-rw-r--r--jinja2/ext.py25
-rw-r--r--jinja2/filters.py10
-rw-r--r--jinja2/lexer.py18
-rw-r--r--jinja2/nodes.py6
-rw-r--r--jinja2/parser.py99
-rw-r--r--jinja2/runtime.py3
-rw-r--r--jinja2/testsuite/api.py26
-rw-r--r--jinja2/testsuite/ext.py5
-rw-r--r--jinja2/testsuite/lexnparse.py9
11 files changed, 113 insertions, 103 deletions
diff --git a/jinja2/_compat.py b/jinja2/_compat.py
index 6318f0b..7825cb6 100644
--- a/jinja2/_compat.py
+++ b/jinja2/_compat.py
@@ -11,6 +11,7 @@
:copyright: Copyright 2013 by the Jinja team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
+import six
# https://bitbucket.org/gutworth/six/issue/25/add-unichr
try:
@@ -18,7 +19,6 @@ try:
except NameError:
unichr = chr # py3
-try:
- range_type = xrange
-except NameError:
- range_type = range
+range_type = six.moves.xrange
+next = six.advance_iterator
+imap = six.moves.map
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 894317b..ce8e06d 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -8,6 +8,8 @@
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
+import six
+
from itertools import chain
from copy import deepcopy
from jinja2 import nodes
@@ -15,8 +17,7 @@ from jinja2.nodes import EvalContext
from jinja2.visitor import NodeVisitor
from jinja2.exceptions import TemplateAssertionError
from jinja2.utils import Markup, concat, escape, is_python_keyword
-from jinja2._compat import range_type
-import six
+from jinja2._compat import range_type, next
from six.moves import cStringIO as StringIO, map
@@ -1359,7 +1360,7 @@ class CodeGenerator(NodeVisitor):
public_names = [x for x in assignment_frame.toplevel_assignments
if not x.startswith('_')]
if len(assignment_frame.toplevel_assignments) == 1:
- name = six.advance_iterator(iter(assignment_frame.toplevel_assignments))
+ name = next(iter(assignment_frame.toplevel_assignments))
self.writeline('context.vars[%r] = l_%s' % (name, name))
else:
self.writeline('context.vars.update({')
diff --git a/jinja2/ext.py b/jinja2/ext.py
index c456dbf..8ded3d1 100644
--- a/jinja2/ext.py
+++ b/jinja2/ext.py
@@ -20,6 +20,7 @@ from jinja2.environment import Environment
from jinja2.runtime import concat
from jinja2.exceptions import TemplateAssertionError, TemplateSyntaxError
from jinja2.utils import contextfunction, import_string, Markup
+from jinja2._compat import next
import six
@@ -215,7 +216,7 @@ class InternationalizationExtension(Extension):
def parse(self, parser):
"""Parse a translatable tag."""
- lineno = six.advance_iterator(parser.stream).lineno
+ lineno = next(parser.stream).lineno
num_called_num = False
# find all the variables referenced. Additionally a variable can be
@@ -240,7 +241,7 @@ class InternationalizationExtension(Extension):
# expressions
if parser.stream.current.type == 'assign':
- six.advance_iterator(parser.stream)
+ next(parser.stream)
variables[name.value] = var = parser.parse_expression()
else:
variables[name.value] = var = nodes.Name(name.value, 'load')
@@ -272,7 +273,7 @@ class InternationalizationExtension(Extension):
# if we have a pluralize block, we parse that too
if parser.stream.current.test('name:pluralize'):
have_plural = True
- six.advance_iterator(parser.stream)
+ next(parser.stream)
if parser.stream.current.type != 'block_end':
name = parser.stream.expect('name')
if name.value not in variables:
@@ -283,10 +284,10 @@ class InternationalizationExtension(Extension):
num_called_num = name.value == 'num'
parser.stream.expect('block_end')
plural_names, plural = self._parse_block(parser, False)
- six.advance_iterator(parser.stream)
+ next(parser.stream)
referenced.update(plural_names)
else:
- six.advance_iterator(parser.stream)
+ next(parser.stream)
# register free names as simple name expressions
for var in referenced:
@@ -314,15 +315,15 @@ class InternationalizationExtension(Extension):
while 1:
if parser.stream.current.type == 'data':
buf.append(parser.stream.current.value.replace('%', '%%'))
- six.advance_iterator(parser.stream)
+ next(parser.stream)
elif parser.stream.current.type == 'variable_begin':
- six.advance_iterator(parser.stream)
+ next(parser.stream)
name = parser.stream.expect('name').value
referenced.append(name)
buf.append('%%(%s)s' % name)
parser.stream.expect('variable_end')
elif parser.stream.current.type == 'block_begin':
- six.advance_iterator(parser.stream)
+ next(parser.stream)
if parser.stream.current.test('name:endtrans'):
break
elif parser.stream.current.test('name:pluralize'):
@@ -395,7 +396,7 @@ class ExprStmtExtension(Extension):
tags = set(['do'])
def parse(self, parser):
- node = nodes.ExprStmt(lineno=six.advance_iterator(parser.stream).lineno)
+ node = nodes.ExprStmt(lineno=next(parser.stream).lineno)
node.node = parser.parse_tuple()
return node
@@ -405,7 +406,7 @@ class LoopControlExtension(Extension):
tags = set(['break', 'continue'])
def parse(self, parser):
- token = six.advance_iterator(parser.stream)
+ token = next(parser.stream)
if token.value == 'break':
return nodes.Break(lineno=token.lineno)
return nodes.Continue(lineno=token.lineno)
@@ -416,7 +417,7 @@ class WithExtension(Extension):
tags = set(['with'])
def parse(self, parser):
- node = nodes.Scope(lineno=six.advance_iterator(parser.stream).lineno)
+ node = nodes.Scope(lineno=next(parser.stream).lineno)
assignments = []
while parser.stream.current.type != 'block_end':
lineno = parser.stream.current.lineno
@@ -437,7 +438,7 @@ class AutoEscapeExtension(Extension):
tags = set(['autoescape'])
def parse(self, parser):
- node = nodes.ScopedEvalContextModifier(lineno=six.advance_iterator(parser.stream).lineno)
+ node = nodes.ScopedEvalContextModifier(lineno=next(parser.stream).lineno)
node.options = [
nodes.Keyword('autoescape', parser.parse_expression())
]
diff --git a/jinja2/filters.py b/jinja2/filters.py
index adc513e..f0fbb38 100644
--- a/jinja2/filters.py
+++ b/jinja2/filters.py
@@ -10,6 +10,8 @@
"""
import re
import math
+import six
+
from random import choice
from operator import itemgetter
from itertools import groupby
@@ -17,7 +19,7 @@ from jinja2.utils import Markup, escape, pformat, urlize, soft_unicode, \
unicode_urlencode
from jinja2.runtime import Undefined
from jinja2.exceptions import FilterArgumentError
-import six
+from jinja2._compat import next
from six.moves import map
@@ -342,7 +344,7 @@ def do_center(value, width=80):
def do_first(environment, seq):
"""Return the first item of a sequence."""
try:
- return six.advance_iterator(iter(seq))
+ return next(iter(seq))
except StopIteration:
return environment.undefined('No first item, sequence was empty.')
@@ -351,7 +353,7 @@ def do_first(environment, seq):
def do_last(environment, seq):
"""Return the last item of a sequence."""
try:
- return six.advance_iterator(iter(reversed(seq)))
+ return next(iter(reversed(seq)))
except StopIteration:
return environment.undefined('No last item, sequence was empty.')
@@ -820,7 +822,7 @@ def do_map(*args, **kwargs):
attribute = kwargs.pop('attribute')
if kwargs:
raise FilterArgumentError('Unexpected keyword argument %r' %
- six.advance_iterator(iter(kwargs)))
+ next(iter(kwargs)))
func = make_attrgetter(context.environment, attribute)
else:
try:
diff --git a/jinja2/lexer.py b/jinja2/lexer.py
index b39a738..07cf5c6 100644
--- a/jinja2/lexer.py
+++ b/jinja2/lexer.py
@@ -15,11 +15,13 @@
:license: BSD, see LICENSE for more details.
"""
import re
+import six
+
from operator import itemgetter
from collections import deque
from jinja2.exceptions import TemplateSyntaxError
from jinja2.utils import LRUCache
-import six
+from jinja2._compat import next
# cache for the lexers. Exists in order to be able to have multiple
@@ -285,7 +287,7 @@ class TokenStreamIterator(six.Iterator):
if token.type is TOKEN_EOF:
self.stream.close()
raise StopIteration()
- six.advance_iterator(self.stream)
+ next(self.stream)
return token
@@ -302,7 +304,7 @@ class TokenStream(six.Iterator):
self.filename = filename
self.closed = False
self.current = Token(1, TOKEN_INITIAL, '')
- six.advance_iterator(self)
+ next(self)
def __iter__(self):
return TokenStreamIterator(self)
@@ -319,7 +321,7 @@ class TokenStream(six.Iterator):
def look(self):
"""Look at the next token."""
- old_token = six.advance_iterator(self)
+ old_token = next(self)
result = self.current
self.push(result)
self.current = old_token
@@ -328,14 +330,14 @@ class TokenStream(six.Iterator):
def skip(self, n=1):
"""Got n tokens ahead."""
for x in range(n):
- six.advance_iterator(self)
+ next(self)
def next_if(self, expr):
"""Perform the token test and return the token if it matched.
Otherwise the return value is `None`.
"""
if self.current.test(expr):
- return six.advance_iterator(self)
+ return next(self)
def skip_if(self, expr):
"""Like :meth:`next_if` but only returns `True` or `False`."""
@@ -348,7 +350,7 @@ class TokenStream(six.Iterator):
self.current = self._pushed.popleft()
elif self.current.type is not TOKEN_EOF:
try:
- self.current = six.advance_iterator(self._iter)
+ self.current = next(self._iter)
except StopIteration:
self.close()
return rv
@@ -377,7 +379,7 @@ class TokenStream(six.Iterator):
try:
return self.current
finally:
- six.advance_iterator(self)
+ next(self)
def get_lexer(environment):
diff --git a/jinja2/nodes.py b/jinja2/nodes.py
index 7e5229e..e276f7e 100644
--- a/jinja2/nodes.py
+++ b/jinja2/nodes.py
@@ -12,10 +12,12 @@
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
+import six
import operator
+
from collections import deque
from jinja2.utils import Markup, MethodType, FunctionType
-import six
+from jinja2._compat import next
from six.moves import zip
@@ -143,7 +145,7 @@ class Node(six.with_metaclass(NodeType, object)):
setattr(self, attr, attributes.pop(attr, None))
if attributes:
raise TypeError('unknown attribute %r' %
- six.advance_iterator(iter(attributes)))
+ next(iter(attributes)))
def iter_fields(self, exclude=None, only=None):
"""This method iterates over all fields that are defined and yields
diff --git a/jinja2/parser.py b/jinja2/parser.py
index 953027c..f60cd01 100644
--- a/jinja2/parser.py
+++ b/jinja2/parser.py
@@ -11,8 +11,7 @@
from jinja2 import nodes
from jinja2.exceptions import TemplateSyntaxError, TemplateAssertionError
from jinja2.lexer import describe_token, describe_token_expr
-import six
-from six.moves import map
+from jinja2._compat import next, imap
#: statements that callinto
@@ -54,7 +53,7 @@ class Parser(object):
def _fail_ut_eof(self, name, end_token_stack, lineno):
expected = []
for exprs in end_token_stack:
- expected.extend(map(describe_token_expr, exprs))
+ expected.extend(imap(describe_token_expr, exprs))
if end_token_stack:
currently_looking = ' or '.join(
"'%s'" % describe_token_expr(expr)
@@ -163,12 +162,12 @@ class Parser(object):
self.fail_eof(end_tokens)
if drop_needle:
- six.advance_iterator(self.stream)
+ next(self.stream)
return result
def parse_set(self):
"""Parse an assign statement."""
- lineno = six.advance_iterator(self.stream).lineno
+ lineno = next(self.stream).lineno
target = self.parse_assign_target()
self.stream.expect('assign')
expr = self.parse_tuple()
@@ -186,7 +185,7 @@ class Parser(object):
test = self.parse_expression()
recursive = self.stream.skip_if('name:recursive')
body = self.parse_statements(('name:endfor', 'name:else'))
- if six.advance_iterator(self.stream).value == 'endfor':
+ if next(self.stream).value == 'endfor':
else_ = []
else:
else_ = self.parse_statements(('name:endfor',), drop_needle=True)
@@ -200,7 +199,7 @@ class Parser(object):
node.test = self.parse_tuple(with_condexpr=False)
node.body = self.parse_statements(('name:elif', 'name:else',
'name:endif'))
- token = six.advance_iterator(self.stream)
+ token = next(self.stream)
if token.test('name:elif'):
new_node = nodes.If(lineno=self.stream.current.lineno)
node.else_ = [new_node]
@@ -215,7 +214,7 @@ class Parser(object):
return result
def parse_block(self):
- node = nodes.Block(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Block(lineno=next(self.stream).lineno)
node.name = self.stream.expect('name').value
node.scoped = self.stream.skip_if('name:scoped')
@@ -232,21 +231,21 @@ class Parser(object):
return node
def parse_extends(self):
- node = nodes.Extends(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Extends(lineno=next(self.stream).lineno)
node.template = self.parse_expression()
return node
def parse_import_context(self, node, default):
if self.stream.current.test_any('name:with', 'name:without') and \
self.stream.look().test('name:context'):
- node.with_context = six.advance_iterator(self.stream).value == 'with'
+ node.with_context = next(self.stream).value == 'with'
self.stream.skip()
else:
node.with_context = default
return node
def parse_include(self):
- node = nodes.Include(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Include(lineno=next(self.stream).lineno)
node.template = self.parse_expression()
if self.stream.current.test('name:ignore') and \
self.stream.look().test('name:missing'):
@@ -257,14 +256,14 @@ class Parser(object):
return self.parse_import_context(node, True)
def parse_import(self):
- node = nodes.Import(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Import(lineno=next(self.stream).lineno)
node.template = self.parse_expression()
self.stream.expect('name:as')
node.target = self.parse_assign_target(name_only=True).name
return self.parse_import_context(node, False)
def parse_from(self):
- node = nodes.FromImport(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.FromImport(lineno=next(self.stream).lineno)
node.template = self.parse_expression()
self.stream.expect('name:import')
node.names = []
@@ -272,7 +271,7 @@ class Parser(object):
def parse_context():
if self.stream.current.value in ('with', 'without') and \
self.stream.look().test('name:context'):
- node.with_context = six.advance_iterator(self.stream).value == 'with'
+ node.with_context = next(self.stream).value == 'with'
self.stream.skip()
return True
return False
@@ -317,7 +316,7 @@ class Parser(object):
self.stream.expect('rparen')
def parse_call_block(self):
- node = nodes.CallBlock(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.CallBlock(lineno=next(self.stream).lineno)
if self.stream.current.type == 'lparen':
self.parse_signature(node)
else:
@@ -331,14 +330,14 @@ class Parser(object):
return node
def parse_filter_block(self):
- node = nodes.FilterBlock(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.FilterBlock(lineno=next(self.stream).lineno)
node.filter = self.parse_filter(None, start_inline=True)
node.body = self.parse_statements(('name:endfilter',),
drop_needle=True)
return node
def parse_macro(self):
- node = nodes.Macro(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Macro(lineno=next(self.stream).lineno)
node.name = self.parse_assign_target(name_only=True).name
self.parse_signature(node)
node.body = self.parse_statements(('name:endmacro',),
@@ -346,7 +345,7 @@ class Parser(object):
return node
def parse_print(self):
- node = nodes.Output(lineno=six.advance_iterator(self.stream).lineno)
+ node = nodes.Output(lineno=next(self.stream).lineno)
node.nodes = []
while self.stream.current.type != 'block_end':
if node.nodes:
@@ -420,7 +419,7 @@ class Parser(object):
def parse_not(self):
if self.stream.current.test('name:not'):
- lineno = six.advance_iterator(self.stream).lineno
+ lineno = next(self.stream).lineno
return nodes.Not(self.parse_not(), lineno=lineno)
return self.parse_compare()
@@ -431,7 +430,7 @@ class Parser(object):
while 1:
token_type = self.stream.current.type
if token_type in _compare_operators:
- six.advance_iterator(self.stream)
+ next(self.stream)
ops.append(nodes.Operand(token_type, self.parse_add()))
elif self.stream.skip_if('name:in'):
ops.append(nodes.Operand('in', self.parse_add()))
@@ -450,7 +449,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_sub()
while self.stream.current.type == 'add':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_sub()
left = nodes.Add(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -460,7 +459,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_concat()
while self.stream.current.type == 'sub':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_concat()
left = nodes.Sub(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -470,7 +469,7 @@ class Parser(object):
lineno = self.stream.current.lineno
args = [self.parse_mul()]
while self.stream.current.type == 'tilde':
- six.advance_iterator(self.stream)
+ next(self.stream)
args.append(self.parse_mul())
if len(args) == 1:
return args[0]
@@ -480,7 +479,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_div()
while self.stream.current.type == 'mul':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_div()
left = nodes.Mul(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -490,7 +489,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_floordiv()
while self.stream.current.type == 'div':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_floordiv()
left = nodes.Div(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -500,7 +499,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_mod()
while self.stream.current.type == 'floordiv':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_mod()
left = nodes.FloorDiv(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -510,7 +509,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_pow()
while self.stream.current.type == 'mod':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_pow()
left = nodes.Mod(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -520,7 +519,7 @@ class Parser(object):
lineno = self.stream.current.lineno
left = self.parse_unary()
while self.stream.current.type == 'pow':
- six.advance_iterator(self.stream)
+ next(self.stream)
right = self.parse_unary()
left = nodes.Pow(left, right, lineno=lineno)
lineno = self.stream.current.lineno
@@ -530,10 +529,10 @@ class Parser(object):
token_type = self.stream.current.type
lineno = self.stream.current.lineno
if token_type == 'sub':
- six.advance_iterator(self.stream)
+ next(self.stream)
node = nodes.Neg(self.parse_unary(False), lineno=lineno)
elif token_type == 'add':
- six.advance_iterator(self.stream)
+ next(self.stream)
node = nodes.Pos(self.parse_unary(False), lineno=lineno)
else:
node = self.parse_primary()
@@ -552,20 +551,20 @@ class Parser(object):
node = nodes.Const(None, lineno=token.lineno)
else:
node = nodes.Name(token.value, 'load', lineno=token.lineno)
- six.advance_iterator(self.stream)
+ next(self.stream)
elif token.type == 'string':
- six.advance_iterator(self.stream)
+ next(self.stream)
buf = [token.value]
lineno = token.lineno
while self.stream.current.type == 'string':
buf.append(self.stream.current.value)
- six.advance_iterator(self.stream)
+ next(self.stream)
node = nodes.Const(''.join(buf), lineno=lineno)
elif token.type in ('integer', 'float'):
- six.advance_iterator(self.stream)
+ next(self.stream)
node = nodes.Const(token.value, lineno=token.lineno)
elif token.type == 'lparen':
- six.advance_iterator(self.stream)
+ next(self.stream)
node = self.parse_tuple(explicit_parentheses=True)
self.stream.expect('rparen')
elif token.type == 'lbracket':
@@ -687,10 +686,10 @@ class Parser(object):
return node
def parse_subscript(self, node):
- token = six.advance_iterator(self.stream)
+ token = next(self.stream)
if token.type == 'dot':
attr_token = self.stream.current
- six.advance_iterator(self.stream)
+ next(self.stream)
if attr_token.type == 'name':
return nodes.Getattr(node, attr_token.value, 'load',
lineno=token.lineno)
@@ -716,13 +715,13 @@ class Parser(object):
lineno = self.stream.current.lineno
if self.stream.current.type == 'colon':
- six.advance_iterator(self.stream)
+ next(self.stream)
args = [None]
else:
node = self.parse_expression()
if self.stream.current.type != 'colon':
return node
- six.advance_iterator(self.stream)
+ next(self.stream)
args = [node]
if self.stream.current.type == 'colon':
@@ -733,7 +732,7 @@ class Parser(object):
args.append(None)
if self.stream.current.type == 'colon':
- six.advance_iterator(self.stream)
+ next(self.stream)
if self.stream.current.type not in ('rbracket', 'comma'):
args.append(self.parse_expression())
else:
@@ -763,11 +762,11 @@ class Parser(object):
break
if self.stream.current.type == 'mul':
ensure(dyn_args is None and dyn_kwargs is None)
- six.advance_iterator(self.stream)
+ next(self.stream)
dyn_args = self.parse_expression()
elif self.stream.current.type == 'pow':
ensure(dyn_kwargs is None)
- six.advance_iterator(self.stream)
+ next(self.stream)
dyn_kwargs = self.parse_expression()
else:
ensure(dyn_args is None and dyn_kwargs is None)
@@ -793,11 +792,11 @@ class Parser(object):
def parse_filter(self, node, start_inline=False):
while self.stream.current.type == 'pipe' or start_inline:
if not start_inline:
- six.advance_iterator(self.stream)
+ next(self.stream)
token = self.stream.expect('name')
name = token.value
while self.stream.current.type == 'dot':
- six.advance_iterator(self.stream)
+ next(self.stream)
name += '.' + self.stream.expect('name').value
if self.stream.current.type == 'lparen':
args, kwargs, dyn_args, dyn_kwargs = self.parse_call(None)
@@ -811,15 +810,15 @@ class Parser(object):
return node
def parse_test(self, node):
- token = six.advance_iterator(self.stream)
+ token = next(self.stream)
if self.stream.current.test('name:not'):
- six.advance_iterator(self.stream)
+ next(self.stream)
negated = True
else:
negated = False
name = self.stream.expect('name').value
while self.stream.current.type == 'dot':
- six.advance_iterator(self.stream)
+ next(self.stream)
name += '.' + self.stream.expect('name').value
dyn_args = dyn_kwargs = None
kwargs = []
@@ -862,14 +861,14 @@ class Parser(object):
if token.value:
add_data(nodes.TemplateData(token.value,
lineno=token.lineno))
- six.advance_iterator(self.stream)
+ next(self.stream)
elif token.type == 'variable_begin':
- six.advance_iterator(self.stream)
+ next(self.stream)
add_data(self.parse_tuple(with_condexpr=True))
self.stream.expect('variable_end')
elif token.type == 'block_begin':
flush_data()
- six.advance_iterator(self.stream)
+ next(self.stream)
if end_tokens is not None and \
self.stream.current.test_any(*end_tokens):
return body
diff --git a/jinja2/runtime.py b/jinja2/runtime.py
index 9742ece..f2c4719 100644
--- a/jinja2/runtime.py
+++ b/jinja2/runtime.py
@@ -14,6 +14,7 @@ from jinja2.utils import Markup, soft_unicode, escape, missing, concat, \
internalcode, object_type_repr
from jinja2.exceptions import UndefinedError, TemplateRuntimeError, \
TemplateNotFound
+from jinja2._compat import next
import six
from six.moves import map
@@ -320,7 +321,7 @@ class LoopContext(object):
def _safe_next(self):
try:
- return six.advance_iterator(self._iterator)
+ return next(self._iterator)
except StopIteration:
return _last_iteration
diff --git a/jinja2/testsuite/api.py b/jinja2/testsuite/api.py
index f6bca48..1b68bf8 100644
--- a/jinja2/testsuite/api.py
+++ b/jinja2/testsuite/api.py
@@ -14,12 +14,12 @@ import tempfile
import shutil
from jinja2.testsuite import JinjaTestCase
+from jinja2._compat import next
from jinja2 import Environment, Undefined, DebugUndefined, \
StrictUndefined, UndefinedError, meta, \
is_undefined, Template, DictLoader
from jinja2.utils import Cycler
-import six
env = Environment()
@@ -54,8 +54,8 @@ class ExtendedAPITestCase(JinjaTestCase):
c = Cycler(*items)
for item in items + items:
assert c.current == item
- assert six.advance_iterator(c) == item
- six.advance_iterator(c)
+ assert next(c) == item
+ next(c)
assert c.current == 2
c.reset()
assert c.current == 1
@@ -111,8 +111,8 @@ class MetaTestCase(JinjaTestCase):
def test_find_refererenced_templates(self):
ast = env.parse('{% extends "layout.html" %}{% include helper %}')
i = meta.find_referenced_templates(ast)
- assert six.advance_iterator(i) == 'layout.html'
- assert six.advance_iterator(i) is None
+ assert next(i) == 'layout.html'
+ assert next(i) is None
assert list(i) == []
ast = env.parse('{% extends "layout.html" %}'
@@ -146,20 +146,20 @@ class StreamingTestCase(JinjaTestCase):
tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
"}} - {{ item }}</li>{%- endfor %}</ul>")
stream = tmpl.stream(seq=list(range(4)))
- self.assert_equal(six.advance_iterator(stream), '<ul>')
- self.assert_equal(six.advance_iterator(stream), '<li>1 - 0</li>')
- self.assert_equal(six.advance_iterator(stream), '<li>2 - 1</li>')
- self.assert_equal(six.advance_iterator(stream), '<li>3 - 2</li>')
- self.assert_equal(six.advance_iterator(stream), '<li>4 - 3</li>')
- self.assert_equal(six.advance_iterator(stream), '</ul>')
+ self.assert_equal(next(stream), '<ul>')
+ self.assert_equal(next(stream), '<li>1 - 0</li>')
+ self.assert_equal(next(stream), '<li>2 - 1</li>')
+ self.assert_equal(next(stream), '<li>3 - 2</li>')
+ self.assert_equal(next(stream), '<li>4 - 3</li>')
+ self.assert_equal(next(stream), '</ul>')
def test_buffered_streaming(self):
tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
"}} - {{ item }}</li>{%- endfor %}</ul>")
stream = tmpl.stream(seq=list(range(4)))
stream.enable_buffering(size=3)
- self.assert_equal(six.advance_iterator(stream), u'<ul><li>1 - 0</li><li>2 - 1</li>')
- self.assert_equal(six.advance_iterator(stream), u'<li>3 - 2</li><li>4 - 3</li></ul>')
+ self.assert_equal(next(stream), u'<ul><li>1 - 0</li><li>2 - 1</li>')
+ self.assert_equal(next(stream), u'<li>3 - 2</li><li>4 - 3</li></ul>')
def test_streaming_behavior(self):
tmpl = env.from_string("")
diff --git a/jinja2/testsuite/ext.py b/jinja2/testsuite/ext.py
index 817b1d2..9fd75ea 100644
--- a/jinja2/testsuite/ext.py
+++ b/jinja2/testsuite/ext.py
@@ -9,6 +9,7 @@
:license: BSD, see LICENSE for more details.
"""
import re
+import six
import unittest
from jinja2.testsuite import JinjaTestCase
@@ -17,7 +18,7 @@ from jinja2 import Environment, DictLoader, contextfunction, nodes
from jinja2.exceptions import TemplateAssertionError
from jinja2.ext import Extension
from jinja2.lexer import Token, count_newlines
-import six
+from jinja2._compat import next
from six import BytesIO
importable_object = 23
@@ -111,7 +112,7 @@ class TestExtension(Extension):
self.attr('ext_attr'),
nodes.ImportedName(__name__ + '.importable_object'),
nodes.ContextReference()
- ])]).set_lineno(six.advance_iterator(parser.stream).lineno)
+ ])]).set_lineno(next(parser.stream).lineno)
def _dump(self, sandboxed, ext_attr, imported_object, context):
return '%s|%s|%s|%s' % (
diff --git a/jinja2/testsuite/lexnparse.py b/jinja2/testsuite/lexnparse.py
index d2473cf..cbe0f2c 100644
--- a/jinja2/testsuite/lexnparse.py
+++ b/jinja2/testsuite/lexnparse.py
@@ -9,14 +9,15 @@
:license: BSD, see LICENSE for more details.
"""
import sys
+import six
import unittest
from jinja2.testsuite import JinjaTestCase
from jinja2 import Environment, Template, TemplateSyntaxError, \
UndefinedError, nodes
+from jinja2._compat import next
from jinja2.lexer import Token, TokenStream, TOKEN_EOF, TOKEN_BLOCK_BEGIN, TOKEN_BLOCK_END
-import six
env = Environment()
@@ -39,11 +40,11 @@ class TokenStreamTestCase(JinjaTestCase):
assert ts.current.type is TOKEN_BLOCK_BEGIN
assert bool(ts)
assert not bool(ts.eos)
- six.advance_iterator(ts)
+ next(ts)
assert ts.current.type is TOKEN_BLOCK_END
assert bool(ts)
assert not bool(ts.eos)
- six.advance_iterator(ts)
+ next(ts)
assert ts.current.type is TOKEN_EOF
assert not bool(ts)
assert bool(ts.eos)
@@ -98,7 +99,7 @@ class LexerTestCase(JinjaTestCase):
if test in '([{}])':
continue
stream = env.lexer.tokenize('{{ %s }}' % test)
- six.advance_iterator(stream)
+ next(stream)
assert stream.current.type == expect
def test_normalizing(self):