From b5937382abe4341a3b4ae6cb2790f449ad32137b Mon Sep 17 00:00:00 2001 From: Chad Paulson Date: Fri, 18 Jan 2013 19:39:31 -0600 Subject: [PATCH] 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. --- avatar/models.py | 14 +++++++++++++- avatar/settings.py | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/avatar/models.py b/avatar/models.py index 22811d3..679f8e6 100644 --- a/avatar/models.py +++ b/avatar/models.py @@ -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) diff --git a/avatar/settings.py b/avatar/settings.py index 5a277f8..15d8c6f 100644 --- a/avatar/settings.py +++ b/avatar/settings.py @@ -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)