Merge branch 'comments'
[zzz-floof.git] / floof / model / comments.py
index bcfee9f..5e57c14 100644 (file)
@@ -12,6 +12,8 @@ def indent_comments(comments):
     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
@@ -103,3 +105,16 @@ class Comment(Entity):
                 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