fix: Patch to create file in right location

This commit is contained in:
Suraj Shetty 2019-07-26 10:51:06 +05:30
parent b5ab59ad6e
commit a0de7c0dfb
2 changed files with 44 additions and 2 deletions

View file

@ -467,7 +467,7 @@ class File(NestedSet):
return None
def save_file(self, content=None, decode=False):
def save_file(self, content=None, decode=False, ignore_existing_file_check=False):
file_exists = False
self.content = content
if decode:
@ -484,7 +484,16 @@ class File(NestedSet):
self.content_hash = get_content_hash(self.content)
self.content_type = mimetypes.guess_type(self.file_name)[0]
_file = frappe.get_value("File", {"content_hash": self.content_hash}, ["file_url"])
_file = False
# check if a file exists with the same content hash and is also in the same folder (public or private)
if not ignore_existing_file_check:
_file = frappe.get_value("File", {
"content_hash": self.content_hash,
"is_private": self.is_private
},
["file_url"])
if _file:
self.file_url = _file
file_exists = True

View file

@ -0,0 +1,33 @@
import frappe
import os
def execute():
files = frappe.get_all('File',
fields=['is_private', 'file_url', 'name'],
filters={'is_folder': 0})
for file in files:
file_url = file.file_url
if file.is_private:
if not file_url.startswith('/private/files/'):
generate_file(file.name)
else:
if file_url.startswith('/private/files/'):
generate_file(file.name)
def generate_file(file_name):
try:
file_doc = frappe.get_doc('File', file_name)
# private
new_doc = frappe.new_doc('File')
new_doc.is_private = file_doc.is_private
new_doc.file_name = file_doc.file_name
# to create copy of file in right location
# if the file doc is private file will be created in /private folder
# if the file doc is public file will be created in /files folder
new_doc.save_file(content=file_doc.get_content(), ignore_existing_file_check=True)
file_doc.file_url = new_doc.file_url
file_doc.save()
except IOError:
pass