|
|
@ -14,20 +14,45 @@ def comment_to_api_dict(request: Request, comment: Comment) -> dict: |
|
|
|
The schema is defined in our OpenAPI YAML file. |
|
|
|
""" |
|
|
|
|
|
|
|
# Some fields do not require permissions |
|
|
|
comment_id = comment.comment_id36 |
|
|
|
topic_id = comment.topic.topic_id36 |
|
|
|
is_removed = comment.is_removed |
|
|
|
is_deleted = comment.is_deleted |
|
|
|
collapsed = ( |
|
|
|
hasattr(comment, "collapsed_state") and comment.collapsed_state == "full" |
|
|
|
) |
|
|
|
collapsed_individual = ( |
|
|
|
hasattr(comment, "collapsed_state") and comment.collapsed_state == "individual" |
|
|
|
) |
|
|
|
|
|
|
|
# Check permissions for viewing comment details (and set safe defaults) |
|
|
|
author = None |
|
|
|
created_time = None |
|
|
|
edited_time = None |
|
|
|
rendered_html = None |
|
|
|
votes = 0 |
|
|
|
exemplary = None |
|
|
|
by_op = None |
|
|
|
by_me = None |
|
|
|
is_new_comment = None |
|
|
|
voted = False |
|
|
|
bookmarked = False |
|
|
|
|
|
|
|
if request.has_permission("view", comment): |
|
|
|
author = comment.user.username |
|
|
|
created_time = comment.created_time.isoformat() |
|
|
|
edited_time = ( |
|
|
|
comment.last_edited_time.isoformat() if comment.last_edited_time else None |
|
|
|
) |
|
|
|
rendered_html = comment.rendered_html |
|
|
|
votes = comment.num_votes |
|
|
|
exemplary = comment.is_label_active("exemplary") |
|
|
|
by_me = request.user == comment.user if request.user else False |
|
|
|
|
|
|
|
if request.has_permission("view_author", comment.topic): |
|
|
|
by_op = comment.user == comment.topic.user |
|
|
|
|
|
|
|
is_new_comment = ( |
|
|
|
(comment.created_time > comment.topic.last_visit_time) |
|
|
|
if ( |
|
|
@ -38,34 +63,29 @@ def comment_to_api_dict(request: Request, comment: Comment) -> dict: |
|
|
|
else False |
|
|
|
) |
|
|
|
|
|
|
|
if request.has_permission("vote", comment): |
|
|
|
voted = comment.user_voted |
|
|
|
if request.has_permission("bookmark", comment): |
|
|
|
bookmarked = comment.user_bookmarked |
|
|
|
|
|
|
|
return { |
|
|
|
"id": comment.comment_id36, |
|
|
|
"topic_id": comment.topic.topic_id36, |
|
|
|
"id": comment_id, |
|
|
|
"topic_id": topic_id, |
|
|
|
"author": author, |
|
|
|
"rendered_html": rendered_html, |
|
|
|
"created_at": comment.created_time.isoformat(), |
|
|
|
"edited_at": ( |
|
|
|
comment.last_edited_time.isoformat() if comment.last_edited_time else None |
|
|
|
), |
|
|
|
"votes": comment.num_votes, |
|
|
|
"removed": comment.is_removed, |
|
|
|
"deleted": comment.is_deleted, |
|
|
|
"created_at": created_time, |
|
|
|
"edited_at": edited_time, |
|
|
|
"votes": votes, |
|
|
|
"removed": is_removed, |
|
|
|
"deleted": is_deleted, |
|
|
|
"exemplary": exemplary, |
|
|
|
"collapsed": ( |
|
|
|
(comment.collapsed_state == "full") |
|
|
|
if hasattr(comment, "collapsed_state") |
|
|
|
else None |
|
|
|
), |
|
|
|
"collapsed_individual": ( |
|
|
|
(comment.collapsed_state == "individual") |
|
|
|
if hasattr(comment, "collapsed_state") |
|
|
|
else None |
|
|
|
), |
|
|
|
"collapsed": collapsed, |
|
|
|
"collapsed_individual": collapsed_individual, |
|
|
|
"by_op": by_op, |
|
|
|
"by_me": by_me, |
|
|
|
"new_comment": is_new_comment, |
|
|
|
"voted": comment.user_voted, |
|
|
|
"bookmarked": comment.user_bookmarked, |
|
|
|
"voted": voted, |
|
|
|
"bookmarked": bookmarked, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|