summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2017-09-28 18:07:19 +0200
committerTim Graham <timograham@gmail.com>2017-09-28 12:07:36 -0400
commit8368d5a4006d84abacbcf53b9688a8f84ccf6f0c (patch)
treec85c99236831f16dff68f6971b77d73ed89bbbe9
parentaff2df2427232807a88c2f408e7dc62b88f51cd0 (diff)
[2.0.x] Fixed #28629 -- Made tree.Node instances hashable.
Regression in 508b5debfb16843a8443ebac82c1fb91f15da687 which added Node.__eq__(). Backport of fc6528b25ab1834be1a478b405bf8f7ec5cf860c from master
-rw-r--r--django/utils/tree.py3
-rw-r--r--tests/utils_tests/test_tree.py10
2 files changed, 13 insertions, 0 deletions
diff --git a/django/utils/tree.py b/django/utils/tree.py
index 74612736f1..677f03d1b2 100644
--- a/django/utils/tree.py
+++ b/django/utils/tree.py
@@ -70,6 +70,9 @@ class Node:
return self.children == other.children
return False
+ def __hash__(self):
+ return hash((self.__class__, self.connector, self.negated) + tuple(self.children))
+
def add(self, data, conn_type, squash=True):
"""
Combine this tree and the data represented by data using the
diff --git a/tests/utils_tests/test_tree.py b/tests/utils_tests/test_tree.py
index 98db5f6012..65f49c06a6 100644
--- a/tests/utils_tests/test_tree.py
+++ b/tests/utils_tests/test_tree.py
@@ -19,6 +19,16 @@ class NodeTests(unittest.TestCase):
"<Node: (DEFAULT: ('a', 1), ('b', 2))>")
self.assertEqual(repr(self.node2), "<Node: (DEFAULT: )>")
+ def test_hash(self):
+ node3 = Node(self.node1_children, negated=True)
+ node4 = Node(self.node1_children, connector='OTHER')
+ node5 = Node(self.node1_children)
+ self.assertNotEqual(hash(self.node1), hash(self.node2))
+ self.assertNotEqual(hash(self.node1), hash(node3))
+ self.assertNotEqual(hash(self.node1), hash(node4))
+ self.assertEqual(hash(self.node1), hash(node5))
+ self.assertEqual(hash(self.node2), hash(Node()))
+
def test_len(self):
self.assertEqual(len(self.node1), 2)
self.assertEqual(len(self.node2), 0)