Privacy Policy
Snippets index

  django-cleanup: Remove parent folder(s) if empty after media file deletion

################################################################################
# Remove parent folder(s) if empty after media file deletion

from django_cleanup.signals import cleanup_pre_delete, cleanup_post_delete

PARENT_FOLDER_CLEANUP_LEVELS = getattr(settings, 'DJANGO_CLEANUP_PARENT_FOLDER_CLEANUP_LEVELS', 1)

def pre_directory_cleanup(**kwargs):
    file = kwargs['file']
    file._path = file.path

def directory_cleanup(**kwargs):
    file_path = kwargs['file']._path
    for i in range(0, PARENT_FOLDER_CLEANUP_LEVELS):
         folder = os.path.dirname(file_path)
         # remove folder iif empty
         if os.path.isdir(folder) and len(os.listdir(folder)) <= 0:
             os.rmdir(folder)
         else:
             break
         file_path = folder

cleanup_pre_delete.connect(pre_directory_cleanup)
cleanup_post_delete.connect(directory_cleanup)