From 82cedb86171d83485629490b94b1aa2c7c488160 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Thu, 16 Apr 2020 16:37:35 +0530 Subject: [PATCH 1/8] fix: Attribute errors and better msgprint --- .../doctype/email_domain/email_domain.py | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/frappe/email/doctype/email_domain/email_domain.py b/frappe/email/doctype/email_domain/email_domain.py index b6585d966b..08583dc228 100644 --- a/frappe/email/doctype/email_domain/email_domain.py +++ b/frappe/email/doctype/email_domain/email_domain.py @@ -39,7 +39,7 @@ class EmailDomain(Document): except Exception: frappe.throw(_("Incoming email account not correct")) - return None + finally: try: if self.use_imap: @@ -48,9 +48,10 @@ class EmailDomain(Document): test.quit() except Exception: pass + try: - if self.use_ssl_for_outgoing: - if not self.smtp_port: + if self.get('use_ssl_for_outgoing'): + if not self.get('smtp_port'): self.smtp_port = 465 sess = smtplib.SMTP_SSL((self.smtp_server or "").encode('utf-8'), @@ -62,28 +63,15 @@ class EmailDomain(Document): sess.quit() except Exception: frappe.throw(_("Outgoing email account not correct")) - return None - return def on_update(self): """update all email accounts using this domain""" - for email_account in frappe.get_all("Email Account", - filters={"domain": self.name}): - + for email_account in frappe.get_all("Email Account", filters={"domain": self.name}): try: - email_account = frappe.get_doc("Email Account", - email_account.name) - email_account.set("email_server",self.email_server) - email_account.set("use_imap",self.use_imap) - email_account.set("use_ssl",self.use_ssl) - email_account.set("use_tls",self.use_tls) - email_account.set("attachment_limit",self.attachment_limit) - email_account.set("smtp_server",self.smtp_server) - email_account.set("smtp_port",self.smtp_port) - email_account.set("use_ssl_for_outgoing", self.use_ssl_for_outgoing) - email_account.set("append_emails_to_sent_folder", self.append_emails_to_sent_folder) + email_account = frappe.get_doc("Email Account", email_account.name) + for attr in ["email_server", "use_imap", "use_ssl", "use_tls", "attachment_limit", "smtp_server", "smtp_port", "use_ssl_for_outgoing", "append_emails_to_sent_folder"]: + email_account.set(attr, self.get(attr, default=0)) email_account.save() + except Exception as e: - frappe.msgprint(email_account.name) - frappe.throw(e) - return None + frappe.msgprint(_("Error has occurred in {0}").format(email_account.name), raise_exception=e.__class__) From 0fa8266d6d6c5808e3dbac5d11c0c7d10c735c93 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 21 Apr 2020 09:29:24 +0530 Subject: [PATCH 2/8] fix: Translate only if column label exists --- frappe/desk/query_report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index f994dc0d30..164f6389eb 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -242,7 +242,7 @@ def get_prepared_report_result(report, filters, dn="", user=None): columns = json.loads(doc.columns) if doc.columns else data[0] for column in columns: - if isinstance(column, dict): + if isinstance(column, dict) and column.get("label"): column["label"] = _(column["label"]) latest_report_data = { From 3a48fd858f06e00f74e16309fe3bc3c912f03b98 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 21 Apr 2020 23:06:14 +0530 Subject: [PATCH 3/8] fix: Use currentTarget to find right parent --- .../print_format_builder/print_format_builder.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/frappe/printing/page/print_format_builder/print_format_builder.js b/frappe/printing/page/print_format_builder/print_format_builder.js index d0a3379609..4e049d120a 100644 --- a/frappe/printing/page/print_format_builder/print_format_builder.js +++ b/frappe/printing/page/print_format_builder/print_format_builder.js @@ -441,18 +441,16 @@ frappe.PrintFormatBuilder = Class.extend({ }); }, setup_field_settings: function() { - - this.page.main.find(".field-settings").on("click", () => { - var field = $(this).parent(); - + this.page.main.find(".field-settings").on("click", e => { + const field = $(e.currentTarget).parent(); // new dialog var d = new frappe.ui.Dialog({ title: "Set Properties", fields: [ { - label:__("Label"), - fieldname:"label", - fieldtype:"Data" + label: __("Label"), + fieldname: "label", + fieldtype: "Data" }, { label: __("Align Value"), @@ -485,7 +483,7 @@ frappe.PrintFormatBuilder = Class.extend({ }); // set current value - if(field.attr('data-align')) { + if (field.attr('data-align')) { d.set_value('align', field.attr('data-align')); } else { d.set_value('align', 'left'); From be6c58d6062af58b83093bba54edf4f884846705 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Wed, 22 Apr 2020 12:10:18 +0530 Subject: [PATCH 4/8] fix: permissions for Video DocType --- frappe/core/doctype/video/video.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/video/video.json b/frappe/core/doctype/video/video.json index b0a154f5d4..26a407c05c 100644 --- a/frappe/core/doctype/video/video.json +++ b/frappe/core/doctype/video/video.json @@ -68,7 +68,7 @@ } ], "links": [], - "modified": "2020-04-17 13:34:06.461574", + "modified": "2020-04-22 12:09:49.057403", "modified_by": "Administrator", "module": "Core", "name": "Video", @@ -79,12 +79,25 @@ "delete": 1, "email": 1, "export": 1, + "if_owner": 1, "print": 1, "read": 1, "report": 1, "role": "All", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 } ], "sort_field": "modified", From 02b3ccc935530295916521eb370102586ca24a00 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 21 Apr 2020 14:16:23 +0530 Subject: [PATCH 5/8] fix: ignore user permissions not working from the JS side --- frappe/model/create_new.py | 8 +++----- frappe/public/js/frappe/model/create_new.js | 10 ++-------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/frappe/model/create_new.py b/frappe/model/create_new.py index f697d8051a..91fb079fca 100644 --- a/frappe/model/create_new.py +++ b/frappe/model/create_new.py @@ -74,11 +74,9 @@ def set_user_and_static_default_values(doc): def get_user_default_value(df, defaults, doctype_user_permissions, allowed_records, default_doc): # don't set defaults for "User" link field using User Permissions! if df.fieldtype == "Link" and df.options != "User": - # 1 - look in user permissions only for document_type==Setup - # We don't want to include permissions of transactions to be used for defaults. - if (frappe.get_meta(df.options).document_type=="Setup" - and not df.ignore_user_permissions and default_doc): - return default_doc + # If user permission has Is Default enabled or single-user permission has found against respective doctype. + if (not df.ignore_user_permissions and default_doc): + return default_doc # 2 - Look in user defaults user_default = defaults.get(df.fieldname) diff --git a/frappe/public/js/frappe/model/create_new.js b/frappe/public/js/frappe/model/create_new.js index 1a118be5db..7be7fc5baa 100644 --- a/frappe/public/js/frappe/model/create_new.js +++ b/frappe/public/js/frappe/model/create_new.js @@ -137,10 +137,8 @@ $.extend(frappe.model, { // don't set defaults for "User" link field using User Permissions! if (df.fieldtype==="Link" && df.options!=="User") { - // 1 - look in user permissions for document_type=="Setup". - // We don't want to include permissions of transactions to be used for defaults. - if (df.linked_document_type==="Setup" - && has_user_permissions && default_doc) { + // If user permission has Is Default enabled or single-user permission has found against respective doctype. + if (has_user_permissions && default_doc) { return default_doc; } @@ -161,10 +159,6 @@ $.extend(frappe.model, { user_default = frappe.boot.user.last_selected_values[df.options]; } - if (!user_default && default_doc) { - user_default = default_doc; - } - var is_allowed_user_default = user_default && (!has_user_permissions || allowed_records.includes(user_default)); From 96c5162c7eef08919a8d590e74dc0ce89329c6e0 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Wed, 22 Apr 2020 14:18:38 +0530 Subject: [PATCH 6/8] fix: compare and sort release list to get latest release Signed-off-by: Chinmay D. Pai --- frappe/utils/change_log.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/frappe/utils/change_log.py b/frappe/utils/change_log.py index c94a247796..776fb825c2 100644 --- a/frappe/utils/change_log.py +++ b/frappe/utils/change_log.py @@ -174,9 +174,12 @@ def parse_latest_non_beta_release(response): Returns json : json object pertaining to the latest non-beta release """ - for release in response: - if release['prerelease'] == True: continue - return release + version_list = [release.get('tag_name').strip('v') for release in response if not release.get('prerelease')] + + if version_list: + return sorted(version_list, key=Version, reverse=True)[0] + + return None def check_release_on_github(app): # Check if repo remote is on github @@ -199,12 +202,11 @@ def check_release_on_github(app): org_name = remote_url.split('/')[3] r = requests.get('https://api.github.com/repos/{}/{}/releases'.format(org_name, app)) - if r.status_code == 200 and r.json(): + if r.ok: lastest_non_beta_release = parse_latest_non_beta_release(r.json()) - return Version(lastest_non_beta_release['tag_name'].strip('v')), org_name - else: - # In case of an improper response or if there are no releases - return None + return Version(lastest_non_beta_release), org_name + # In case of an improper response or if there are no releases + return None def add_message_to_redis(update_json): # "update-message" will store the update message string From 1bd5c916cecb1ad83386a24f5ce2c9d44fd08ff2 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Wed, 22 Apr 2020 16:23:02 +0530 Subject: [PATCH 7/8] chore: separate frappe log by site Signed-off-by: Chinmay D. Pai --- frappe/utils/logger.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frappe/utils/logger.py b/frappe/utils/logger.py index d40e2565cb..5a77434cde 100755 --- a/frappe/utils/logger.py +++ b/frappe/utils/logger.py @@ -5,7 +5,7 @@ from logging.handlers import RotatingFileHandler from six import text_type default_log_level = logging.DEBUG -LOG_FILENAME = '../logs/frappe.log' +LOG_FILENAME = '../logs/{}-frappe.log'.format(frappe.local.site) def get_logger(module, with_more_info=True): if module in frappe.loggers: @@ -57,4 +57,3 @@ def set_log_level(level): '''Use this method to set log level to something other than the default DEBUG''' frappe.log_level = getattr(logging, (level or '').upper(), None) or default_log_level frappe.loggers = {} - From 8c63e4de2e26d0426e3c7241505512ffa8f4cca8 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Thu, 23 Apr 2020 01:49:43 +0530 Subject: [PATCH 8/8] fix(minor): Value Error during importing or exporting document files in migrate --- frappe/core/doctype/doctype/doctype.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index f7c9cbe28a..89b2a1a47e 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -477,7 +477,8 @@ class DocType(Document): field_dict = list(filter(lambda d: d['fieldname'] == fieldname, docdict['fields'])) if field_dict: new_field_dicts.append(field_dict[0]) - remaining_field_names.remove(fieldname) + if fieldname in remaining_field_names: + remaining_field_names.remove(fieldname) for fieldname in remaining_field_names: field_dict = list(filter(lambda d: d['fieldname'] == fieldname, docdict['fields'])) @@ -498,7 +499,8 @@ class DocType(Document): field_dict = list(filter(lambda d: d['fieldname'] == fieldname, docdict.get('fields', []))) if field_dict: new_field_dicts.append(field_dict[0]) - remaining_field_names.remove(fieldname) + if fieldname in remaining_field_names: + remaining_field_names.remove(fieldname) for fieldname in remaining_field_names: field_dict = list(filter(lambda d: d['fieldname'] == fieldname, docdict.get('fields', [])))