def serialize_comment(self, comment): """Serializes a comment. This will provide information on the comment that may be useful to the JavaScript code. Subclasses that want to add additional data should generally augment the result of this function and not replace it. """ review = comment.get_review() user = self.request.user return { 'comment_id': comment.pk, 'text': escape(comment.text), 'html': markdown_render_conditional(comment.text, comment.rich_text), 'user': { 'username': review.user.username, 'name': review.user.get_full_name() or review.user.username, }, 'url': comment.get_review_url(), 'localdraft': review.user == user and not review.public, 'review_id': review.pk, 'review_request_id': review.review_request_id, 'issue_opened': comment.issue_opened, 'issue_status': comment.issue_status_to_string( comment.issue_status), }
def serialize_comment(self, comment): """Serializes a comment. This will provide information on the comment that may be useful to the JavaScript code. Subclasses that want to add additional data should generally augment the result of this function and not replace it. """ review = comment.get_review() user = self.request.user return { 'comment_id': comment.pk, 'text': normalize_text_for_edit(user, comment.text, comment.rich_text), 'rich_text': comment.rich_text, 'html': markdown_render_conditional(comment.text, comment.rich_text), 'user': { 'username': review.user.username, 'name': review.user.get_full_name() or review.user.username, }, 'url': comment.get_review_url(), 'localdraft': review.user == user and not review.public, 'review_id': review.pk, 'review_request_id': review.review_request_id, 'issue_opened': comment.issue_opened, 'issue_status': comment.issue_status_to_string( comment.issue_status), }
def test_markdown_render_conditional_rich_text(self): """Testing markdown_render_conditional with rich text""" text = markdown_render_conditional(text='## <script>alert();</script>', rich_text=True) self.assertEqual(text, '<h2><script>alert();</script></h2>') self.assertFalse(isinstance(text, SafeText))
def serialize_comment(self, comment): """Serialize a comment. This will provide information on the comment that may be useful to the JavaScript code. Subclasses that want to add additional data should generally augment the result of this function and not replace it. Args: comment (reviewboard.reviews.models.base_comment.BaseComment): The comment to serialize. Returns: dict: The serialized comment data. """ review = comment.get_review() user = self.request.user return { 'comment_id': comment.pk, 'text': normalize_text_for_edit(user, comment.text, comment.rich_text), 'rich_text': comment.rich_text, 'html': markdown_render_conditional(comment.text, comment.rich_text), 'user': { 'username': review.user.username, 'name': review.user.get_profile().get_display_name(user), }, 'url': comment.get_review_url(), 'localdraft': review.user == user and not review.public, 'review_id': review.pk, 'review_request_id': review.review_request_id, 'issue_opened': comment.issue_opened, 'issue_status': comment.issue_status_to_string( comment.issue_status), }
def comment_counts(user, all_comments, filediff, interfilediff=None): """ Returns an array of current comments for a filediff, sorted by line number. Each entry in the array has a dictionary containing the following keys: =========== ================================================== Key Description =========== ================================================== comment_id The ID of the comment text The plain or rich text of the comment rich_text The rich text flag for the comment line The first line number num_lines The number of lines this comment spans user A dictionary containing "username" and "name" keys for the user url The URL to the comment localdraft True if this is the current user's draft comment review_id The ID of the review this comment is associated with ============================================================== """ comment_dict = {} if interfilediff: key = (filediff.pk, interfilediff.pk) else: key = (filediff.pk, None) comments = all_comments.get(key, []) for comment in comments: review = comment.get_review() if review and (review.public or review.user == user): key = (comment.first_line, comment.num_lines) comment_dict.setdefault(key, []).append({ 'comment_id': comment.id, 'text': normalize_text_for_edit(user, comment.text, comment.rich_text), 'html': markdown_render_conditional(comment.text, comment.rich_text), 'rich_text': comment.rich_text, 'line': comment.first_line, 'num_lines': comment.num_lines, 'user': { 'username': review.user.username, 'name': (review.user.get_full_name() or review.user.username), }, 'url': comment.get_review_url(), 'localdraft': (review.user == user and not review.public), 'review_id': review.id, 'issue_opened': comment.issue_opened, 'issue_status': BaseComment.issue_status_to_string( comment.issue_status), 'reply_to_id': comment.reply_to_id, }) comments_array = [] for key, value in six.iteritems(comment_dict): comments_array.append({ 'linenum': key[0], 'num_lines': key[1], 'comments': value, }) comments_array.sort( cmp=lambda x, y: (cmp(x['linenum'], y['linenum'] or cmp(x['num_lines'], y['num_lines'])))) return comments_array
def comment_counts(user, all_comments, filediff, interfilediff=None): """ Returns an array of current comments for a filediff, sorted by line number. Each entry in the array has a dictionary containing the following keys: =========== ================================================== Key Description =========== ================================================== comment_id The ID of the comment text The plain or rich text of the comment rich_text The rich text flag for the comment line The first line number num_lines The number of lines this comment spans user A dictionary containing "username" and "name" keys for the user url The URL to the comment localdraft True if this is the current user's draft comment review_id The ID of the review this comment is associated with ============================================================== """ comment_dict = {} if interfilediff: key = (filediff.pk, interfilediff.pk) else: key = (filediff.pk, None) comments = all_comments.get(key, []) for comment in comments: review = comment.get_review() if review and (review.public or review.user_id == user.pk): key = (comment.first_line, comment.num_lines) comment_dict.setdefault(key, []).append({ 'comment_id': comment.id, 'text': normalize_text_for_edit(user, comment.text, comment.rich_text), 'html': markdown_render_conditional(comment.text, comment.rich_text), 'rich_text': comment.rich_text, 'line': comment.first_line, 'num_lines': comment.num_lines, 'user': { 'username': review.user.username, 'name': (review.user.get_full_name() or review.user.username), }, 'url': comment.get_review_url(), 'localdraft': (review.user == user and not review.public), 'review_id': review.id, 'issue_opened': comment.issue_opened, 'issue_status': BaseComment.issue_status_to_string( comment.issue_status), 'reply_to_id': comment.reply_to_id, }) comments_array = [] for key, value in six.iteritems(comment_dict): comments_array.append({ 'linenum': key[0], 'num_lines': key[1], 'comments': value, }) comments_array.sort(key=cmp_to_key( lambda x, y: cmp(x['linenum'], y['linenum'] or cmp(x['num_lines'], y['num_lines'])))) return comments_array
def test_markdown_render_conditional_plain_text(self): """Testing markdown_render_conditional with plain text""" text = markdown_render_conditional(text='## <script>alert();</script>', rich_text=False) self.assertEqual(text, r'## <script>alert();</script>') self.assertTrue(isinstance(text, SafeText))