| Index: third_party/jinja2/nodes.py
|
| diff --git a/third_party/jinja2/nodes.py b/third_party/jinja2/nodes.py
|
| index f9da1da5a295f364635ece012a746d3e3afc8814..c5697e6b5ec3737a0e43656c883340656c4544d3 100644
|
| --- a/third_party/jinja2/nodes.py
|
| +++ b/third_party/jinja2/nodes.py
|
| @@ -13,13 +13,15 @@
|
| :license: BSD, see LICENSE for more details.
|
| """
|
| import operator
|
| -from itertools import chain, izip
|
| +
|
| from collections import deque
|
| -from jinja2.utils import Markup, MethodType, FunctionType
|
| +from jinja2.utils import Markup
|
| +from jinja2._compat import next, izip, with_metaclass, text_type, \
|
| + method_type, function_type
|
|
|
|
|
| #: the types we support for context functions
|
| -_context_function_types = (FunctionType, MethodType)
|
| +_context_function_types = (function_type, method_type)
|
|
|
|
|
| _binop_to_func = {
|
| @@ -102,9 +104,9 @@ def get_eval_context(node, ctx):
|
| return ctx
|
|
|
|
|
| -class Node(object):
|
| +class Node(with_metaclass(NodeType, object)):
|
| """Baseclass for all Jinja2 nodes. There are a number of nodes available
|
| - of different types. There are three major types:
|
| + of different types. There are four major types:
|
|
|
| - :class:`Stmt`: statements
|
| - :class:`Expr`: expressions
|
| @@ -118,7 +120,6 @@ class Node(object):
|
| The `environment` attribute is set at the end of the parsing process for
|
| all nodes automatically.
|
| """
|
| - __metaclass__ = NodeType
|
| fields = ()
|
| attributes = ('lineno', 'environment')
|
| abstract = True
|
| @@ -142,7 +143,7 @@ class Node(object):
|
| setattr(self, attr, attributes.pop(attr, None))
|
| if attributes:
|
| raise TypeError('unknown attribute %r' %
|
| - iter(attributes).next())
|
| + next(iter(attributes)))
|
|
|
| def iter_fields(self, exclude=None, only=None):
|
| """This method iterates over all fields that are defined and yields
|
| @@ -231,6 +232,9 @@ class Node(object):
|
| def __ne__(self, other):
|
| return not self.__eq__(other)
|
|
|
| + # Restore Python 2 hashing behavior on Python 3
|
| + __hash__ = object.__hash__
|
| +
|
| def __repr__(self):
|
| return '%s(%s)' % (
|
| self.__class__.__name__,
|
| @@ -440,7 +444,7 @@ class Const(Literal):
|
| constant value in the generated code, otherwise it will raise
|
| an `Impossible` exception.
|
| """
|
| - from compiler import has_safe_repr
|
| + from .compiler import has_safe_repr
|
| if not has_safe_repr(value):
|
| raise Impossible()
|
| return cls(value, lineno=lineno, environment=environment)
|
| @@ -687,7 +691,7 @@ class Concat(Expr):
|
|
|
| def as_const(self, eval_ctx=None):
|
| eval_ctx = get_eval_context(self, eval_ctx)
|
| - return ''.join(unicode(x.as_const(eval_ctx)) for x in self.nodes)
|
| + return ''.join(text_type(x.as_const(eval_ctx)) for x in self.nodes)
|
|
|
|
|
| class Compare(Expr):
|
|
|