fix: Patch to create file in right location
This commit is contained in:
parent
b5ab59ad6e
commit
a0de7c0dfb
2 changed files with 44 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
33
frappe/patches/v12_0/fix_public_private_files.py
Normal file
33
frappe/patches/v12_0/fix_public_private_files.py
Normal 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
|
||||
Loading…
Add table
Reference in a new issue