diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-09-28 18:07:19 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-09-28 12:07:36 -0400 |
| commit | 8368d5a4006d84abacbcf53b9688a8f84ccf6f0c (patch) | |
| tree | c85c99236831f16dff68f6971b77d73ed89bbbe9 | |
| parent | aff2df2427232807a88c2f408e7dc62b88f51cd0 (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.py | 3 | ||||
| -rw-r--r-- | tests/utils_tests/test_tree.py | 10 |
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) |
