def add_comment(self, text, displayed, username, time, proposal, node_id, parent_id, moderator): session = Session() proposal_diff = None proposal_diff_text = None if node_id and proposal: node = session.query(Node).filter(Node.id == node_id).one() differ = CombinedHtmlDiff(node.source, proposal) proposal_diff = differ.make_html() proposal_diff_text = differ.make_text() elif parent_id: parent = session.query(Comment.displayed).\ filter(Comment.id == parent_id).one() if not parent.displayed: raise CommentNotAllowedError( "Can't add child to a parent that is not displayed") comment = Comment(text, displayed, username, 0, time or datetime.now(), proposal, proposal_diff) session.add(comment) session.flush() # We have to flush the session before setting the path so the # Comment has an id. comment.set_path(node_id, parent_id) session.commit() d = comment.serializable() d['document'] = comment.node.document d['proposal_diff_text'] = proposal_diff_text session.close() return d