From 8017d6fc4c64a4ed728f6c70e5c7683c4a1ffbdb Mon Sep 17 00:00:00 2001 From: Rafiq Hilali <36306244+rafiqhilali@users.noreply.github.com> Date: Sun, 14 Aug 2022 05:03:45 -0600 Subject: [PATCH] Delete avatars from file storage when avatar is deleted (#174) * added custom delete method to Avatar model inorder to delete avatars from file storage * simplified chained expression to pass linting * linting * stopped using reserved keyword dir * changed remove_avatar_images so it deletes all generated avatars * went back to using queryset delete * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: Johannes Wilm Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- avatar/models.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/avatar/models.py b/avatar/models.py index a798bae..d3a793f 100644 --- a/avatar/models.py +++ b/avatar/models.py @@ -202,10 +202,13 @@ def create_default_thumbnails(sender, instance, created=False, **kwargs): def remove_avatar_images(instance=None, **kwargs): - if hasattr(instance, "user"): - for size in settings.AVATAR_AUTO_GENERATE_SIZES: - if instance.thumbnail_exists(size): - instance.avatar.storage.delete(instance.avatar_name(size)) + base_filepath = instance.avatar.name + path, filename = os.path.split(base_filepath) + # iterate through resized avatars directories and delete resized avatars + resized_sizes, _ = instance.avatar.storage.listdir(os.path.join(path, "resized")) + for size in resized_sizes: + if instance.thumbnail_exists(size): + instance.avatar.storage.delete(instance.avatar_name(size)) if instance.avatar.storage.exists(instance.avatar.name): instance.avatar.storage.delete(instance.avatar.name)