/usr/share/pyshared/threadedcomments/util.py is in python-django-threadedcomments 0.9.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | from itertools import chain, imap
__all__ = ['fill_tree', 'annotate_tree_properties', ]
def _mark_as_root_path(comment):
"""
Mark on comment as Being added to fill the tree.
"""
setattr(comment, 'added_path', True)
return comment
def fill_tree(comments):
"""
Insert extra comments in the comments list, so that the root path of the first comment is always visible.
Use this in comments' pagination to fill in the tree information.
The inserted comments have an ``added_path`` attribute.
"""
if not comments:
return
it = iter(comments)
first = it.next()
extra_path_items = imap(_mark_as_root_path, first.root_path)
return chain(extra_path_items, [first], it)
def annotate_tree_properties(comments):
"""
iterate through nodes and adds some magic properties to each of them
representing opening list of children and closing it
"""
if not comments:
return
it = iter(comments)
# get the first item, this will fail if no items !
old = it.next()
# first item starts a new thread
old.open = True
last = set()
for c in it:
# if this comment has a parent, store its last child for future reference
if old.last_child_id:
last.add(old.last_child_id)
# this is the last child, mark it
if c.pk in last:
c.last = True
# increase the depth
if c.depth > old.depth:
c.open = True
else: # c.depth <= old.depth
# close some depths
old.close = range(old.depth - c.depth)
# new thread
if old.root_id != c.root_id:
# close even the top depth
old.close.append(len(old.close))
# and start a new thread
c.open = True
# empty the last set
last = set()
# iterate
yield old
old = c
old.close = range(old.depth)
yield old
|