From 5341d6f12caa4cc8deebff1cb849ac5b0fa0c18e Mon Sep 17 00:00:00 2001 From: Serene-Arc Date: Sun, 20 Nov 2022 18:54:56 +1000 Subject: [PATCH] Add catch for per-submission praw errors --- bdfr/archiver.py | 26 +++++++++++++++----------- bdfr/downloader.py | 6 +++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/bdfr/archiver.py b/bdfr/archiver.py index 214111f..4bd24f5 100644 --- a/bdfr/archiver.py +++ b/bdfr/archiver.py @@ -8,6 +8,7 @@ from typing import Iterator import dict2xml import praw.models +import prawcore import yaml from bdfr.archive_entry.base_archive_entry import BaseArchiveEntry @@ -28,17 +29,20 @@ class Archiver(RedditConnector): def download(self): for generator in self.reddit_lists: for submission in generator: - if (submission.author and submission.author.name in self.args.ignore_user) or \ - (submission.author is None and 'DELETED' in self.args.ignore_user): - logger.debug( - f'Submission {submission.id} in {submission.subreddit.display_name} skipped' - f' due to {submission.author.name if submission.author else "DELETED"} being an ignored user') - continue - if submission.id in self.excluded_submission_ids: - logger.debug(f'Object {submission.id} in exclusion list, skipping') - continue - logger.debug(f'Attempting to archive submission {submission.id}') - self.write_entry(submission) + try: + if (submission.author and submission.author.name in self.args.ignore_user) or \ + (submission.author is None and 'DELETED' in self.args.ignore_user): + logger.debug( + f'Submission {submission.id} in {submission.subreddit.display_name} skipped' + f' due to {submission.author.name if submission.author else "DELETED"} being an ignored user') + continue + if submission.id in self.excluded_submission_ids: + logger.debug(f'Object {submission.id} in exclusion list, skipping') + continue + logger.debug(f'Attempting to archive submission {submission.id}') + self.write_entry(submission) + except prawcore.PrawcoreException as e: + logger.error(f'Submission {submission.id} failed to be archived due to a PRAW exception: {e}') def get_submissions_from_link(self) -> list[list[praw.models.Submission]]: supplied_submissions = [] diff --git a/bdfr/downloader.py b/bdfr/downloader.py index 7709add..057f6af 100644 --- a/bdfr/downloader.py +++ b/bdfr/downloader.py @@ -12,6 +12,7 @@ from pathlib import Path import praw import praw.exceptions import praw.models +import prawcore from bdfr import exceptions as errors from bdfr.configuration import Configuration @@ -42,7 +43,10 @@ class RedditDownloader(RedditConnector): def download(self): for generator in self.reddit_lists: for submission in generator: - self._download_submission(submission) + try: + self._download_submission(submission) + except prawcore.PrawcoreException as e: + logger.error(f'Submission {submission.id} failed to download due to a PRAW exception: {e}') def _download_submission(self, submission: praw.models.Submission): if submission.id in self.excluded_submission_ids: