diff --git a/livesync/indico_livesync/uploader.py b/livesync/indico_livesync/uploader.py index 364d12a..d4fe0b9 100644 --- a/livesync/indico_livesync/uploader.py +++ b/livesync/indico_livesync/uploader.py @@ -42,9 +42,14 @@ class Uploader(object): :param records: an iterable containing queue entries """ + self_name = type(self).__name__ for i, batch in enumerate(grouper(records, self.BATCH_SIZE, skip_missing=True), 1): - self.logger.debug('{} processing batch {}'.format(type(self).__name__, i)) - self.upload_records(batch, from_queue=True) + self.logger.debug('{} processing batch {}'.format(self_name, i)) + try: + self.upload_records(batch, from_queue=True) + except Exception: + self.logger.exception('{} could not upload batch'.format(self_name)) + return self.processed_records(batch) if self.task: self.task.extend_runtime() diff --git a/livesync/tests/uploader_test.py b/livesync/tests/uploader_test.py index 40a8494..115a3ed 100644 --- a/livesync/tests/uploader_test.py +++ b/livesync/tests/uploader_test.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU General Public License # along with Indico; if not, see . -import pytest from mock import MagicMock from indico_livesync.models.queue import LiveSyncQueueEntry, ChangeType @@ -26,6 +25,7 @@ class RecordingUploader(Uploader): def __init__(self, *args, **kwargs): super(RecordingUploader, self).__init__(*args, **kwargs) self._uploaded = [] + self.logger = MagicMock() def upload_records(self, records, from_queue): self._uploaded.append((records, from_queue)) @@ -98,9 +98,9 @@ def test_run_failing(mocker): uploader = FailingUploader(create_mock_agent()) uploader.BATCH_SIZE = 3 records = tuple(LiveSyncQueueEntry(change=ChangeType.created) for _ in xrange(10)) - with pytest.raises(Exception): - uploader.run(records) - # No uploads should bappen after a failed batch + uploader.run(records) + assert uploader.logger.exception.called + # No uploads should happen after a failed batch assert uploader._uploaded == [(records[:3], True), (records[3:6], True)] # Only successful records should be marked as processed assert all(record.processed for record in records[:3])