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))