Переглянути джерело

[fix] property setter for idx

version-14
Rushabh Mehta 10 роки тому
джерело
коміт
56b2317ea0
9 змінених файлів з 132 додано та 116 видалено
  1. +2
    -3
      frappe/custom/doctype/customize_form/customize_form.py
  2. +0
    -108
      frappe/model/__init__.py
  3. +18
    -0
      frappe/model/utils/__init__.py
  4. +107
    -0
      frappe/model/utils/rename_field.py
  5. +2
    -1
      frappe/patches.txt
  6. +1
    -1
      frappe/patches/v4_0/rename_profile_to_user.py
  7. +1
    -1
      frappe/patches/v4_0/rename_sitemap_to_route.py
  8. +1
    -1
      frappe/patches/v5_0/rename_table_fieldnames.py
  9. +0
    -1
      frappe/utils/response.py

+ 2
- 3
frappe/custom/doctype/customize_form/customize_form.py Переглянути файл

@@ -102,7 +102,7 @@ class CustomizeForm(Document):
meta = frappe.get_meta(self.doc_type)
# doctype property setters
for property in self.doctype_properties:
if property != "idx" and self.get(property) != meta.get(property):
if self.get(property) != meta.get(property):
self.make_property_setter(property=property, value=self.get(property),
property_type=self.doctype_properties[property])

@@ -117,7 +117,7 @@ class CustomizeForm(Document):
continue

for property in self.docfield_properties:
if df.get(property) != meta_df[0].get(property):
if property != "idx" and df.get(property) != meta_df[0].get(property):
if property == "fieldtype":
self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property))

@@ -260,4 +260,3 @@ class CustomizeForm(Document):
and ifnull(field_name, '')!='naming_series'""", self.doc_type)
frappe.clear_cache(doctype=self.doc_type)
self.fetch_to_customize()


+ 0
- 108
frappe/model/__init__.py Переглянути файл

@@ -72,111 +72,3 @@ def delete_fields(args_dict, delete=0):
", ".join(["DROP COLUMN `%s`" % f for f in fields if f in existing_fields])
frappe.db.commit()
frappe.db.sql(query)

def rename_field(doctype, old_fieldname, new_fieldname):
"""This functions assumes that doctype is already synced"""

meta = frappe.get_meta(doctype, cached=False)
new_field = meta.get_field(new_fieldname)
if not new_field:
print "rename_field: " + (new_fieldname) + " not found in " + doctype
return

if new_field.fieldtype == "Table":
# change parentfield of table mentioned in options
frappe.db.sql("""update `tab%s` set parentfield=%s
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"),
(new_fieldname, old_fieldname))
elif new_field.fieldtype not in no_value_fields:
if meta.issingle:
frappe.db.sql("""update `tabSingles` set field=%s
where doctype=%s and field=%s""",
(new_fieldname, doctype, old_fieldname))
else:
# copy field value
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \
(doctype, new_fieldname, old_fieldname))

update_reports(doctype, old_fieldname, new_fieldname)
update_users_report_view_settings(doctype, old_fieldname, new_fieldname)

# update in property setter
frappe.db.sql("""update `tabProperty Setter` set field_name = %s
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname))

def update_reports(doctype, old_fieldname, new_fieldname):
def _get_new_sort_by(report_dict, report, key):
sort_by = report_dict.get(key) or ""
if sort_by:
sort_by = sort_by.split(".")
if len(sort_by) > 1:
if sort_by[0]==doctype and sort_by[1]==old_fieldname:
sort_by = doctype + "." + new_fieldname
report_dict["updated"] = True
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname:
sort_by = doctype + "." + new_fieldname
report_dict["updated"] = True

if isinstance(sort_by, list):
sort_by = '.'.join(sort_by)

return sort_by

reports = frappe.db.sql("""select name, ref_doctype, json from tabReport
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No'
and json like %s and json like %s""",
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True)

for r in reports:
report_dict = json.loads(r.json)

# update filters
new_filters = []
for f in report_dict.get("filters"):
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname:
new_filters.append([doctype, new_fieldname, f[2], f[3]])
report_dict["updated"] = True
else:
new_filters.append(f)

# update columns
new_columns = []
for c in report_dict.get("columns"):
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype:
new_columns.append([new_fieldname, doctype])
report_dict["updated"] = True
else:
new_columns.append(c)

# update sort by
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by")
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next")

if report_dict.get("updated"):
new_val = json.dumps({
"filters": new_filters,
"columns": new_columns,
"sort_by": new_sort_by,
"sort_order": report_dict.get("sort_order"),
"sort_by_next": new_sort_by_next,
"sort_order_next": report_dict.get("sort_order_next")
})

frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name))

def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname):
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where
defkey like '_list_settings:%'""")
for key, value in user_report_cols:
new_columns = []
columns_modified = False
for field, field_doctype in json.loads(value):
if field == ref_fieldname and field_doctype == doctype:
new_columns.append([new_fieldname, field_doctype])
columns_modified=True
else:
new_columns.append([field, field_doctype])

if columns_modified:
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key))

+ 18
- 0
frappe/model/utils/__init__.py Переглянути файл

@@ -0,0 +1,18 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt

from __future__ import unicode_literals
import frappe, json
from frappe import _
"""
Model utilities, unclassified functions
"""

