def patch(self, request, id, Format=None): logger.info('-' * 100) logger.info(f'Comment "{id}" patch =>') # Gets the reddit instance from the user in request (ClientOrg) reddit, client_org = Utils.new_client_request(request.user) comment = CommentsUtils.get_comment_if_exists(id, reddit) if comment is None: raise exceptions.NotFound( detail={'detail': f'No comment exists with the id: {id}.'}) # Get the markdown content from json body attribute markdown_body = Utils.validate_body_value(request.data.get('body')) status_code = status.HTTP_200_OK updated_comment_data = None if not reddit.read_only: # Only can modify the comment if author is the same as the client redditor # So check for comment redditor and client data comment_redditor = comment.author redditor_id, redditor_name = ClientsUtils.get_redditor_id_name( client_org) if comment_redditor.id == redditor_id: # Try to delete the comment now try: updated_comment = comment.edit(markdown_body) # Here I need to call refresh() to get the actual replies count updated_comment.refresh() updated_comment_data = CommentsUtils.get_comment_data( updated_comment) msg = f'Comment \'{updated_comment.id}\' successfully edited.' logger.info(msg) except Exception as ex: msg = f'Error edit comment. Exception raised: {repr(ex)}.' status_code = status.HTTP_503_SERVICE_UNAVAILABLE logger.error(msg) else: msg = ( f'Cannot edit the comment with id: {id}. ' f'The authenticated reddit user u/{redditor_name} ' f'needs to be the same as the comment\'s author u/{comment_redditor.name}' ) status_code = status.HTTP_403_FORBIDDEN logger.info(msg) else: msg = f'Reddit instance is read only. Cannot edit comment with id: {id}.' status_code = status.HTTP_405_METHOD_NOT_ALLOWED logger.warn(msg) return Response({ 'detail': msg, 'comment': updated_comment_data }, status=status_code)
def post(self, request, id, Format=None): logger.info('-' * 100) logger.info(f'Submission "{id}" reply =>') # Gets the reddit instance from the user in request (ClientOrg) reddit, client_org = Utils.new_client_request(request.user) # Get subreddit instance with the name provided submission = SubmissionsUtils.get_sub_if_exists(id, reddit) if not submission: raise exceptions.NotFound( detail={'detail': f'No submission exists with the id: {id}.'} ) # Get the markdown content from json body attribute markdown_body = Utils.validate_body_value(request.data.get('body')) comment_data = None status_code = status.HTTP_201_CREATED if not reddit.read_only: # Try to post the comment to the submission try: comment = submission.reply(markdown_body) comment_data = CommentsUtils.get_comment_data(comment) _, redditor_name = ClientsUtils.get_redditor_id_name(client_org) msg = ( f'New comment posted by u/{redditor_name} with id \'{comment.id}\' ' f'to submission with id: {id}' ) logger.info(msg) except Exception as ex: if isinstance(ex, Forbidden): msg = ( f'Cannot create a comment in submission with id: {id}. ' f'Forbidden exception: {repr(ex)}' ) status_code = status.HTTP_403_FORBIDDEN else: msg = ( f'Error creating comment in submission with id: {id}. ' f'Exception raised: {repr(ex)}.' ) status_code = status.HTTP_503_SERVICE_UNAVAILABLE logger.error(msg) else: msg = f'Reddit instance is read only. Cannot create comment in submission with id: {id}.' status_code = status.HTTP_405_METHOD_NOT_ALLOWED logger.warn(msg) return Response({'detail': msg, 'comment': comment_data}, status=status_code)