seitime-frappe/frappe/patches/v12_0/fix_public_private_files.py

35 lines
1,002 B
Python

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 or ""
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 then the file will be created in /private folder
# if the file doc is public then the 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
except Exception as e:
print(e)