def grow_trees(stream): tree = Tree() node_added = signal('node_added') for parent, child, created_at in stream: candidate = Edge(parent, child, created_at) if tree.should_add(candidate): tree.add(candidate) if tree.is_root(candidate): node_added.send('grow_trees', tree_name=tree.name, edge=candidate) node_added.send('grow_trees', tree_name=tree.name, edge=candidate) return tree