def traverse_watchlist(entity): """ Traverse the watchlist for all affected topics. Returns only the most closely matching watchlist entries. """ def merge(outer, inner): return inner + [w for w in outer if not w.user in [w.user for w in inner]] watches = Watch.all_by_entity(entity) if isinstance(entity, Comment): if entity.reply is not None: watches = merge(watches, traverse_watchlist(entity.reply)) else: watches = merge(watches, traverse_watchlist(entity.topic)) elif isinstance(entity, Delegateable): if entity.milestone is not None and not entity.milestone.is_deleted(): watches = merge(watches, traverse_watchlist(entity.milestone)) if len(entity.parents): for parent in entity.parents: watches = merge(watches, traverse_watchlist(parent)) else: watches = merge(watches, traverse_watchlist(entity.instance)) return watches
def traverse_watchlist(entity): """ Traverse the watchlist for all affected topics. Returns only the most closely matching watchlist entries. """ def merge(outer, inner): return inner + [w for w in outer if \ not w.user in [w.user for w in inner]] watches = Watch.all_by_entity(entity) if isinstance(entity, Comment): if entity.reply is not None: watches = merge(watches, traverse_watchlist(entity.reply)) else: watches = merge(watches, traverse_watchlist(entity.topic)) elif isinstance(entity, Delegateable): if entity.milestone is not None and not entity.milestone.is_deleted(): watches = merge(watches, traverse_watchlist(entity.milestone)) if len(entity.parents): for parent in entity.parents: watches = merge(watches, traverse_watchlist(parent)) else: watches = merge(watches, traverse_watchlist(entity.instance)) return watches