From 4441e765c98b73ca321f0e126025db4b8a111cde Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Fri, 6 Mar 2020 12:47:49 +0530 Subject: [PATCH 01/25] feat: add is standard option --- frappe/desk/doctype/desk_page/desk_page.js | 9 +++++++-- frappe/desk/doctype/desk_page/desk_page.json | 9 ++++++++- frappe/desk/doctype/desk_page/desk_page.py | 7 ++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.js b/frappe/desk/doctype/desk_page/desk_page.js index 0c487f2166..dfb5b6665f 100644 --- a/frappe/desk/doctype/desk_page/desk_page.js +++ b/frappe/desk/doctype/desk_page/desk_page.js @@ -2,7 +2,12 @@ // For license information, please see license.txt frappe.ui.form.on('Desk Page', { - // refresh: function(frm) { + refresh: function(frm) { + frm.get_field("is_standard").toggle(frappe.boot.developer_mode); - // } + if (frm.doc.is_standard && !frappe.boot.developer_mode) { + frm.set_read_only(); + frm.disable_save(); + } + } }); diff --git a/frappe/desk/doctype/desk_page/desk_page.json b/frappe/desk/doctype/desk_page/desk_page.json index 96cdfc460b..592f695a31 100644 --- a/frappe/desk/doctype/desk_page/desk_page.json +++ b/frappe/desk/doctype/desk_page/desk_page.json @@ -14,6 +14,7 @@ "icon", "column_break_3", "onboarding", + "is_standard", "developer_mode_only", "disable_user_customization", "pin_to_top", @@ -152,10 +153,16 @@ "fieldname": "section_break_18", "fieldtype": "Section Break", "label": "Link Cards" + }, + { + "default": "0", + "fieldname": "is_standard", + "fieldtype": "Check", + "label": "Is Standard" } ], "links": [], - "modified": "2020-03-02 20:08:44.856046", + "modified": "2020-03-05 15:39:17.658280", "modified_by": "Administrator", "module": "Desk", "name": "Desk Page", diff --git a/frappe/desk/doctype/desk_page/desk_page.py b/frappe/desk/doctype/desk_page/desk_page.py index c653931610..b6f8fbb472 100644 --- a/frappe/desk/doctype/desk_page/desk_page.py +++ b/frappe/desk/doctype/desk_page/desk_page.py @@ -10,9 +10,10 @@ from frappe.model.document import Document class DeskPage(Document): def validate(self): - if (not (frappe.flags.in_install or frappe.flags.in_patch or frappe.flags.in_test or frappe.flags.in_fixtures) - and not frappe.conf.developer_mode): + if (self.is_standard and not frappe.conf.developer_mode and \ + not (frappe.flags.in_install or frappe.flags.in_patch or frappe.flags.in_test or frappe.flags.in_fixtures)): frappe.throw(_("You need to be in developer mode to edit this document")) def on_update(self): - export_to_files(record_list=[['Desk Page', self.name]], record_module=self.module) + if frappe.conf.developer_mode and not self.is_standard: + export_to_files(record_list=[['Desk Page', self.name]], record_module=self.module) From ca815a8776e2cdd2da833e05fecc4070bae5bba1 Mon Sep 17 00:00:00 2001 From: prssanna Date: Fri, 6 Mar 2020 21:40:51 +0530 Subject: [PATCH 02/25] feat: add flag minimizable to msgprint and throw --- frappe/__init__.py | 9 ++++++--- frappe/public/js/frappe/form/linked_with.js | 1 - frappe/public/js/frappe/router.js | 2 +- frappe/public/js/frappe/ui/messages.js | 5 +++-- frappe/public/less/desk.less | 5 ++++- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index b6f8fa8d9c..895798dcab 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -289,7 +289,7 @@ def log(msg): debug_log.append(as_unicode(msg)) -def msgprint(msg, title=None, raise_exception=0, as_table=False, indicator=None, alert=False, primary_action=None): +def msgprint(msg, title=None, raise_exception=0, as_table=False, indicator=None, alert=False, primary_action=None, is_minimizable=None): """Print a message to the user (via HTTP response). Messages are sent in the `__server_messages` property in the response JSON and shown in a pop-up / modal. @@ -344,6 +344,9 @@ def msgprint(msg, title=None, raise_exception=0, as_table=False, indicator=None, if indicator: out.indicator = indicator + if is_minimizable: + out.is_minimizable = is_minimizable + if alert: out.alert = 1 @@ -374,12 +377,12 @@ def clear_last_message(): if len(local.message_log) > 0: local.message_log = local.message_log[:-1] -def throw(msg, exc=ValidationError, title=None): +def throw(msg, exc=ValidationError, title=None, is_minimizable=None): """Throw execption and show message (`msgprint`). :param msg: Message. :param exc: Exception class. Default `frappe.ValidationError`""" - msgprint(msg, raise_exception=exc, title=title, indicator='red') + msgprint(msg, raise_exception=exc, title=title, indicator='red', is_minimizable=is_minimizable) def emit_js(js, user=False, **kwargs): if user == False: diff --git a/frappe/public/js/frappe/form/linked_with.js b/frappe/public/js/frappe/form/linked_with.js index e52e3f9b28..d8e07f8303 100644 --- a/frappe/public/js/frappe/form/linked_with.js +++ b/frappe/public/js/frappe/form/linked_with.js @@ -23,7 +23,6 @@ frappe.ui.form.LinkedWith = class LinkedWith { make_dialog() { this.dialog = new frappe.ui.Dialog({ - hide_on_page_refresh: true, title: __("Linked With") }); diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index fa91f58fbb..d60a0c9d7c 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -201,7 +201,7 @@ $(window).on('hashchange', function() { return; // hide open dialog - if(window.cur_dialog && cur_dialog.hide_on_page_refresh) { + if(window.cur_dialog) { if (!cur_dialog.minimizable) { cur_dialog.hide(); } else if (!cur_dialog.is_minimized) { diff --git a/frappe/public/js/frappe/ui/messages.js b/frappe/public/js/frappe/ui/messages.js index 2265203ef9..e96d147860 100644 --- a/frappe/public/js/frappe/ui/messages.js +++ b/frappe/public/js/frappe/ui/messages.js @@ -79,7 +79,7 @@ frappe.prompt = function(fields, callback, title, primary_label) { return d; } -frappe.msgprint = function(msg, title) { +frappe.msgprint = function(msg, title, minimizable) { if(!msg) return; if($.isPlainObject(msg)) { @@ -117,7 +117,8 @@ frappe.msgprint = function(msg, title) { frappe.msg_dialog.custom_onhide(); } frappe.msg_dialog.msg_area.empty(); - } + }, + minimizable: data.is_minimizable || minimizable }); // class "msgprint" is used in tests diff --git a/frappe/public/less/desk.less b/frappe/public/less/desk.less index 6736fcc3c4..bc06ca7e5f 100644 --- a/frappe/public/less/desk.less +++ b/frappe/public/less/desk.less @@ -1132,7 +1132,7 @@ body.no-sidebar { white-space: nowrap; } -.modal-minimize { +.modal-minimize { position: initial; .modal-backdrop { display: none; @@ -1144,6 +1144,9 @@ body.no-sidebar { bottom: 0; margin: 0; max-width: 500px; + .modal-content { + min-height: 0; + } } .modal-body { display: none; From a9fcbf83d5aaaef5247459c51a00bd53ecc89210 Mon Sep 17 00:00:00 2001 From: prssanna Date: Fri, 6 Mar 2020 21:42:44 +0530 Subject: [PATCH 03/25] fix: use same flag name --- frappe/public/js/frappe/ui/messages.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/ui/messages.js b/frappe/public/js/frappe/ui/messages.js index e96d147860..c25dbd7076 100644 --- a/frappe/public/js/frappe/ui/messages.js +++ b/frappe/public/js/frappe/ui/messages.js @@ -79,7 +79,7 @@ frappe.prompt = function(fields, callback, title, primary_label) { return d; } -frappe.msgprint = function(msg, title, minimizable) { +frappe.msgprint = function(msg, title, is_minimizable) { if(!msg) return; if($.isPlainObject(msg)) { @@ -118,7 +118,7 @@ frappe.msgprint = function(msg, title, minimizable) { } frappe.msg_dialog.msg_area.empty(); }, - minimizable: data.is_minimizable || minimizable + minimizable: data.is_minimizable || is_minimizable }); // class "msgprint" is used in tests From 77e66272bc6ed77a82ee78c68e7254cfca64e3e7 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Wed, 11 Mar 2020 20:53:56 +0530 Subject: [PATCH 04/25] fix(GSuite): remove deprecated GSuite doctypes --- frappe/patches.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frappe/patches.txt b/frappe/patches.txt index 1f6c8e311a..f1a9918946 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -266,3 +266,5 @@ frappe.patches.v12_0.change_existing_dashboard_chart_filters execute:frappe.delete_doc("Test Runner") execute:frappe.delete_doc_if_exists('DocType', 'Google Maps Settings') execute:frappe.db.set_default('desktop:home_page', 'workspace') +execute:frappe.delete_doc_if_exists('DocType', 'GSuite Settings') +execute:frappe.delete_doc_if_exists('DocType', 'GSuite Templates') From d3b0df0d401bc243d706d8a17c9d0f7872c4ce29 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 11:31:00 +0530 Subject: [PATCH 05/25] feat: set is_standard --- frappe/automation/desk_page/tools/tools.json | 3 ++- frappe/core/desk_page/settings/settings.json | 6 ++++-- frappe/core/desk_page/users/users.json | 3 ++- frappe/custom/desk_page/customization/customization.json | 3 ++- frappe/website/desk_page/website/website.json | 3 ++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/frappe/automation/desk_page/tools/tools.json b/frappe/automation/desk_page/tools/tools.json index 74732252a0..e529e032c0 100644 --- a/frappe/automation/desk_page/tools/tools.json +++ b/frappe/automation/desk_page/tools/tools.json @@ -27,8 +27,9 @@ "docstatus": 0, "doctype": "Desk Page", "idx": 0, + "is_standard": 1, "label": "Tools", - "modified": "2020-03-05 11:27:26.106013", + "modified": "2020-03-12 11:30:18.677672", "modified_by": "Administrator", "module": "Automation", "name": "Tools", diff --git a/frappe/core/desk_page/settings/settings.json b/frappe/core/desk_page/settings/settings.json index 2b6cfaeabd..abbe74c79e 100644 --- a/frappe/core/desk_page/settings/settings.json +++ b/frappe/core/desk_page/settings/settings.json @@ -39,8 +39,9 @@ "docstatus": 0, "doctype": "Desk Page", "idx": 0, + "is_standard": 1, "label": "Settings", - "modified": "2020-03-05 11:27:25.766522", + "modified": "2020-03-12 11:30:18.393761", "modified_by": "Administrator", "module": "Core", "name": "Settings", @@ -66,5 +67,6 @@ "link_to": "Website Settings", "type": "DocType" } - ] + ], + "shortcuts_label": "Settings" } \ No newline at end of file diff --git a/frappe/core/desk_page/users/users.json b/frappe/core/desk_page/users/users.json index 453bb394dd..cf5e824039 100644 --- a/frappe/core/desk_page/users/users.json +++ b/frappe/core/desk_page/users/users.json @@ -24,8 +24,9 @@ "docstatus": 0, "doctype": "Desk Page", "idx": 0, + "is_standard": 1, "label": "Users", - "modified": "2020-03-05 11:27:26.166080", + "modified": "2020-03-12 11:30:18.567735", "modified_by": "Administrator", "module": "Core", "name": "Users", diff --git a/frappe/custom/desk_page/customization/customization.json b/frappe/custom/desk_page/customization/customization.json index 5a2ee0fcb5..45f1b3ed5f 100644 --- a/frappe/custom/desk_page/customization/customization.json +++ b/frappe/custom/desk_page/customization/customization.json @@ -22,8 +22,9 @@ "docstatus": 0, "doctype": "Desk Page", "idx": 0, + "is_standard": 1, "label": "Customization", - "modified": "2020-03-05 11:27:26.137718", + "modified": "2020-03-12 11:30:18.623998", "modified_by": "Administrator", "module": "Custom", "name": "Customization", diff --git a/frappe/website/desk_page/website/website.json b/frappe/website/desk_page/website/website.json index cb49b590a7..5db0d4adb4 100644 --- a/frappe/website/desk_page/website/website.json +++ b/frappe/website/desk_page/website/website.json @@ -31,8 +31,9 @@ "docstatus": 0, "doctype": "Desk Page", "idx": 0, + "is_standard": 1, "label": "Website", - "modified": "2020-03-05 11:27:26.219436", + "modified": "2020-03-12 11:30:18.443059", "modified_by": "Administrator", "module": "Website", "name": "Website", From fdd4a94fe2786246f586151d53b9f41659ee9994 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 11:31:10 +0530 Subject: [PATCH 06/25] feat: add restrict to domain in cards --- frappe/desk/doctype/desk_shortcut/desk_shortcut.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/desk_shortcut/desk_shortcut.json b/frappe/desk/doctype/desk_shortcut/desk_shortcut.json index 78bea7464d..6b57f250a9 100644 --- a/frappe/desk/doctype/desk_shortcut/desk_shortcut.json +++ b/frappe/desk/doctype/desk_shortcut/desk_shortcut.json @@ -9,6 +9,7 @@ "icon", "column_break_4", "link_to", + "restrict_to_domain", "is_query_report", "section_break_5", "stats_filter", @@ -74,11 +75,17 @@ { "fieldname": "column_break_4", "fieldtype": "Column Break" + }, + { + "fieldname": "restrict_to_domain", + "fieldtype": "Link", + "label": "Restrict to Domain", + "options": "Domain" } ], "istable": 1, "links": [], - "modified": "2020-02-28 12:59:46.870172", + "modified": "2020-03-11 13:09:00.180528", "modified_by": "Administrator", "module": "Desk", "name": "Desk Shortcut", From 1c68e4582d03182cdf83f50b3f1972f9c38a01e6 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 11:31:25 +0530 Subject: [PATCH 07/25] refactor: page update logic --- frappe/desk/doctype/desk_page/desk_page.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.py b/frappe/desk/doctype/desk_page/desk_page.py index b6f8fbb472..cbe6c53881 100644 --- a/frappe/desk/doctype/desk_page/desk_page.py +++ b/frappe/desk/doctype/desk_page/desk_page.py @@ -15,5 +15,8 @@ class DeskPage(Document): frappe.throw(_("You need to be in developer mode to edit this document")) def on_update(self): - if frappe.conf.developer_mode and not self.is_standard: + if frappe.flags.in_install or frappe.flags.in_patch or frappe.flags.in_test or frappe.flags.in_fixtures: + return + + if frappe.conf.developer_mode and self.is_standard: export_to_files(record_list=[['Desk Page', self.name]], record_module=self.module) From 639e105ec2f9e0fed09e02f636492a0372816abb Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 11:31:48 +0530 Subject: [PATCH 08/25] refactor: filter shortcuts based on domains --- frappe/desk/desktop.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 3c46b1590c..406e79d916 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -43,12 +43,12 @@ class Workspace: def build_workspace(self): self.cards = { - 'label': self.doc.charts_label, + 'label': self.doc.cards_label, 'items': self.get_cards() } self.charts = { - 'label': self.doc.shortcuts_label, + 'label': self.doc.charts_label, 'items': self.get_charts() } @@ -124,11 +124,18 @@ class Workspace: return [] def get_shortcuts(self): + + def _in_active_domains(item): + if not item.restrict_to_domain: + return True + else: + return item.restrict_to_domain in frappe.get_active_domains() + items = [] for item in self.doc.shortcuts: new_item = item.as_dict().copy() new_item['name'] = _(item.link_to) - if self.is_item_allowed(item.link_to, item.type): + if self.is_item_allowed(item.link_to, item.type) and _in_active_domains(item): if item.type == "Page": page = self.allowed_pages[item.link_to] new_item['label'] = _(page.get("title", frappe.unscrub(item.link_to))) From bdb34ea0068f2d3453ad69aa7c4f1b4ab46e8939 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 11:32:00 +0530 Subject: [PATCH 09/25] feat: update is_standard for integrations page --- frappe/integrations/desk_page/integrations/integrations.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/integrations/desk_page/integrations/integrations.json b/frappe/integrations/desk_page/integrations/integrations.json index 4a53742c2d..4f78b81064 100644 --- a/frappe/integrations/desk_page/integrations/integrations.json +++ b/frappe/integrations/desk_page/integrations/integrations.json @@ -31,8 +31,9 @@ "doctype": "Desk Page", "icon": "frapicon-dashboard", "idx": 0, + "is_standard": 1, "label": "Integrations", - "modified": "2020-03-05 11:27:26.195829", + "modified": "2020-03-12 11:30:18.514349", "modified_by": "Administrator", "module": "Integrations", "name": "Integrations", From 52bf52790d3cf6b2f28dc317135987d5cc2cab6d Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 14:25:25 +0530 Subject: [PATCH 10/25] refactor: desk page update handling --- frappe/desk/doctype/desk_page/desk_page.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.py b/frappe/desk/doctype/desk_page/desk_page.py index cbe6c53881..dd9cc0706a 100644 --- a/frappe/desk/doctype/desk_page/desk_page.py +++ b/frappe/desk/doctype/desk_page/desk_page.py @@ -10,13 +10,19 @@ from frappe.model.document import Document class DeskPage(Document): def validate(self): - if (self.is_standard and not frappe.conf.developer_mode and \ - not (frappe.flags.in_install or frappe.flags.in_patch or frappe.flags.in_test or frappe.flags.in_fixtures)): + if (self.is_standard and not frappe.conf.developer_mode and not disable_saving_as_standard()): frappe.throw(_("You need to be in developer mode to edit this document")) def on_update(self): - if frappe.flags.in_install or frappe.flags.in_patch or frappe.flags.in_test or frappe.flags.in_fixtures: + if disable_saving_as_standard(): return if frappe.conf.developer_mode and self.is_standard: export_to_files(record_list=[['Desk Page', self.name]], record_module=self.module) + +def disable_saving_as_standard(): + return frappe.flags.in_install or \ + frappe.flags.in_patch or \ + frappe.flags.in_test or \ + frappe.flags.in_fixtures or \ + frappe.flags.in_migrate \ No newline at end of file From 85c436ac1b0f8ce6c3134f9613510b0b19fcd369 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 16:27:25 +0530 Subject: [PATCH 11/25] feat: updated client script --- frappe/desk/doctype/desk_page/desk_page.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.js b/frappe/desk/doctype/desk_page/desk_page.js index dfb5b6665f..4fe11d3b95 100644 --- a/frappe/desk/doctype/desk_page/desk_page.js +++ b/frappe/desk/doctype/desk_page/desk_page.js @@ -4,9 +4,14 @@ frappe.ui.form.on('Desk Page', { refresh: function(frm) { frm.get_field("is_standard").toggle(frappe.boot.developer_mode); - - if (frm.doc.is_standard && !frappe.boot.developer_mode) { + frm.get_field("extends_another_page").toggle(frappe.boot.developer_mode); + if (!frappe.boot.developer_mode) { frm.set_read_only(); + frm.fields + .filter(field => field.has_input) + .forEach(field => { + frm.set_df_property(field.df.fieldname, "read_only", "1") + }) frm.disable_save(); } } From 6a953e6801fbefe79e56a83fba828f36ef0d327c Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 16:27:37 +0530 Subject: [PATCH 12/25] feat: allow extending pages --- frappe/desk/desktop.py | 36 ++++++++++++++++++-- frappe/desk/doctype/desk_page/desk_page.json | 32 ++++++++++++++--- 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 406e79d916..836e1b7fac 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -15,6 +15,7 @@ class Workspace: def build_cache(self): self.doc = frappe.get_doc("Desk Page", self.page_name) + self.get_pages_to_extend() user = frappe.get_user() user.build_permissions() @@ -27,6 +28,22 @@ class Workspace: self.restricted_doctypes = build_domain_restriced_doctype_cache() self.restricted_pages = build_domain_restriced_page_cache() + def get_pages_to_extend(self): + pages = frappe.get_all("Desk Page", filters={ + "extends": self.page_name, + 'restrict_to_domain': ['in', frappe.get_active_domains()] + }) + + pages = [frappe.get_doc("Desk Page", page['name']) for page in pages] + self.extended_cards = [] + self.extended_charts = [] + self.extended_shortcuts = [] + + for page in pages: + self.extended_cards = self.extended_cards + page.cards + self.extended_charts = self.extended_charts + page.charts + self.extended_shortcuts = self.extended_shortcuts + page.shortcuts + def is_item_allowed(self, name, item_type): item_type = item_type.lower() @@ -59,6 +76,9 @@ class Workspace: def get_cards(self): cards = self.doc.cards + get_custom_reports_and_doctypes(self.doc.module) + if len(self.extended_cards): + cards = cards + self.extended_cards + print(cards) default_country = frappe.db.get_default("country") def _doctype_contains_a_record(name): @@ -120,7 +140,10 @@ class Workspace: def get_charts(self): if frappe.has_permission("Dashboard Chart", throw=False): - return [chart for chart in self.doc.charts] + charts = self.doc.charts + if len(self.extended_charts): + charts = charts + self.extended_charts + return [chart for chart in charts] return [] def get_shortcuts(self): @@ -132,7 +155,11 @@ class Workspace: return item.restrict_to_domain in frappe.get_active_domains() items = [] - for item in self.doc.shortcuts: + shortcuts = self.doc.shortcuts + if len(self.extended_shortcuts): + shortcuts = shortcuts + self.extended_shortcuts + + for item in shortcuts: new_item = item.as_dict().copy() new_item['name'] = _(item.link_to) if self.is_item_allowed(item.link_to, item.type) and _in_active_domains(item): @@ -180,7 +207,10 @@ def get_desk_sidebar_items(): """Get list of sidebar items for desk """ # don't get domain restricted pages - filters = {'restrict_to_domain': ['in', frappe.get_active_domains()]} + filters = { + 'restrict_to_domain': ['in', frappe.get_active_domains()], + 'extends_another_page': False + } if not frappe.local.conf.developer_mode: filters['developer_mode_only'] = '0' diff --git a/frappe/desk/doctype/desk_page/desk_page.json b/frappe/desk/doctype/desk_page/desk_page.json index 592f695a31..896b6922e7 100644 --- a/frappe/desk/doctype/desk_page/desk_page.json +++ b/frappe/desk/doctype/desk_page/desk_page.json @@ -8,12 +8,14 @@ "engine": "InnoDB", "field_order": [ "label", + "extends", "module", - "restrict_to_domain", "category", + "restrict_to_domain", + "onboarding", "icon", "column_break_3", - "onboarding", + "extends_another_page", "is_standard", "developer_mode_only", "disable_user_customization", @@ -56,6 +58,7 @@ "options": "Desk Shortcut" }, { + "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "onboarding", "fieldtype": "Data", "label": "Onboarding" @@ -65,6 +68,7 @@ "fieldtype": "Link", "label": "Restrict to Domain", "options": "Domain", + "read_only_depends_on": "eval:doc.extends_another_page == 0", "search_index": 1 }, { @@ -76,6 +80,7 @@ "options": "Module Def" }, { + "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "icon", "fieldtype": "Data", "label": "Icon" @@ -95,10 +100,12 @@ "fieldtype": "Select", "label": "Category", "options": "Modules\nDomains\nPlaces\nAdministration", + "read_only_depends_on": "eval:doc.extends_another_page == 1", "search_index": 1 }, { "default": "0", + "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "developer_mode_only", "fieldtype": "Check", "label": "Developer Mode Only", @@ -106,7 +113,7 @@ }, { "default": "0", - "depends_on": "eval:doc.pin_to_bottom!=1", + "depends_on": "eval:doc.pin_to_bottom!=1 && doc.extends_another_page == 0", "fieldname": "pin_to_top", "fieldtype": "Check", "label": "Pin To Top", @@ -114,6 +121,7 @@ }, { "default": "0", + "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "disable_user_customization", "fieldtype": "Check", "label": "Disable User Customization", @@ -121,7 +129,7 @@ }, { "default": "0", - "depends_on": "eval:doc.pin_to_top!=1", + "depends_on": "eval:doc.pin_to_top!=1 && doc.extends_another_page == 0", "fieldname": "pin_to_bottom", "fieldtype": "Check", "label": "Pin To Bottom", @@ -156,13 +164,27 @@ }, { "default": "0", + "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "is_standard", "fieldtype": "Check", "label": "Is Standard" + }, + { + "default": "0", + "fieldname": "extends_another_page", + "fieldtype": "Check", + "label": "Extends Another Page" + }, + { + "depends_on": "eval:doc.extends_another_page == 1", + "fieldname": "extends", + "fieldtype": "Link", + "label": "Extends", + "options": "Desk Page" } ], "links": [], - "modified": "2020-03-05 15:39:17.658280", + "modified": "2020-03-12 15:14:51.365782", "modified_by": "Administrator", "module": "Desk", "name": "Desk Page", From 6461a01fc5ec52a928b0f6d67416f7cba1ff6599 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 16:33:37 +0530 Subject: [PATCH 13/25] feat: update doctype --- frappe/automation/desk_page/tools/tools.json | 3 ++- frappe/core/desk_page/settings/settings.json | 3 ++- frappe/core/desk_page/users/users.json | 3 ++- frappe/custom/desk_page/customization/customization.json | 3 ++- frappe/integrations/desk_page/integrations/integrations.json | 3 ++- frappe/website/desk_page/website/website.json | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/frappe/automation/desk_page/tools/tools.json b/frappe/automation/desk_page/tools/tools.json index e529e032c0..3cfaa0bd97 100644 --- a/frappe/automation/desk_page/tools/tools.json +++ b/frappe/automation/desk_page/tools/tools.json @@ -26,10 +26,11 @@ "disable_user_customization": 0, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "idx": 0, "is_standard": 1, "label": "Tools", - "modified": "2020-03-12 11:30:18.677672", + "modified": "2020-03-12 16:30:41.841895", "modified_by": "Administrator", "module": "Automation", "name": "Tools", diff --git a/frappe/core/desk_page/settings/settings.json b/frappe/core/desk_page/settings/settings.json index abbe74c79e..41d1765684 100644 --- a/frappe/core/desk_page/settings/settings.json +++ b/frappe/core/desk_page/settings/settings.json @@ -38,10 +38,11 @@ "disable_user_customization": 1, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "idx": 0, "is_standard": 1, "label": "Settings", - "modified": "2020-03-12 11:30:18.393761", + "modified": "2020-03-12 16:30:43.510434", "modified_by": "Administrator", "module": "Core", "name": "Settings", diff --git a/frappe/core/desk_page/users/users.json b/frappe/core/desk_page/users/users.json index cf5e824039..dc9619314e 100644 --- a/frappe/core/desk_page/users/users.json +++ b/frappe/core/desk_page/users/users.json @@ -23,10 +23,11 @@ "disable_user_customization": 0, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "idx": 0, "is_standard": 1, "label": "Users", - "modified": "2020-03-12 11:30:18.567735", + "modified": "2020-03-12 16:30:42.483376", "modified_by": "Administrator", "module": "Core", "name": "Users", diff --git a/frappe/custom/desk_page/customization/customization.json b/frappe/custom/desk_page/customization/customization.json index 45f1b3ed5f..dedfcaeeec 100644 --- a/frappe/custom/desk_page/customization/customization.json +++ b/frappe/custom/desk_page/customization/customization.json @@ -21,10 +21,11 @@ "disable_user_customization": 0, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "idx": 0, "is_standard": 1, "label": "Customization", - "modified": "2020-03-12 11:30:18.623998", + "modified": "2020-03-12 16:30:42.155206", "modified_by": "Administrator", "module": "Custom", "name": "Customization", diff --git a/frappe/integrations/desk_page/integrations/integrations.json b/frappe/integrations/desk_page/integrations/integrations.json index 4f78b81064..6ea871cd90 100644 --- a/frappe/integrations/desk_page/integrations/integrations.json +++ b/frappe/integrations/desk_page/integrations/integrations.json @@ -29,11 +29,12 @@ "disable_user_customization": 1, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "icon": "frapicon-dashboard", "idx": 0, "is_standard": 1, "label": "Integrations", - "modified": "2020-03-12 11:30:18.514349", + "modified": "2020-03-12 16:30:42.823316", "modified_by": "Administrator", "module": "Integrations", "name": "Integrations", diff --git a/frappe/website/desk_page/website/website.json b/frappe/website/desk_page/website/website.json index 5db0d4adb4..915a9d2554 100644 --- a/frappe/website/desk_page/website/website.json +++ b/frappe/website/desk_page/website/website.json @@ -30,10 +30,11 @@ "disable_user_customization": 0, "docstatus": 0, "doctype": "Desk Page", + "extends_another_page": 0, "idx": 0, "is_standard": 1, "label": "Website", - "modified": "2020-03-12 11:30:18.443059", + "modified": "2020-03-12 16:30:43.092622", "modified_by": "Administrator", "module": "Website", "name": "Website", From ec36479b6a81751cf0b7387cbae06f075e4924e2 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 16:41:42 +0530 Subject: [PATCH 14/25] refactor: merge custom reports and doctype --- frappe/desk/desktop.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 836e1b7fac..65febe3595 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -237,12 +237,8 @@ def get_table_with_counts(): def get_custom_reports_and_doctypes(module): return [ frappe._dict({ - "title": "Custom Reports", - "links": get_custom_report_list(module) - }), - frappe._dict({ - "title": "Custom DocTypes", - "links": get_custom_doctype_list(module) + "title": "Custom", + "links": get_custom_doctype_list(module) + get_custom_report_list(module) }) ] From 5f47f2dd3643155021d5f703033b8ee8b1aff824 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 16:41:56 +0530 Subject: [PATCH 15/25] refactor: minor improvements --- frappe/desk/doctype/desk_page/desk_page.json | 3 +-- frappe/public/js/frappe/views/desktop/desktop.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.json b/frappe/desk/doctype/desk_page/desk_page.json index 896b6922e7..6bc33d1326 100644 --- a/frappe/desk/doctype/desk_page/desk_page.json +++ b/frappe/desk/doctype/desk_page/desk_page.json @@ -164,7 +164,6 @@ }, { "default": "0", - "depends_on": "eval:doc.extends_another_page == 0", "fieldname": "is_standard", "fieldtype": "Check", "label": "Is Standard" @@ -184,7 +183,7 @@ } ], "links": [], - "modified": "2020-03-12 15:14:51.365782", + "modified": "2020-03-12 16:38:16.206732", "modified_by": "Administrator", "module": "Desk", "name": "Desk Page", diff --git a/frappe/public/js/frappe/views/desktop/desktop.js b/frappe/public/js/frappe/views/desktop/desktop.js index 48f9b61303..e89cd841c4 100644 --- a/frappe/public/js/frappe/views/desktop/desktop.js +++ b/frappe/public/js/frappe/views/desktop/desktop.js @@ -294,7 +294,7 @@ class DesktopPage { }, { color: "red", - description: __("DocType has Open Entries") + description: __("Has Open Entries") } ].map(item => { return `
From 8d0f026eebb0b1532e6205f10d5c4c542090ed24 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 17:10:27 +0530 Subject: [PATCH 16/25] refactor: return promise explicitly --- cypress/integration/form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/integration/form.js b/cypress/integration/form.js index 4502bc0537..9d1210ca2b 100644 --- a/cypress/integration/form.js +++ b/cypress/integration/form.js @@ -2,8 +2,8 @@ context('Form', () => { before(() => { cy.login(); cy.visit('/desk#workspace/Website'); - cy.window().its('frappe').then(frappe => { - frappe.call("frappe.tests.ui_test_helpers.create_contact_records"); + return cy.window().its('frappe').then(frappe => { + return frappe.call("frappe.tests.ui_test_helpers.create_contact_records"); }); }); beforeEach(() => { From 432d5842a467cca30049def73b5c80a2270e1996 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 12 Mar 2020 17:25:18 +0530 Subject: [PATCH 17/25] fix (linting): added semicolon --- frappe/desk/doctype/desk_page/desk_page.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/desk_page/desk_page.js b/frappe/desk/doctype/desk_page/desk_page.js index 4fe11d3b95..7af3e0e98c 100644 --- a/frappe/desk/doctype/desk_page/desk_page.js +++ b/frappe/desk/doctype/desk_page/desk_page.js @@ -10,8 +10,8 @@ frappe.ui.form.on('Desk Page', { frm.fields .filter(field => field.has_input) .forEach(field => { - frm.set_df_property(field.df.fieldname, "read_only", "1") - }) + frm.set_df_property(field.df.fieldname, "read_only", "1"); + }); frm.disable_save(); } } From 2233235ec2aed24f6790b9a63ffaddbe4a18c0a3 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Thu, 12 Mar 2020 18:38:45 +0530 Subject: [PATCH 18/25] fix: duplicate entry error while renaming item (#9651) Co-authored-by: Rohit Waghchaure --- frappe/model/rename_doc.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index a42b83fe97..4491a352bc 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -16,16 +16,15 @@ def update_document_title(doctype, docname, title_field=None, old_title=None, ne """ Update title from header in form view """ + if docname and new_name and not docname == new_name: + docname = rename_doc(doctype=doctype, old=docname, new=new_name, merge=merge) + if old_title and new_title and not old_title == new_title: frappe.db.set_value(doctype, docname, title_field, new_title) frappe.msgprint(_('Saved'), alert=True, indicator='green') - if docname and new_name and not docname == new_name: - return rename_doc(doctype=doctype, old=docname, new=new_name, merge=merge) - return docname - @frappe.whitelist() def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=False, ignore_if_exists=False, show_alert=True): """ From 52eb708cc53f670bf2ffdc3f41fb10605ac33b77 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Thu, 12 Mar 2020 18:42:05 +0530 Subject: [PATCH 19/25] style: Remove extra space --- frappe/public/less/desk.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/less/desk.less b/frappe/public/less/desk.less index 58be4d2e1b..6d44fc5192 100644 --- a/frappe/public/less/desk.less +++ b/frappe/public/less/desk.less @@ -1136,7 +1136,7 @@ body.no-sidebar { white-space: nowrap; } -.modal-minimize { +.modal-minimize { position: initial; .modal-backdrop { display: none; From 1d6c3a9acdc0e52c9c5094f51c3866da92eeffa9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Mar 2020 18:58:47 +0530 Subject: [PATCH 20/25] fix: Run dashboard patch if table already exists (#9678) --- frappe/patches/v12_0/change_existing_dashboard_chart_filters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frappe/patches/v12_0/change_existing_dashboard_chart_filters.py b/frappe/patches/v12_0/change_existing_dashboard_chart_filters.py index f61c2f0f95..dfdab6baf5 100644 --- a/frappe/patches/v12_0/change_existing_dashboard_chart_filters.py +++ b/frappe/patches/v12_0/change_existing_dashboard_chart_filters.py @@ -2,6 +2,8 @@ import frappe import json def execute(): + if not frappe.db.table_exists('Dashboard Chart'): + return charts_to_modify = frappe.db.get_all('Dashboard Chart', fields = ['name', 'filters_json', 'document_type'], From b937311ab3ed32ec4be25e043a958a7adfc5126e Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Thu, 12 Mar 2020 20:07:27 +0530 Subject: [PATCH 21/25] chore(mergify): configuration update (#9682) --- .mergify.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.mergify.yml b/.mergify.yml index d8f1c09bee..d810898eee 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -3,7 +3,7 @@ pull_request_rules: conditions: - status-success=Codacy/PR Quality Review - status-success=Semantic Pull Request - - status-success=continuous-integration/travis-ci/pr + - status-success=Travis CI - Pull Request - status-success=security/snyk - package.json (frappe) - status-success=security/snyk - requirements.txt (frappe) - label!=don't-merge @@ -16,7 +16,7 @@ pull_request_rules: conditions: - status-success=Codacy/PR Quality Review - status-success=Semantic Pull Request - - status-success=continuous-integration/travis-ci/pr + - status-success=Travis CI - Pull Request - status-success=security/snyk - package.json (frappe) - status-success=security/snyk - requirements.txt (frappe) - label!=don't-merge From 1e1cc1b6c0e840a76cef9d169e89e9da83488c42 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Fri, 13 Mar 2020 11:57:34 +0530 Subject: [PATCH 22/25] fix(dashboard chart): Hide filters if hide_actions is set (#9679) * refactor: remove print statement * fix: hide filters if hide_actions is set * refactor (cyoress): wait after clearing field Co-authored-by: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> --- cypress/support/commands.js | 2 +- frappe/desk/desktop.py | 1 - frappe/public/js/frappe/ui/dashboard_chart.js | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 02f0bf236e..2d31d9a988 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -180,7 +180,7 @@ Cypress.Commands.add('fill_field', (fieldname, value, fieldtype = 'Data') => { cy.get('.datepickers-container .datepicker.active').should('exist'); } if (fieldtype === 'Time') { - cy.get('@input').clear(); + cy.get('@input').clear().wait(200); } if (fieldtype === 'Select') { diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 65febe3595..6a0d5acc37 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -78,7 +78,6 @@ class Workspace: cards = self.doc.cards + get_custom_reports_and_doctypes(self.doc.module) if len(self.extended_cards): cards = cards + self.extended_cards - print(cards) default_country = frappe.db.get_default("country") def _doctype_contains_a_record(name): diff --git a/frappe/public/js/frappe/ui/dashboard_chart.js b/frappe/public/js/frappe/ui/dashboard_chart.js index cc19c707f3..45150fe81c 100644 --- a/frappe/public/js/frappe/ui/dashboard_chart.js +++ b/frappe/public/js/frappe/ui/dashboard_chart.js @@ -14,9 +14,9 @@ frappe.ui.DashboardChart = class DashboardChart { this.get_settings().then(() => { this.prepare_chart_object(); this.prepare_container(); - this.setup_filter_button(); if (!this.options.hide_actions || this.options.hide_actions == undefined) { + this.setup_filter_button(); if (this.chart_doc.timeseries && this.chart_doc.chart_type !== 'Custom') { this.render_time_series_filters(); } From fcdb923d2edb4d7ebf1232c90e52f08467c9e580 Mon Sep 17 00:00:00 2001 From: Andy Zhu Date: Fri, 13 Mar 2020 20:36:36 +1300 Subject: [PATCH 23/25] fix: Missing bucket name check (#9546) * fix: missing bucket name check when user make changes on s3 backup setting Problem: If the user changed the backup limit, then press save. The validate function will give an error message that the bucket name already exists. It would be inconvenient for the user to use a different bucket name to save any changes. So I implemented a flag ''bucket_name_exist'' to indicate if the bucket name exists, if not, then go to the flow of trying to create a bucket. * fix: extra line removed * fix: Use head_bucket Boto3 API 1. Head_bucket will return 200 Ok if the bucket exists and you have permission to access it. 2. Error code 403 Forbidden, Error code 404 Not Found. 3. Use bucket_name_exist to check if need to create bucket. Thanks @Mangesh-Khairnar suggestions. Reference: 1. https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.head_bucket 2. https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrations3.html#accessing-a-bucket Further improvements: 1. Use 'GET' Requestion to check if the Access Key ID and Secret Access Key is valid (Because AWS tier has 20,000 GET requests while only 2,000 LIST requests) 2. Edge case on Error prompts when head_bucket returns an error code other than '403' or '404'. * fix: add an extra line to align with original code style * Update frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py Co-Authored-By: Chinmay Pai * fix: remove the flag and redundant exception When we got a 404 error, we can just create the bucket as 1. The bucket name does not exist in the current bucket. 2. we have permission to access the bucket. * Update frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py Co-Authored-By: Himanshu * Update frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py Co-Authored-By: Chinmay Pai * fix: missing handling the error code '400' - 'Bad Request' * fix: applied with DeepSource analysis 1. Lines too long 2. Doc Lines too long 3. Expected 2 blank lines between class and method 4. Unused variable removed Co-authored-by: Chinmay Pai Co-authored-by: Himanshu --- .../s3_backup_settings/s3_backup_settings.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py b/frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py index bf1821d04b..55b9e63a4d 100755 --- a/frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py +++ b/frappe/integrations/doctype/s3_backup_settings/s3_backup_settings.py @@ -35,10 +35,16 @@ class S3BackupSettings(Document): frappe.throw(_("Invalid Access Key ID or Secret Access Key.")) try: - conn.create_bucket(Bucket=bucket_lower, CreateBucketConfiguration={ - 'LocationConstraint': self.region}) - except ClientError: - frappe.throw(_("Unable to create bucket: {0}. Change it to a more unique name.").format(bucket_lower)) + # Head_bucket returns a 200 OK if the bucket exists and have access to it. + conn.head_bucket(Bucket=bucket_lower) + except ClientError as e: + error_code = e.response['Error']['Code'] + if error_code == '403': + frappe.throw(_("Do not have permission to access {0} bucket.").format(bucket_lower)) + else: # '400'-Bad request or '404'-Not Found return + # try to create bucket + conn.create_bucket(Bucket=bucket_lower, CreateBucketConfiguration={ + 'LocationConstraint': self.region}) @frappe.whitelist() From 6a25a33d4998e70908950cfa689fc8a8db2a7285 Mon Sep 17 00:00:00 2001 From: gavin Date: Fri, 13 Mar 2020 15:02:47 +0530 Subject: [PATCH 24/25] fix: delete as much indexes from each table (#9684) in cases of customization, errors such as pymysql.err.InternalError: (1091, "Can't DROP 'unique_item'; check that column/key exists") may rise up --- .../patches/v12_0/delete_duplicate_indexes.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/frappe/patches/v12_0/delete_duplicate_indexes.py b/frappe/patches/v12_0/delete_duplicate_indexes.py index 7f9e4369a2..ea73d49efc 100644 --- a/frappe/patches/v12_0/delete_duplicate_indexes.py +++ b/frappe/patches/v12_0/delete_duplicate_indexes.py @@ -1,12 +1,14 @@ import frappe +from pymysql import InternalError # This patch deletes all the duplicate indexes created for same column # The patch only checks for indexes with UNIQUE constraints def execute(): - if frappe.db.db_type != 'mariadb': return - all_tables = frappe.db.get_tables() + if frappe.db.db_type != 'mariadb': + return + all_tables = frappe.db.get_tables() final_deletion_map = frappe._dict() for table in all_tables: @@ -34,11 +36,14 @@ def execute(): # build drop index query for (table_name, index_list) in final_deletion_map.items(): - query = "ALTER TABLE `{}` ".format(table_name) - query_parts = [] + query_list = [] + alter_query = "ALTER TABLE `{}`".format(table_name) + for index in index_list: - query_parts.append("DROP INDEX `{}`".format(index)) + query_list.append("{} DROP INDEX `{}`".format(alter_query, index)) - query = query + ', '.join(query_parts) - - frappe.db.sql(query) + for query in query_list: + try: + frappe.db.sql(query) + except InternalError: + pass From 839114b7ff67c2ca3a2b795bd5b6c29040bb351b Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Fri, 13 Mar 2020 15:10:59 +0530 Subject: [PATCH 25/25] fix: Add db-password option to new-site (#9685) --- frappe/commands/site.py | 9 +++++---- frappe/installer.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/frappe/commands/site.py b/frappe/commands/site.py index eb5aed4a2e..fd43cc8cf3 100755 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -12,6 +12,7 @@ from six import text_type @click.command('new-site') @click.argument('site') @click.option('--db-name', help='Database name') +@click.option('--db-password', help='Database password') @click.option('--db-type', default='mariadb', type=click.Choice(['mariadb', 'postgres']), help='Optional "postgres" or "mariadb". Default is "mariadb"') @click.option('--db-host', help='Database Host') @click.option('--db-port', type=int, help='Database Port') @@ -25,21 +26,21 @@ from six import text_type @click.option('--install-app', multiple=True, help='Install app after installation') def new_site(site, mariadb_root_username=None, mariadb_root_password=None, admin_password=None, verbose=False, install_apps=None, source_sql=None, force=None, no_mariadb_socket=False, - install_app=None, db_name=None, db_type=None, db_host=None, db_port=None): + install_app=None, db_name=None, db_password=None, db_type=None, db_host=None, db_port=None): "Create a new site" frappe.init(site=site, new_site=True) _new_site(db_name, site, mariadb_root_username=mariadb_root_username, mariadb_root_password=mariadb_root_password, admin_password=admin_password, verbose=verbose, install_apps=install_app, source_sql=source_sql, force=force, - no_mariadb_socket=no_mariadb_socket, db_type=db_type, db_host=db_host, db_port=db_port) + no_mariadb_socket=no_mariadb_socket, db_password=db_password, db_type=db_type, db_host=db_host, db_port=db_port) if len(frappe.utils.get_sites()) == 1: use(site) def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=None, admin_password=None, verbose=False, install_apps=None, source_sql=None, force=False, - no_mariadb_socket=False, reinstall=False, db_type=None, db_host=None, db_port=None): + no_mariadb_socket=False, reinstall=False, db_password=None, db_type=None, db_host=None, db_port=None): """Install a new Frappe site""" if not force and os.path.exists(site): @@ -73,7 +74,7 @@ def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=N install_db(root_login=mariadb_root_username, root_password=mariadb_root_password, db_name=db_name, admin_password=admin_password, verbose=verbose, - source_sql=source_sql, force=force, reinstall=reinstall, db_type=db_type, db_host=db_host, db_port=db_port, no_mariadb_socket=no_mariadb_socket) + source_sql=source_sql, force=force, reinstall=reinstall, db_password=db_password, db_type=db_type, db_host=db_host, db_port=db_port, no_mariadb_socket=no_mariadb_socket) apps_to_install = ['frappe'] + (frappe.conf.get("install_apps") or []) + (list(install_apps) or []) for app in apps_to_install: diff --git a/frappe/installer.py b/frappe/installer.py index f995e6eff5..54402f0087 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -22,12 +22,12 @@ from frappe.core.doctype.scheduled_job_type.scheduled_job_type import sync_jobs def install_db(root_login="root", root_password=None, db_name=None, source_sql=None, admin_password=None, verbose=True, force=0, site_config=None, reinstall=False, - db_type=None, db_host=None, db_port=None, no_mariadb_socket=False): + db_password=None, db_type=None, db_host=None, db_port=None, no_mariadb_socket=False): if not db_type: db_type = frappe.conf.db_type or 'mariadb' - make_conf(db_name, site_config=site_config, db_type=db_type, db_host=db_host, db_port=db_port) + make_conf(db_name, site_config=site_config, db_password=db_password, db_type=db_type, db_host=db_host, db_port=db_port) frappe.flags.in_install_db = True frappe.flags.root_login = root_login