def set_default(doc, key):
"""Set is_default property of given doc and unset all others filtered by given key."""
if not doc.is_default:
frappe.db.set(doc, "is_default", 1)

frappe.db.sql("""update `tab%s` set `is_default`=0
where `%s`=%s and name!=%s""" % (doc.doctype, key, "%s", "%s"),
(doc.get(key), doc.name))

+ 107
- 0
frappe/model/utils/rename_field.py Переглянути файл

@@ -0,0 +1,107 @@
def rename_field(doctype, old_fieldname, new_fieldname):
"""This functions assumes that doctype is already synced"""

meta = frappe.get_meta(doctype, cached=False)
new_field = meta.get_field(new_fieldname)
if not new_field:
print "rename_field: " + (new_fieldname) + " not found in " + doctype
return

if new_field.fieldtype == "Table":
# change parentfield of table mentioned in options
frappe.db.sql("""update `tab%s` set parentfield=%s
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"),
(new_fieldname, old_fieldname))
elif new_field.fieldtype not in no_value_fields:
if meta.issingle:
frappe.db.sql("""update `tabSingles` set field=%s
where doctype=%s and field=%s""",
(new_fieldname, doctype, old_fieldname))
else:
# copy field value
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \
(doctype, new_fieldname, old_fieldname))

update_reports(doctype, old_fieldname, new_fieldname)
update_users_report_view_settings(doctype, old_fieldname, new_fieldname)

# update in property setter
frappe.db.sql("""update `tabProperty Setter` set field_name = %s
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname))

def update_reports(doctype, old_fieldname, new_fieldname):
def _get_new_sort_by(report_dict, report, key):
sort_by = report_dict.get(key) or ""
if sort_by:
sort_by = sort_by.split(".")
if len(sort_by) > 1:
if sort_by[0]==doctype and sort_by[1]==old_fieldname:
sort_by = doctype + "." + new_fieldname
report_dict["updated"] = True
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname:
sort_by = doctype + "." + new_fieldname
report_dict["updated"] = True

if isinstance(sort_by, list):
sort_by = '.'.join(sort_by)

return sort_by

reports = frappe.db.sql("""select name, ref_doctype, json from tabReport
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No'
and json like %s and json like %s""",
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True)

for r in reports:
report_dict = json.loads(r.json)

# update filters
new_filters = []
for f in report_dict.get("filters"):
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname:
new_filters.append([doctype, new_fieldname, f[2], f[3]])
report_dict["updated"] = True
else:
new_filters.append(f)

# update columns
new_columns = []
for c in report_dict.get("columns"):
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype:
new_columns.append([new_fieldname, doctype])
report_dict["updated"] = True
else:
new_columns.append(c)

# update sort by
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by")
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next")

if report_dict.get("updated"):
new_val = json.dumps({
"filters": new_filters,
"columns": new_columns,
"sort_by": new_sort_by,
"sort_order": report_dict.get("sort_order"),
"sort_by_next": new_sort_by_next,
"sort_order_next": report_dict.get("sort_order_next")
})

frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name))

def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname):
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where
defkey like '_list_settings:%'""")
for key, value in user_report_cols:
new_columns = []
columns_modified = False
for field, field_doctype in json.loads(value):
if field == ref_fieldname and field_doctype == doctype:
new_columns.append([new_fieldname, field_doctype])
columns_modified=True
else:
new_columns.append([field, field_doctype])

if columns_modified:
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key))

+ 2
- 1
frappe/patches.txt Переглянути файл

@@ -80,4 +80,5 @@ frappe.patches.v5_0.fix_text_editor_file_urls
execute:frappe.db.sql("update `tabComment` set comment_type='Comment' where comment_doctype='Blog Post' and ifnull(comment_type, '')=''")
frappe.patches.v5_0.modify_session
frappe.patches.v5_0.expire_old_scheduler_logs
execute:frappe.permissions.reset_perms("DocType")
execute:frappe.permissions.reset_perms("DocType")
execute:frappe.db.sql("delete from `tabProperty Setter` where `property` = 'idx'")

+ 1
- 1
frappe/patches/v4_0/rename_profile_to_user.py Переглянути файл

@@ -1,7 +1,7 @@
from __future__ import unicode_literals
import frappe

from frappe.model import rename_field
from frappe.model.utils import rename_field
from frappe.model.meta import get_table_columns

def execute():


+ 1
- 1
frappe/patches/v4_0/rename_sitemap_to_route.py Переглянути файл

@@ -1,7 +1,7 @@
from __future__ import unicode_literals
import frappe

from frappe.model import rename_field
from frappe.model.utils import rename_field

def execute():
tables = frappe.db.sql_list("show tables")


+ 1
- 1
frappe/patches/v5_0/rename_table_fieldnames.py Переглянути файл

@@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt

import frappe
from frappe.model import rename_field
from frappe.model.utils import rename_field
from frappe.modules import scrub, get_doctype_module

rename_map = {


+ 0
- 1
frappe/utils/response.py Переглянути файл

@@ -11,7 +11,6 @@ from frappe import _
import frappe.model.document
import frappe.utils
import frappe.sessions
import frappe.model.utils
import werkzeug.utils
from werkzeug.local import LocalProxy
from werkzeug.wsgi import wrap_file


Завантаження…
Відмінити
Зберегти