Source code for shuup.admin.modules.media.utils

from django.db import transaction
from django.utils.translation import gettext_lazy as _
from filer.models import Folder


[docs] @transaction.atomic() def delete_folder(folder): """ Delete a Filer folder and move files and subfolders up to the parent. :param folder: Folder. :type folder: filer.models.Folder :return: Success message. :rtype: str """ parent_folder = folder.parent if folder.parent_id else None parent_name = parent_folder.name if parent_folder else _("Root") subfolders = list(folder.children.all()) message_bits = [] if subfolders: for subfolder in subfolders: subfolder.move_to(parent_folder, "last-child") subfolder.save() message_bits.append(_("{num} subfolders moved to {folder}.").format(num=len(subfolders), folder=parent_name)) n_files = folder.files.count() if n_files: folder.files.update(folder=parent_folder) message_bits.append(_("{num} files moved to {folder}.").format(num=n_files, folder=parent_name)) folder.delete() # Possibly raises a `ProtectedError`, that's why the `atomic()` block. if subfolders: # We had some subfolders to mangle, best rebuild now Folder._tree_manager.rebuild() message_bits.insert(0, _("Folder `%s` was deleted.") % folder.name) return "\n".join(message_bits)