gallery.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import random
  2. from path import path
  3. from PIL import Image
  4. from django.conf import settings
  5. from misago.users.avatars import store
  6. from misago.users.avatars.paths import MEDIA_AVATARS
  7. def get_available_galleries(include_default=False):
  8. """
  9. Returns list of dicts containing 'name' and list of images
  10. Only jpgs, gifs and pngs are supported avatar images.
  11. Galleries are
  12. """
  13. galleries = []
  14. for directory in path(MEDIA_AVATARS).dirs():
  15. if include_default or directory[-8:] != '_default':
  16. gallery = {'name': directory.name, 'images': []}
  17. images = directory.files('*.gif')
  18. images += directory.files('*.jpg')
  19. images += directory.files('*.jpeg')
  20. images += directory.files('*.png')
  21. for image in images:
  22. gallery['images'].append(image[len(settings.MEDIA_ROOT):])
  23. if gallery['images']:
  24. galleries.append(gallery)
  25. return galleries
  26. def galleries_exist():
  27. return bool(get_available_galleries())
  28. def is_avatar_from_gallery(image_path):
  29. for gallery in get_available_galleries():
  30. if image_path in gallery['images']:
  31. return True
  32. else:
  33. return False
  34. def set_avatar(user, gallery_image_path):
  35. image = Image.open(settings.MEDIA_ROOT + gallery_image_path)
  36. store.store_new_avatar(user, image)
  37. def set_random_avatar(user):
  38. galleries = get_available_galleries(include_default=True)
  39. if not galleries:
  40. raise RuntimeError("no avatar galleries are set")
  41. avatars_list = []
  42. for gallery in galleries:
  43. if gallery['name'] == '_default':
  44. avatars_list = gallery['images']
  45. break
  46. else:
  47. avatars_list += gallery['images']
  48. set_avatar(user, random.choice(avatars_list))