The first comment's indent level is 0.
The comments must be a complete subtree, ordered by their `left` property.
+
+ This function will also cache the `parent` property for each comment.
"""
last_comment = None
# comment's left/right
Comment.query.filter(Comment.discussion == self.discussion) \
.filter(Comment.left >= parent_right) \
- .update({ Comment.left: Comment.left + 2 })
+ .update({ 'left': Comment.left + 2 })
Comment.query.filter(Comment.discussion == self.discussion) \
.filter(Comment.right >= parent_right) \
- .update({ Comment.right: Comment.right + 2 })
+ .update({ 'right': Comment.right + 2 })
# Then stick the new comment in the right place
self.left = parent_right
self.left = max_right + 1
self.right = max_right + 2
+ @property
+ def parent(self):
+ """Returns this comment's parent. This is cached, hence its being a
+ property and not a method.
+ """
+ if not hasattr(self, '_parent'):
+ self._parent = Comment.query \
+ .filter(Comment.discussion_id == self.discussion_id) \
+ .filter(Comment.left < self.left) \
+ .filter(Comment.right > self.right) \
+ .order_by(Comment.left.desc()) \
+ .first()
+ return self._parent