gallery.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import random
  2. from path import Path
  3. from PIL import Image
  4. from django.core.files.base import ContentFile
  5. from misago.conf import settings
  6. from . import store
  7. DEFAULT_GALLERY = '__default__'
  8. def get_available_galleries(include_default=False):
  9. """
  10. Returns list of dicts containing 'name' and list of images
  11. Only jpgs, gifs and pngs are supported avatar images.
  12. Galleries are
  13. """
  14. from misago.users.models import AvatarGallery
  15. galleries = []
  16. galleries_dicts = {}
  17. for image in AvatarGallery.objects.all():
  18. if image.gallery == DEFAULT_GALLERY and not include_default:
  19. continue
  20. if image.gallery not in galleries_dicts:
  21. galleries_dicts[image.gallery] = {'name': image.gallery, 'images': []}
  22. galleries.append(galleries_dicts[image.gallery])
  23. galleries_dicts[image.gallery]['images'].append(image)
  24. return galleries
  25. def galleries_exist():
  26. from misago.users.models import AvatarGallery
  27. return AvatarGallery.objects.exists()
  28. def load_avatar_galleries():
  29. from misago.users.models import AvatarGallery
  30. galleries = []
  31. for directory in Path(settings.MISAGO_AVATAR_GALLERY).dirs():
  32. gallery_name = directory.name
  33. images = directory.files('*.gif')
  34. images += directory.files('*.jpg')
  35. images += directory.files('*.jpeg')
  36. images += directory.files('*.png')
  37. for image in images:
  38. with open(image, 'rb') as image_file:
  39. galleries.append(
  40. AvatarGallery.objects.
  41. create(gallery=gallery_name, image=ContentFile(image_file.read(), 'image'))
  42. )
  43. return galleries
  44. def set_avatar(user, avatar):
  45. store.store_new_avatar(user, Image.open(avatar.image))
  46. def set_random_avatar(user):
  47. galleries = get_available_galleries(include_default=True)
  48. if not galleries:
  49. raise RuntimeError("no avatar galleries are set")
  50. avatars_list = []
  51. for gallery in galleries:
  52. if gallery['name'] == DEFAULT_GALLERY:
  53. avatars_list = gallery['images']
  54. break
  55. else:
  56. avatars_list += gallery['images']
  57. random_avatar = random.choice(avatars_list)
  58. store.store_new_avatar(user, Image.open(random_avatar.image))