fix: Remove NestedSet from File

Pros:
- Multiple file uploads wont result in a deadlock

Cons:
- Folder size cannot be computed
This commit is contained in:
Faris Ansari 2019-08-30 19:25:36 +05:30
parent 4b84ebd5a3
commit c61ff3bced
2 changed files with 4 additions and 35 deletions

View file

@ -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("<a href='{file_url}' target='_blank'>{file_name}</a>{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"))

View file

@ -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;