Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 def _tree_filter(self, x):
     return tree_sort_fn(x) < self.after._id
Exemplo n.º 3
0
 def _tree_filter_reverse(self, x):
     return tree_sort_fn(x) >= self.after._id
Exemplo n.º 4
0
 def _tree_filter(self, x):
     return tree_sort_fn(x) < self.after._id
Exemplo n.º 5
0
 def _tree_filter_reverse(self, x):
     return tree_sort_fn(x) >= self.after._id