77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
import webnotes, webnotes.utils, os
|
|
|
|
def execute():
|
|
webnotes.reload_doc("core", "doctype", "file_data")
|
|
webnotes.reset_perms("File Data")
|
|
|
|
singles = get_single_doctypes()
|
|
|
|
for doctype in webnotes.conn.sql_list("""select parent from tabDocField where
|
|
fieldname='file_list'"""):
|
|
# the other scenario is handled in p07_update_file_data_2
|
|
if doctype in singles:
|
|
update_file_list(doctype, singles)
|
|
|
|
# export_to_files([["DocType", doctype]])
|
|
|
|
def get_single_doctypes():
|
|
return webnotes.conn.sql_list("""select name from tabDocType
|
|
where ifnull(issingle,0)=1""")
|
|
|
|
def update_file_list(doctype, singles):
|
|
if doctype in singles:
|
|
doc = webnotes.doc(doctype, doctype)
|
|
if doc.file_list:
|
|
update_for_doc(doctype, doc)
|
|
webnotes.conn.set_value(doctype, None, "file_list", None)
|
|
else:
|
|
try:
|
|
for doc in webnotes.conn.sql("""select name, file_list from `tab%s` where
|
|
ifnull(file_list, '')!=''""" % doctype, as_dict=True):
|
|
update_for_doc(doctype, doc)
|
|
webnotes.conn.commit()
|
|
webnotes.conn.sql("""alter table `tab%s` drop column `file_list`""" % doctype)
|
|
except Exception, e:
|
|
print webnotes.getTraceback()
|
|
if (e.args and e.args[0]!=1054) or not e.args:
|
|
raise e
|
|
|
|
def update_for_doc(doctype, doc):
|
|
for filedata in doc.file_list.split("\n"):
|
|
if not filedata:
|
|
continue
|
|
|
|
filedata = filedata.split(",")
|
|
if len(filedata)==2:
|
|
filename, fileid = filedata[0], filedata[1]
|
|
else:
|
|
continue
|
|
|
|
exists = True
|
|
if not (filename.startswith("http://") or filename.startswith("https://")):
|
|
if not os.path.exists(webnotes.utils.get_site_path(webnotes.conf.files_path, filename)):
|
|
exists = False
|
|
|
|
if exists:
|
|
if webnotes.conn.exists("File Data", fileid):
|
|
try:
|
|
fd = webnotes.bean("File Data", fileid)
|
|
if not (fd.doc.attached_to_doctype and fd.doc.attached_to_name):
|
|
fd.doc.attached_to_doctype = doctype
|
|
fd.doc.attached_to_name = doc.name
|
|
fd.save()
|
|
else:
|
|
fd = webnotes.bean("File Data", copy=fd.doclist)
|
|
fd.doc.attached_to_doctype = doctype
|
|
fd.doc.attached_to_name = doc.name
|
|
fd.doc.name = None
|
|
fd.insert()
|
|
except webnotes.DuplicateEntryError:
|
|
pass
|
|
else:
|
|
webnotes.conn.sql("""delete from `tabFile Data` where name=%s""",
|
|
fileid)
|