mirror of
https://gitee.com/openharmony/third_party_jinja2
synced 2024-11-23 07:10:31 +00:00
Use object.__hash__ for Node.__hash__
This fixes a regression in commit 60293416db
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.
This commit is contained in:
parent
c0130ea7dd
commit
9b96b4817a
@ -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
|
||||
|
@ -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)
|
||||
|
3
tests/test_nodes.py
Normal file
3
tests/test_nodes.py
Normal file
@ -0,0 +1,3 @@
|
||||
def test_template_hash(env):
|
||||
template = env.parse("hash test")
|
||||
hash(template)
|
Loading…
Reference in New Issue
Block a user