From c61ff3bced267ccd37c9f0d4b16c1dd32cd822dd Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Fri, 30 Aug 2019 19:25:36 +0530 Subject: [PATCH] fix: Remove NestedSet from File Pros: - Multiple file uploads wont result in a deadlock Cons: - Folder size cannot be computed --- frappe/core/doctype/file/file.py | 37 ++----------------- .../public/js/frappe/views/file/file_view.js | 2 +- 2 files changed, 4 insertions(+), 35 deletions(-) diff --git a/frappe/core/doctype/file/file.py b/frappe/core/doctype/file/file.py index 847e0cd267..71c4fcd965 100755 --- a/frappe/core/doctype/file/file.py +++ b/frappe/core/doctype/file/file.py @@ -26,6 +26,7 @@ from frappe.utils import get_hook_method, get_files_path, random_string, encode, from frappe import _ from frappe import conf from frappe.utils.nestedset import NestedSet +from frappe.model.document import Document from frappe.utils import strip from PIL import Image, ImageOps from six import StringIO, string_types @@ -42,8 +43,7 @@ class FolderNotEmpty(frappe.ValidationError): pass exclude_from_linked_with = True -class File(NestedSet): - nsm_parent_field = 'folder' +class File(Document): no_feed_on_delete = True def before_insert(self): @@ -72,8 +72,6 @@ class File(NestedSet): self.name = frappe.generate_hash("", 10) def after_insert(self): - self.update_parent_folder_size() - if not self.is_folder: self.add_comment_in_reference_doc('Attachment', _('Added {0}').format("{file_name}{icon}".format(**{ @@ -100,7 +98,6 @@ class File(NestedSet): self.validate_file() self.generate_content_hash() - self.set_folder_size() self.validate_url() if frappe.db.exists('File', {'name': self.name, 'is_folder': 0}): @@ -136,31 +133,6 @@ class File(NestedSet): frappe.db.set_value(self.attached_to_doctype, self.attached_to_name, self.attached_to_field, self.file_url) - - def set_folder_size(self): - """Set folder size if folder""" - if self.is_folder and not self.is_new(): - self.file_size = cint(self.get_folder_size()) - self.db_set('file_size', self.file_size) - - for folder in self.get_ancestors(): - frappe.db.set_value("File", folder, "file_size", self.get_folder_size(folder)) - - def get_folder_size(self, folder=None): - """Returns folder size for current folder""" - if not folder: - folder = self.name - - file_size = frappe.db.sql("""select ifnull(sum(file_size), 0) - from tabFile where folder=%s """, (folder))[0][0] - - return file_size - - def update_parent_folder_size(self): - """Update size of parent folder""" - if self.folder and not self.is_folder: # it not home - frappe.get_doc("File", self.folder).set_folder_size() - def set_folder_name(self): """Make parent folders if not exists based on reference doctype and name""" if self.attached_to_doctype and not self.folder: @@ -225,7 +197,7 @@ class File(NestedSet): if self.is_home_folder or self.is_attachments_folder: frappe.throw(_("Cannot delete Home and Attachments folders")) self.check_folder_is_empty() - super(File, self).on_trash() + # super(File, self).on_trash() self.call_delete_file() if not self.is_folder: self.add_comment_in_reference_doc('Attachment Removed', _("Removed {0}").format(self.file_name)) @@ -267,9 +239,6 @@ class File(NestedSet): return thumbnail_url - def after_delete(self): - self.update_parent_folder_size() - def check_folder_is_empty(self): """Throw exception if folder is not empty""" files = frappe.get_all("File", filters={"folder": self.name}, fields=("name", "file_name")) diff --git a/frappe/public/js/frappe/views/file/file_view.js b/frappe/public/js/frappe/views/file/file_view.js index 6ee37aec3d..5f9ca642f4 100644 --- a/frappe/public/js/frappe/views/file/file_view.js +++ b/frappe/public/js/frappe/views/file/file_view.js @@ -259,7 +259,7 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { get_left_html(file) { file = this.prepare_datum(file); - const file_size = frappe.form.formatters.FileSize(file.file_size); + const file_size = file.file_size ? frappe.form.formatters.FileSize(file.file_size) : ''; const route_url = this.get_route_url(file); let created_on;