1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import random
- from path import Path
- from PIL import Image
- from django.core.files.base import ContentFile
- from misago.conf import settings
- from . import store
- DEFAULT_GALLERY = '__default__'
- def get_available_galleries(include_default=False):
- """
- Returns list of dicts containing 'name' and list of images
- Only jpgs, gifs and pngs are supported avatar images.
- Galleries are
- """
- from misago.users.models import AvatarGallery
- galleries = []
- galleries_dicts = {}
- for image in AvatarGallery.objects.all():
- if image.gallery == DEFAULT_GALLERY and not include_default:
- continue
- if image.gallery not in galleries_dicts:
- galleries_dicts[image.gallery] = {'name': image.gallery, 'images': []}
- galleries.append(galleries_dicts[image.gallery])
- galleries_dicts[image.gallery]['images'].append(image)
- return galleries
- def galleries_exist():
- from misago.users.models import AvatarGallery
- return AvatarGallery.objects.exists()
- def load_avatar_galleries():
- from misago.users.models import AvatarGallery
- galleries = []
- for directory in Path(settings.MISAGO_AVATAR_GALLERY).dirs():
- gallery_name = directory.name
- images = directory.files('*.gif')
- images += directory.files('*.jpg')
- images += directory.files('*.jpeg')
- images += directory.files('*.png')
- for image in images:
- with open(image, 'rb') as image_file:
- galleries.append(
- AvatarGallery.objects.
- create(gallery=gallery_name, image=ContentFile(image_file.read(), 'image'))
- )
- return galleries
- def set_avatar(user, avatar):
- store.store_new_avatar(user, Image.open(avatar.image))
- def set_random_avatar(user):
- galleries = get_available_galleries(include_default=True)
- if not galleries:
- raise RuntimeError("no avatar galleries are set")
- avatars_list = []
- for gallery in galleries:
- if gallery['name'] == DEFAULT_GALLERY:
- avatars_list = gallery['images']
- break
- else:
- avatars_list += gallery['images']
- random_avatar = random.choice(avatars_list)
- store.store_new_avatar(user, Image.open(random_avatar.image))
|