123456789101112131415161718192021222324252627282930313233 |
- from io import BytesIO
- import requests
- from PIL import Image
- from . import store
- class AvatarDownloadError(RuntimeError):
- pass
- def set_avatar(user, avatar_url):
- try:
- r = requests.get(avatar_url, timeout=5)
- if r.status_code != 200:
- raise AvatarDownloadError("could not retrieve avatar from the server")
- image = Image.open(BytesIO(r.content))
- # Crop avatar into square
- width, height = image.size
- if width > height:
- left = int((width - height) / 2)
- image = image.crop((left, 0, width + left, height))
- elif height > width:
- top = int((height - width) / 2)
- image = image.crop((0, top, width, top + height))
- store.store_new_avatar(user, image)
- except requests.exceptions.RequestException:
- raise AvatarDownloadError("failed to connect to avatar server")
|