diff options
author | Kristian Klette <klette@otovo.com> | 2021-10-27 20:35:20 +0200 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2021-11-09 09:12:22 -0800 |
commit | 9b96b4817a61d7f114de088cfe729a4625c820bc (patch) | |
tree | d61ad5a25283096f4a133b0028789d8e8070fb01 | |
parent | c0130ea7dd138201cf448f6d9a54341deba843ee (diff) | |
download | jinja2-9b96b4817a61d7f114de088cfe729a4625c820bc.tar.gz |
Use object.__hash__ for Node.__hash__
This fixes a regression in commit 60293416db69782fd048a7820667afa4ae7c423b that
changed the `__hash__` implementation of Node from the default pointer
hash, to a hash based on the node fields.
Since these fields contains list objects, they are not hashable, making
every call to `Node.__hash__` fail.
This breaks some third-party usage such as in `django-compressor`
(See: https://github.com/django-compressor/django-compressor/issues/1060)
This changed reverts the hash method back to using `object.__hash__` as
the hash implementation.
-rw-r--r-- | CHANGES.rst | 2 | ||||
-rw-r--r-- | src/jinja2/nodes.py | 3 | ||||
-rw-r--r-- | tests/test_nodes.py | 3 |
3 files changed, 6 insertions, 2 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index ebd23b6..191d900 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -11,6 +11,8 @@ Unreleased when parsing values on Python 3.10. :pr:`1537` - Improve async performance by avoiding checks for common types. :issue:`1514` +- Revert change to ``hash(Node)`` behavior. Nodes are hashed by id + again :issue:`1521` Version 3.0.2 diff --git a/src/jinja2/nodes.py b/src/jinja2/nodes.py index 226e729..8feb269 100644 --- a/src/jinja2/nodes.py +++ b/src/jinja2/nodes.py @@ -241,8 +241,7 @@ class Node(metaclass=NodeType): return tuple(self.iter_fields()) == tuple(other.iter_fields()) - def __hash__(self) -> int: - return hash(tuple(self.iter_fields())) + __hash__ = object.__hash__ def __repr__(self) -> str: args_str = ", ".join(f"{a}={getattr(self, a, None)!r}" for a in self.fields) diff --git a/tests/test_nodes.py b/tests/test_nodes.py new file mode 100644 index 0000000..e910998 --- /dev/null +++ b/tests/test_nodes.py @@ -0,0 +1,3 @@ +def test_template_hash(env): + template = env.parse("hash test") + hash(template) |