def submit_post(self, post: Post) -> Submission: """ Submit the post to Reddit. If the post is set to be submitted with thumbnail, submit its body in the Rich Text JSON format. Otherwise submit the Markdown content using regular method of `PRAW`. """ log.info("post_submit", post=str(post)) try: if post.submit_with_thumbnail and post.body_rtjson: submission = self.reddit_helper.submit_post_rtjson( subreddit=post.subreddit, title=post.title, body_rtjson=post.body_rtjson, flair_id=post.flair_id, ) else: submission = self.reddit.subreddit( post.subreddit, ).submit( title=post.title, selftext=post.body_md, flair_id=post.flair_id, ) except PrawcoreException as exception: log.exception("post_submit_error") raise RedditError( "Failed to submit the post.", ) from exception post.submission_id = submission.id log.debug("post_submit_result", permalink=submission.permalink) if not post.submit_with_thumbnail: return submission delay = self.post_update_delay log.debug("post_update_delay", delay=delay) click.echo( click.style( "Waiting {0}s before updating the post.".format(delay / 1000), fg="cyan", ), ) time.sleep(delay / 1000) return self.update_post(post, submission)
def test_update_post( mock_reddit, reddit_cutifier_config, post: Post, submission, capsys, ): """ Test updating a post. 1. Test a successful edit. 2. Test updating without providing both `submission` parameter and the :attr:`Post.submission_id`. 3. Previous test with the `submission_id` provided. 4. Test handling of an exception raised by `PRAW`. """ reddit_cutifier = RedditCutifier(reddit_cutifier_config) reddit_cutifier.update_post(post, submission) assert submission.edit.call_args == call(post.body_md) with pytest.raises(RuntimeError): reddit_cutifier.update_post(post) post.submission_id = "cute_id" reddit_cutifier.update_post(post) assert mock_reddit.return_value.submission.call_args == call("cute_id") submission.edit.side_effect = PrawcoreException reddit_cutifier.update_post(post, submission) captured = capsys.readouterr() assert "Failed to update the post" in captured.err