gallery.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import random
  2. from path import Path
  3. from PIL import Image
  4. from django.conf import settings
  5. from . import store
  6. from .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. image_path = image[len(settings.MEDIA_ROOT):]
  23. if image_path.startswith('/'):
  24. image_path = image_path[1:]
  25. gallery['images'].append(image_path)
  26. if gallery['images']:
  27. galleries.append(gallery)
  28. return galleries
  29. def galleries_exist():
  30. return bool(get_available_galleries())
  31. def is_avatar_from_gallery(image_path):
  32. for gallery in get_available_galleries():
  33. if image_path in gallery['images']:
  34. return True
  35. else:
  36. return False
  37. def set_avatar(user, gallery_image_path):
  38. image = Image.open('%s/%s' % (settings.MEDIA_ROOT, gallery_image_path))
  39. store.store_new_avatar(user, image)
  40. def set_random_avatar(user):
  41. galleries = get_available_galleries(include_default=True)
  42. if not galleries:
  43. raise RuntimeError("no avatar galleries are set")
  44. avatars_list = []
  45. for gallery in galleries:
  46. if gallery['name'] == '_default':
  47. avatars_list = gallery['images']
  48. break
  49. else:
  50. avatars_list += gallery['images']
  51. set_avatar(user, random.choice(avatars_list))