thumbnailing: Remove unnecessary third return value from resize_emoji.

This commit is contained in:
Alex Vandiver 2024-06-13 04:11:30 +00:00 committed by Tim Abbott
parent 16f8d12285
commit fb929ca218
4 changed files with 25 additions and 35 deletions

View File

@ -93,7 +93,7 @@ def resize_logo(image_data: bytes) -> bytes:
def resize_emoji(
image_data: bytes, emoji_file_name: str, size: int = DEFAULT_EMOJI_SIZE
) -> Tuple[bytes, bool, Optional[bytes]]:
) -> Tuple[bytes, Optional[bytes]]:
if len(image_data) > MAX_EMOJI_GIF_FILE_SIZE_BYTES:
raise BadImageError(_("Image size exceeds limit."))
@ -103,10 +103,9 @@ def resize_emoji(
write_file_ext = os.path.splitext(emoji_file_name)[1]
assert "[" not in write_file_ext
# This function returns three values:
# This function returns two values:
# 1) Emoji image data.
# 2) If the emoji is animated.
# 3) If it is animated, the still image data i.e. first frame of gif.
# 2) If it is animated, the still image data i.e. first frame of gif.
with libvips_check_image(image_data) as source_image:
if source_image.get_n_pages() == 1:
return (
@ -116,7 +115,6 @@ def resize_emoji(
height=size,
crop=pyvips.Interesting.CENTRE,
).write_to_buffer(write_file_ext),
False,
None,
)
first_still = pyvips.Image.thumbnail_buffer(
@ -150,4 +148,4 @@ def resize_emoji(
for frame in animated.pagesplit()
]
animated = frames[0].pagejoin(frames[1:])
return (animated.write_to_buffer(write_file_ext), True, first_still)
return (animated.write_to_buffer(write_file_ext), first_still)

View File

@ -258,20 +258,22 @@ def upload_emoji_image(
backend.upload_single_emoji_image(
f"{emoji_path}.original", content_type, user_profile, image_data
)
resized_image_data, is_animated, still_image_data = resize_emoji(image_data, emoji_file_name)
if is_animated and len(still_image_data) > MAX_EMOJI_GIF_FILE_SIZE_BYTES: # nocoverage
resized_image_data, still_image_data = resize_emoji(image_data, emoji_file_name)
if still_image_data is not None:
if len(still_image_data) > MAX_EMOJI_GIF_FILE_SIZE_BYTES: # nocoverage
raise BadImageError(_("Image size exceeds limit"))
if not is_animated and len(image_data) > MAX_EMOJI_GIF_FILE_SIZE_BYTES: # nocoverage
elif len(image_data) > MAX_EMOJI_GIF_FILE_SIZE_BYTES: # nocoverage
raise BadImageError(_("Image size exceeds limit"))
backend.upload_single_emoji_image(emoji_path, content_type, user_profile, resized_image_data)
if is_animated:
assert still_image_data is not None
if still_image_data is None:
return False
still_path = RealmEmoji.STILL_PATH_ID_TEMPLATE.format(
realm_id=user_profile.realm_id,
emoji_filename_without_extension=os.path.splitext(emoji_file_name)[0],
)
backend.upload_single_emoji_image(still_path, content_type, user_profile, still_image_data)
return is_animated
return True
def get_emoji_file_content(

View File

@ -103,9 +103,8 @@ class TransferUploadsToS3Test(ZulipTestCase):
resized_key = bucket.Object(emoji_path)
image_data = read_test_image_file("img.png")
resized_image_data, is_animated, still_image_data = resize_emoji(image_data, "img.png")
resized_image_data, still_image_data = resize_emoji(image_data, "img.png")
self.assertEqual(is_animated, False)
self.assertEqual(still_image_data, None)
self.assertEqual(image_data, original_key.get()["Body"].read())
self.assertEqual(resized_image_data, resized_key.get()["Body"].read())
@ -135,11 +134,8 @@ class TransferUploadsToS3Test(ZulipTestCase):
)
image_data = read_test_image_file("animated_img.gif")
resized_image_data, is_animated, still_image_data = resize_emoji(
image_data, "animated_img.gif"
)
resized_image_data, still_image_data = resize_emoji(image_data, "animated_img.gif")
self.assertEqual(is_animated, True)
self.assertEqual(type(still_image_data), bytes)
self.assertEqual(image_data, original_key.get()["Body"].read())
self.assertEqual(resized_image_data, resized_key.get()["Body"].read())

View File

@ -1390,10 +1390,9 @@ class EmojiTest(UploadSerializeMixin, ZulipTestCase):
# Test unequal width and height of animated GIF image
animated_unequal_img_data = read_test_image_file("animated_unequal_img.gif")
original_image = pyvips.Image.new_from_buffer(animated_unequal_img_data, "n=-1")
resized_img_data, is_animated, still_img_data = resize_emoji(
resized_img_data, still_img_data = resize_emoji(
animated_unequal_img_data, "animated_unequal_img.gif", size=50
)
self.assertTrue(is_animated)
assert still_img_data is not None
emoji_image = pyvips.Image.new_from_buffer(resized_img_data, "n=-1")
self.assertEqual(emoji_image.get("vips-loader"), "gifload_buffer")
@ -1415,17 +1414,16 @@ class EmojiTest(UploadSerializeMixin, ZulipTestCase):
animated_large_img_data = read_test_image_file("animated_large_img.gif")
original_image = pyvips.Image.new_from_buffer(animated_large_img_data, "n=-1")
resized_img_data, is_animated, still_img_data = resize_emoji(
resized_img_data, still_img_data = resize_emoji(
animated_large_img_data, "animated_large_img.gif", size=50
)
assert still_img_data is not None
emoji_image = pyvips.Image.new_from_buffer(resized_img_data, "n=-1")
self.assertEqual(emoji_image.get("vips-loader"), "gifload_buffer")
self.assertEqual(emoji_image.get_n_pages(), original_image.get_n_pages())
self.assertEqual(emoji_image.get("page-height"), 50)
self.assertEqual(emoji_image.height, 150)
self.assertEqual(emoji_image.width, 50)
self.assertTrue(is_animated)
assert still_img_data
still_image = pyvips.Image.new_from_buffer(still_img_data, "")
self.assertEqual(still_image.get("vips-loader"), "pngload_buffer")
self.assertEqual(still_image.get_n_pages(), 1)
@ -1444,7 +1442,7 @@ class EmojiTest(UploadSerializeMixin, ZulipTestCase):
# Test a non-animated GIF image which does need to be resized
still_large_img_data = read_test_image_file("still_large_img.gif")
resized_img_data, is_animated, no_still_data = resize_emoji(
resized_img_data, no_still_data = resize_emoji(
still_large_img_data, "still_large_img.gif", size=50
)
emoji_image = pyvips.Image.new_from_buffer(resized_img_data, "n=-1")
@ -1452,20 +1450,16 @@ class EmojiTest(UploadSerializeMixin, ZulipTestCase):
self.assertEqual(emoji_image.height, 50)
self.assertEqual(emoji_image.width, 50)
self.assertEqual(emoji_image.get_n_pages(), 1)
self.assertFalse(is_animated)
assert no_still_data is None
# Test a non-animated and non-animatable image format which needs to be resized
still_large_img_data = read_test_image_file("img.jpg")
resized_img_data, is_animated, no_still_data = resize_emoji(
still_large_img_data, "img.jpg", size=50
)
resized_img_data, no_still_data = resize_emoji(still_large_img_data, "img.jpg", size=50)
emoji_image = pyvips.Image.new_from_buffer(resized_img_data, "")
self.assertEqual(emoji_image.get("vips-loader"), "jpegload_buffer")
self.assertEqual(emoji_image.height, 50)
self.assertEqual(emoji_image.width, 50)
self.assertEqual(emoji_image.get_n_pages(), 1)
self.assertFalse(is_animated)
assert no_still_data is None