def _apply_pagination(self, tree): if self.parent or self.num is None: return tree, None, None prev_item = None next_item = None if self.after: # truncate the tree to only show before/after requested message if self.reverse: next_item = self.after._id tree = [ (parent_id, child_ids) for parent_id, child_ids in tree if tree_sort_fn((parent_id, child_ids)) >= next_item ] # special handling for after+reverse (before link): truncate # the tree so it has num messages before the requested one if len(tree) > self.num: first_id, first_children = tree[-(self.num + 1)] prev_item = tree_sort_fn((first_id, first_children)) tree = tree[-self.num:] else: prev_item = self.after._id tree = [ (parent_id, child_ids) for parent_id, child_ids in tree if tree_sort_fn((parent_id, child_ids)) < prev_item ] if len(tree) > self.num: # truncate the tree to show only num conversations tree = tree[:self.num] last_id, last_children = tree[-1] next_item = tree_sort_fn((last_id, last_children)) return tree, prev_item, next_item
def _tree_filter(self, x): return tree_sort_fn(x) < self.after._id
def _tree_filter_reverse(self, x): return tree_sort_fn(x) >= self.after._id