Skip to content

Commit bf23124

Browse files
committed
Do not retry processing when there is no picture
1 parent 33562b8 commit bf23124

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

pictures/tasks.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,22 @@ def process_picture_async(
4040
field = model._meta.get_field(field_name)
4141
storage = construct_storage(*storage_construct)
4242

43-
with storage.open(file_name) as file:
44-
with Image.open(file) as img:
45-
for ratio, sources in PictureFieldFile.get_picture_files(
46-
file_name=file_name,
47-
img_width=img.width,
48-
img_height=img.height,
49-
storage=storage,
50-
field=field,
51-
).items():
52-
for file_type, srcset in sources.items():
53-
for width, picture in srcset.items():
54-
picture.save(img)
43+
try:
44+
with storage.open(file_name) as file:
45+
with Image.open(file) as img:
46+
for ratio, sources in PictureFieldFile.get_picture_files(
47+
file_name=file_name,
48+
img_width=img.width,
49+
img_height=img.height,
50+
storage=storage,
51+
field=field,
52+
).items():
53+
for file_type, srcset in sources.items():
54+
for width, picture in srcset.items():
55+
picture.save(img)
56+
except FileNotFoundError:
57+
# The file no longer exists (for example, because it was deleted or replaced).
58+
return
5559

5660

5761
try:

tests/test_tasks.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,17 @@ def test_process_picture__file_cannot_be_reopened(image_upload_file):
1616
Mock(side_effect=ValueError("The file cannot be reopened.")),
1717
)
1818
tasks._process_picture(obj.picture)
19+
20+
21+
@pytest.mark.django_db
22+
def test_process_picture__file_missing(image_upload_file):
23+
# Simulate the case where the file has been removed (or never existed)
24+
# by making file.open raise FileNotFoundError.
25+
obj = SimpleModel.objects.create(picture=image_upload_file)
26+
setattr(
27+
obj.picture.file,
28+
"open",
29+
Mock(side_effect=FileNotFoundError("File does not exist: test.jpg")),
30+
)
31+
# _process_picture should catch the FileNotFoundError and exit gracefully.
32+
tasks._process_picture(obj.picture)

0 commit comments

Comments
 (0)