Added post_delete signal to Avatar model in order to clean up the file system when AVATAR_MAX_AVATARS_PER_USER is equal to 1 or when Avatar instances are removed. This functionality is controlled by the new AVATAR_CLEAN_REMOVED setting which is False by default.

This commit is contained in:
Chad Paulson 2013-01-18 19:39:31 -06:00
parent d84b0e5bd9
commit b5937382ab
2 changed files with 14 additions and 1 deletions

View file

@ -26,7 +26,8 @@ from avatar.util import invalidate_cache
from avatar.settings import (AVATAR_STORAGE_DIR, AVATAR_RESIZE_METHOD,
AVATAR_MAX_AVATARS_PER_USER, AVATAR_THUMB_FORMAT,
AVATAR_HASH_USERDIRNAMES, AVATAR_HASH_FILENAMES,
AVATAR_THUMB_QUALITY, AUTO_GENERATE_AVATAR_SIZES)
AVATAR_THUMB_QUALITY, AUTO_GENERATE_AVATAR_SIZES,
AVATAR_CLEAN_REMOVED)
def avatar_file_path(instance=None, filename=None, size=None, ext=None):
@ -138,4 +139,15 @@ def create_default_thumbnails(instance=None, created=False, **kwargs):
for size in AUTO_GENERATE_AVATAR_SIZES:
instance.create_thumbnail(size)
def remove_avatar_images(instance=None, **kwargs):
for size in AUTO_GENERATE_AVATAR_SIZES:
if instance.thumbnail_exists(size):
instance.avatar.storage.delete(instance.avatar_name(size))
instance.avatar.storage.delete(instance.avatar.name)
signals.post_save.connect(create_default_thumbnails, sender=Avatar)
if AVATAR_CLEAN_REMOVED:
signals.post_delete.connect(remove_avatar_images, sender=Avatar)

View file

@ -22,3 +22,4 @@ AVATAR_HASH_FILENAMES = getattr(settings, 'AVATAR_HASH_FILENAMES', False)
AVATAR_HASH_USERDIRNAMES = getattr(settings, 'AVATAR_HASH_USERDIRNAMES', False)
AVATAR_ALLOWED_FILE_EXTS = getattr(settings, 'AVATAR_ALLOWED_FILE_EXTS', None)
AVATAR_CACHE_TIMEOUT = getattr(settings, 'AVATAR_CACHE_TIMEOUT', 60*60)
AVATAR_CLEAN_REMOVED = getattr(settings, 'AVATAR_CLEAN_REMOVED', False)