Merge branch 'hotfix'

This commit is contained in:
Nabin Hait 2017-01-09 16:04:32 +05:30
commit deb2784bda
15 changed files with 78 additions and 84 deletions

View file

@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json
from .exceptions import *
from .utils.jinja import get_jenv, get_template, render_template
__version__ = '7.2.5'
__version__ = '7.2.6'
__title__ = "Frappe Framework"
local = Local()
@ -635,11 +635,12 @@ def delete_doc_if_exists(doctype, name, force=0):
if db.exists(doctype, name):
delete_doc(doctype, name, force=force)
def reload_doctype(doctype, force=False):
def reload_doctype(doctype, force=False, reset_permissions=False):
"""Reload DocType from model (`[module]/[doctype]/[name]/[name].json`) files."""
reload_doc(scrub(db.get_value("DocType", doctype, "module")), "doctype", scrub(doctype), force=force)
reload_doc(scrub(db.get_value("DocType", doctype, "module")), "doctype", scrub(doctype),
force=force, reset_permissions=reset_permissions)
def reload_doc(module, dt=None, dn=None, force=False):
def reload_doc(module, dt=None, dn=None, force=False, reset_permissions=False):
"""Reload Document from model (`[module]/[doctype]/[name]/[name].json`) files.
:param module: Module name.
@ -649,7 +650,7 @@ def reload_doc(module, dt=None, dn=None, force=False):
"""
import frappe.modules
return frappe.modules.reload_doc(module, dt, dn, force=force)
return frappe.modules.reload_doc(module, dt, dn, force=force, reset_permissions=reset_permissions)
def rename_doc(doctype, old, new, debug=0, force=False, merge=False, ignore_permissions=False):
"""Rename a document. Calls `frappe.model.rename_doc.rename_doc`"""

View file

@ -1174,7 +1174,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-10-26 17:29:04.205496",
"modified": "2017-01-06 07:29:04.205496",
"modified_by": "Administrator",
"module": "Core",
"name": "DocField",

View file

@ -92,7 +92,7 @@ def import_doc(path, overwrite=False, ignore_links=False, ignore_insert=False,
for f in files:
if f.endswith(".json"):
frappe.flags.mute_emails = True
frappe.modules.import_file.import_file_by_path(f, data_import=True, force=True, pre_process=pre_process)
frappe.modules.import_file.import_file_by_path(f, data_import=True, force=True, pre_process=pre_process, reset_permissions=True)
frappe.flags.mute_emails = False
frappe.db.commit()
elif f.endswith(".csv"):

View file

@ -23,7 +23,6 @@
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Document",
"length": 0,
"no_copy": 0,
@ -53,7 +52,6 @@
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Label",
"length": 0,
"no_copy": 1,
@ -82,7 +80,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Label Help",
"length": 0,
"no_copy": 0,
@ -110,7 +107,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Fieldname",
"length": 0,
"no_copy": 1,
@ -141,7 +137,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Insert After",
"length": 0,
"no_copy": 1,
@ -170,7 +165,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
@ -198,7 +192,6 @@
"ignore_xss_filter": 0,
"in_filter": 1,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Field Type",
"length": 0,
"no_copy": 0,
@ -230,7 +223,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Precision",
"length": 0,
"no_copy": 0,
@ -259,7 +251,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Options",
"length": 0,
"no_copy": 0,
@ -288,7 +279,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Options Help",
"length": 0,
"no_copy": 0,
@ -316,7 +306,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
@ -344,7 +333,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Collapsible",
"length": 0,
"no_copy": 0,
@ -373,7 +361,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Collapsible Depends On",
"length": 0,
"no_copy": 0,
@ -401,7 +388,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Default Value",
"length": 0,
"no_copy": 0,
@ -430,7 +416,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Depends On",
"length": 255,
"no_copy": 0,
@ -457,7 +442,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Field Description",
"length": 0,
"no_copy": 0,
@ -489,7 +473,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Permission Level",
"length": 0,
"no_copy": 0,
@ -518,7 +501,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Width",
"length": 0,
"no_copy": 0,
@ -547,7 +529,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
"length": 0,
"no_copy": 0,
@ -577,7 +558,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Is Mandatory Field",
"length": 0,
"no_copy": 0,
@ -606,7 +586,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Unique",
"length": 0,
"no_copy": 0,
@ -634,7 +613,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Read Only",
"length": 0,
"no_copy": 0,
@ -662,7 +640,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Ignore User Permissions",
"length": 0,
"no_copy": 0,
@ -689,7 +666,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Hidden",
"length": 0,
"no_copy": 0,
@ -716,7 +692,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Hide",
"length": 0,
"no_copy": 0,
@ -746,7 +721,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Hide If No Value",
"length": 0,
"no_copy": 0,
@ -774,7 +748,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Width",
"length": 0,
"no_copy": 1,
@ -801,7 +774,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "No Copy",
"length": 0,
"no_copy": 0,
@ -830,7 +802,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Allow on Submit",
"length": 0,
"no_copy": 0,
@ -859,7 +830,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "In Report Filter",
"length": 0,
"no_copy": 0,
@ -888,7 +858,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "In List View",
"length": 0,
"no_copy": 0,
@ -908,14 +877,13 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "in_filter_dash",
"fieldname": "in_standard_filter",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "In Standard Filter",
"length": 0,
"no_copy": 0,
@ -943,7 +911,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Report Hide",
"length": 0,
"no_copy": 0,
@ -972,7 +939,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Index",
"length": 0,
"no_copy": 1,
@ -1000,7 +966,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Ignore XSS Filter",
"length": 0,
"no_copy": 0,
@ -1028,7 +993,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:23:16.370928",
"modified": "2017-01-06 12:24:04.186289",
"modified_by": "Administrator",
"module": "Custom",
"name": "Custom Field",

View file

@ -1035,7 +1035,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-10-26 17:29:44.206837",
"modified": "2017-01-05 17:29:44.206837",
"modified_by": "Administrator",
"module": "Custom",
"name": "Customize Form Field",
@ -1046,4 +1046,4 @@
"read_only_onload": 0,
"sort_order": "ASC",
"track_seen": 0
}
}

