Skip to content

Commit 7d17ef6

Browse files
rajvi0106audiodude
authored andcommitted
Fix S3 delete_objects errors and ensure test coverage
1 parent 2b5cd82 commit 7d17ef6

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

wp1/logic/selection.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def delete_keys_from_storage(keys):
144144
)
145145

146146
fully_successful = True
147-
errors = []
147+
148148
# TODO: Check for errors in the response. For now, just pretend
149149
# it's always successful.
150150
# for e in (resp if resp is not None else {}).get('Errors', []):
@@ -154,13 +154,15 @@ def delete_keys_from_storage(keys):
154154

155155
if isinstance(resp, dict):
156156
errors = resp.get("Errors", [])
157-
if errors:
158-
fully_successful = False
159-
for e in errors:
160-
logger.warning(
161-
"Error deleting %r:[code=%r, msg=%r]",
162-
(e["Key"], e["Code"], e["Message"]),
163-
)
157+
if errors:
158+
fully_successful = False
159+
for e in errors:
160+
logger.warning(
161+
"Error deleting %r: [code=%r, msg=%r]",
162+
e["Key"],
163+
e["Code"],
164+
e["Message"],
165+
)
164166

165167
return fully_successful
166168

wp1/logic/selection_test.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,33 @@ def test_delete_objects_non_dict_response(self, patched_connect_storage):
383383
result = logic_selection.delete_keys_from_storage([b"key1"])
384384
self.assertTrue(result)
385385

386+
@patch("wp1.logic.selection.connect_storage")
387+
def test_delete_keys_from_storage_with_errors(self, patched_connect_storage):
388+
s3 = MagicMock()
389+
bucket = MagicMock()
390+
patched_connect_storage.return_value = s3
391+
s3.bucket = bucket
392+
bucket.delete_objects.return_value = {
393+
"Errors": [
394+
{
395+
"Key": "object/key/1",
396+
"Code": "AccessDenied",
397+
"Message": "Access Denied",
398+
}
399+
]
400+
}
401+
actual = logic_selection.delete_keys_from_storage(
402+
[b"object/key/1", b"object/key/2"]
403+
)
404+
405+
bucket.delete_objects.assert_called_once_with(
406+
Delete={
407+
"Objects": [{"Key": "object/key/1"}, {"Key": "object/key/2"}],
408+
"Quiet": True,
409+
}
410+
)
411+
self.assertFalse(actual)
412+
386413
def test_zim_file_requested_at_for(self):
387414
self._insert_selections()
388415
actual = logic_selection.zim_file_requested_at_for(self.wp10db, "xyz1")

0 commit comments

Comments
 (0)