Handle timeouts on image fetch

This commit is contained in:
Andrew Godwin 2022-12-17 15:00:50 -07:00
parent 64f113dd8d
commit d08324e159
2 changed files with 18 additions and 10 deletions

View File

@ -2,6 +2,7 @@ import re
from functools import partial
from typing import ClassVar, cast
import httpx
import urlman
from asgiref.sync import sync_to_async
from django.conf import settings
@ -30,11 +31,14 @@ class EmojiStates(StateGraph):
Fetches remote emoji and uploads to file for local caching
"""
if instance.remote_url and not instance.file:
file, mimetype = await get_remote_file(
instance.remote_url,
timeout=settings.SETUP.REMOTE_TIMEOUT,
max_size=settings.SETUP.EMOJI_MAX_IMAGE_FILESIZE_KB * 1024,
)
try:
file, mimetype = await get_remote_file(
instance.remote_url,
timeout=settings.SETUP.REMOTE_TIMEOUT,
max_size=settings.SETUP.EMOJI_MAX_IMAGE_FILESIZE_KB * 1024,
)
except httpx.RequestError:
return
if file:
instance.file = file
instance.mimetype = mimetype

View File

@ -46,11 +46,15 @@ class IdentityStates(StateGraph):
if await identity.fetch_actor():
# Also stash their icon if we can
if identity.icon_uri:
file, mimetype = await get_remote_file(
identity.icon_uri,
timeout=settings.SETUP.REMOTE_TIMEOUT,
max_size=settings.SETUP.AVATAR_MAX_IMAGE_FILESIZE_KB * 1024,
)
try:
file, mimetype = await get_remote_file(
identity.icon_uri,
timeout=settings.SETUP.REMOTE_TIMEOUT,
max_size=settings.SETUP.AVATAR_MAX_IMAGE_FILESIZE_KB * 1024,
)
except httpx.RequestError:
# We've still got enough info to consider ourselves updated
return cls.updated
if file:
identity.icon = file
await sync_to_async(identity.save)()