diff --git a/kademlia/node.py b/kademlia/node.py index 6d90493..5f82c29 100644 --- a/kademlia/node.py +++ b/kademlia/node.py @@ -94,8 +94,9 @@ class NodeHeap(object): nodes = [nodes] for node in nodes: - distance = self.node.distanceTo(node) - heapq.heappush(self.heap, (distance, node)) + if node not in self: + distance = self.node.distanceTo(node) + heapq.heappush(self.heap, (distance, node)) def __len__(self): return min(len(self.heap), self.maxsize) @@ -104,5 +105,11 @@ class NodeHeap(object): nodes = heapq.nsmallest(self.maxsize, self.heap) return iter(map(itemgetter(1), nodes)) + def __contains__(self, node): + for distance, n in self.heap: + if node.id == n.id: + return True + return False + def getUncontacted(self): return [n for n in self if n.id not in self.contacted]