X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/dce049a4e2dd5fee51fe9d8ebafd4c9401c0c5dd..f267b2f2841d407dcdf9c3c0f5406f8c10403ccb:/floof/model/comments.py?ds=sidebyside diff --git a/floof/model/comments.py b/floof/model/comments.py index bcfee9f..5e57c14 100644 --- a/floof/model/comments.py +++ b/floof/model/comments.py @@ -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