View file

@ -63,6 +63,7 @@ frappe.ui.form.on('Auto Email Report', {
var filters = JSON.parse(frm.doc.filters || '{}');
var report_filters = frappe.query_reports[frm.doc.report].filters;
frm.set_value('filter_meta', JSON.stringify(report_filters));
report_filters_list = []
$.each(report_filters, function(key, val){

View file

@ -24,7 +24,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Report",
"length": 0,
"no_copy": 0,
@ -54,7 +53,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Based on Permissions For User",
"length": 0,
"no_copy": 0,
@ -84,7 +82,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Enabled",
"length": 0,
"no_copy": 0,
@ -113,7 +110,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Send only if there is any data",
"length": 0,
"no_copy": 0,
@ -141,7 +137,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
@ -168,7 +163,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Report Type",
"length": 0,
"no_copy": 0,
@ -199,7 +193,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "No of Rows (Max 500)",
"length": 0,
"no_copy": 0,
@ -228,7 +221,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Report Filters",
"length": 0,
"no_copy": 0,
@ -256,7 +248,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Filters Display",
"length": 0,
"no_copy": 0,
@ -284,7 +275,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Filters",
"length": 0,
"no_copy": 0,
@ -300,6 +290,33 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "filter_meta",
"fieldtype": "Text",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Filter Meta",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@ -312,7 +329,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Email Settings",
"length": 0,
"no_copy": 0,
@ -340,7 +356,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Email To",
"length": 0,
"no_copy": 0,
@ -370,7 +385,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Day of Week",
"length": 0,
"no_copy": 0,
@ -399,7 +413,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
@ -426,7 +439,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Frequency",
"length": 0,
"no_copy": 0,
@ -455,7 +467,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Format",
"length": 0,
"no_copy": 0,
@ -484,7 +495,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Message",
"length": 0,
"no_copy": 0,
@ -512,7 +522,6 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Message",
"length": 0,
"no_copy": 0,
@ -539,7 +548,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:50:31.903959",
"modified": "2017-01-07 14:27:19.605466",
"modified_by": "Administrator",
"module": "Email",
"name": "Auto Email Report",

View file

@ -69,6 +69,9 @@ class AutoEmailReport(Document):
return "{0}.{1}".format(self.report.replace(" ", "-").replace("/", "-"), self.format.lower())
def send(self):
if self.filter_meta and not self.filters:
frappe.throw(_("Please set filters value in Report Filter table."))
data = self.get_report_content()
if not data:
return

View file

@ -129,7 +129,7 @@ def install_app(name, verbose=False, set_as_patched=True):
if name != "frappe":
add_module_defs(name)
sync_for(name, force=True, sync_everything=True, verbose=verbose)
sync_for(name, force=True, sync_everything=True, verbose=verbose, reset_permissions=True)
sync_from_app(name)

View file

@ -12,17 +12,17 @@ from frappe.modules.import_file import import_file_by_path
from frappe.modules.patch_handler import block_user
from frappe.utils import update_progress_bar
def sync_all(force=0, verbose=False):
def sync_all(force=0, verbose=False, reset_permissions=False):
block_user(True)
for app in frappe.get_installed_apps():
sync_for(app, force, verbose=verbose)
sync_for(app, force, verbose=verbose, reset_permissions=reset_permissions)
block_user(False)
frappe.clear_cache()
def sync_for(app_name, force=0, sync_everything = False, verbose=False):
def sync_for(app_name, force=0, sync_everything = False, verbose=False, reset_permissions=False):
files = []
if app_name == "frappe":
@ -41,7 +41,7 @@ def sync_for(app_name, force=0, sync_everything = False, verbose=False):
l = len(files)
if l:
for i, doc_path in enumerate(files):
import_file_by_path(doc_path, force=force)
import_file_by_path(doc_path, force=force, reset_permissions=reset_permissions)
#print module_name + ' | ' + doctype + ' | ' + name
frappe.db.commit()

View file

@ -7,19 +7,21 @@ import frappe, os, json
from frappe.modules import get_module_path, scrub_dt_dn
from frappe.utils import get_datetime_str
def import_files(module, dt=None, dn=None, force=False, pre_process=None):
def import_files(module, dt=None, dn=None, force=False, pre_process=None, reset_permissions=False):
if type(module) is list:
out = []
for m in module:
out.append(import_file(m[0], m[1], m[2], force=force, pre_process=pre_process))
out.append(import_file(m[0], m[1], m[2], force=force, pre_process=pre_process,
reset_permissions=reset_permissions))
return out
else:
return import_file(module, dt, dn, force=force, pre_process=pre_process)
return import_file(module, dt, dn, force=force, pre_process=pre_process,
reset_permissions=reset_permissions)
def import_file(module, dt, dn, force=False, pre_process=None):
def import_file(module, dt, dn, force=False, pre_process=None, reset_permissions=False):
"""Sync a file from txt if modifed, return false if not updated"""
path = get_file_path(module, dt, dn)
ret = import_file_by_path(path, force, pre_process=pre_process)
ret = import_file_by_path(path, force, pre_process=pre_process, reset_permissions=reset_permissions)
return ret
def get_file_path(module, dt, dn):
@ -30,7 +32,7 @@ def get_file_path(module, dt, dn):
return path
def import_file_by_path(path, force=False, data_import=False, pre_process=None):
def import_file_by_path(path, force=False, data_import=False, pre_process=None, reset_permissions=False):
frappe.flags.in_import = True
try:
docs = read_doc_from_file(path)
@ -51,7 +53,8 @@ def import_file_by_path(path, force=False, data_import=False, pre_process=None):
original_modified = doc.get("modified")
import_doc(doc, force=force, data_import=data_import, pre_process=pre_process)
import_doc(doc, data_import=data_import, pre_process=pre_process,
reset_permissions=reset_permissions)
if original_modified:
# since there is a new timestamp on the file, update timestamp in
@ -87,7 +90,7 @@ ignore_values = {
ignore_doctypes = ["Page Role", "DocPerm"]
def import_doc(docdict, force=False, data_import=False, pre_process=None):
def import_doc(docdict, data_import=False, pre_process=None, reset_permissions=False):
frappe.flags.in_import = True
docdict["__islocal"] = 1
doc = frappe.get_doc(docdict)
@ -99,14 +102,14 @@ def import_doc(docdict, force=False, data_import=False, pre_process=None):
if frappe.db.exists(doc.doctype, doc.name):
old_doc = frappe.get_doc(doc.doctype, doc.name)
if doc.doctype in ignore_values and not force:
if doc.doctype in ignore_values:
# update ignore values
for key in ignore_values.get(doc.doctype) or []:
doc.set(key, old_doc.get(key))
# update ignored docs into new doc
for df in doc.meta.get_table_fields():
if df.options in ignore_doctypes and not force:
if df.options in ignore_doctypes and not reset_permissions:
doc.set(df.fieldname, [])
ignore.append(df.options)

View file

@ -136,9 +136,9 @@ def get_doc_path(module, doctype, name):
dt, dn = scrub_dt_dn(doctype, name)
return os.path.join(get_module_path(module), dt, dn)
def reload_doc(module, dt=None, dn=None, force=True):
def reload_doc(module, dt=None, dn=None, force=False, reset_permissions=False):
from frappe.modules.import_file import import_files
return import_files(module, dt, dn, force=force)
return import_files(module, dt, dn, force=force, reset_permissions=reset_permissions)
def export_doc(doctype, name, module=None):
"""Write a doc to standard path."""

View file

@ -5,7 +5,7 @@ frappe.patches.v7_1.rename_scheduler_log_to_error_log
frappe.patches.v6_1.rename_file_data
frappe.patches.v7_0.re_route #2016-06-27
execute:frappe.reload_doc('core', 'doctype', 'doctype', force=True) #2016-10-17
execute:frappe.reload_doc('core', 'doctype', 'docfield', force=True) #2016-02-26
execute:frappe.reload_doc('core', 'doctype', 'docfield', force=True) #2017-01-06
execute:frappe.reload_doc('core', 'doctype', 'docperm') #2014-06-24
execute:frappe.reload_doc('core', 'doctype', 'role')
execute:frappe.reload_doc('core', 'doctype', 'user')
@ -149,3 +149,4 @@ frappe.patches.v7_1.disabled_print_settings_for_custom_print_format
frappe.patches.v7_2.set_doctype_engine
frappe.patches.v7_2.merge_knowledge_base
frappe.patches.v7_0.update_report_builder_json
frappe.patches.v7_2.set_in_standard_filter_property #1

View file

@ -0,0 +1,12 @@
import frappe
def execute():
frappe.reload_doc('custom', 'doctype', 'custom_field', force=True)
try:
frappe.db.sql('update `tabCustom Field` set in_standard_filter = in_filter_dash')
except Exception, e:
if e.args[0]!=1054: raise e
for doctype in frappe.get_all("DocType", {"istable": 0, "issingle": 0}):
frappe.reload_doctype(doctype.name, force=True)

View file

@ -27,4 +27,3 @@ class HelpCategory(WebsiteGenerator):
def on_update(self):
clear_cache()
super(HelpCategory, self).on_update()