From 34b221d097b47d61c6c63f858999659c8047df6f Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 2 Dec 2025 13:50:29 +0530 Subject: [PATCH] fix: delete sidebars when app is deleted --- frappe/boot.py | 2 +- frappe/hooks.py | 2 +- frappe/utils/install.py | 11 +++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index dd08e0f632..f4ecc407b2 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -559,7 +559,7 @@ def get_sidebar_items(): "filters": si.filters, "route_options": si.route_options, } - if si.link_type == "Report" and si.link_to: + if si.link_type == "Report" and si.link_to and frappe.db.exists("Report", si.link_to): report_type, ref_doctype = frappe.db.get_value( "Report", si.link_to, ["report_type", "ref_doctype"] ) diff --git a/frappe/hooks.py b/frappe/hooks.py index c42d23146a..d7495427e7 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -17,7 +17,7 @@ before_install = "frappe.utils.install.before_install" after_install = "frappe.utils.install.after_install" after_app_install = "frappe.utils.install.auto_generate_icons_and_sidebar" -after_app_uninstall = "frappe.utils.install.delete_desktop_icon" +after_app_uninstall = "frappe.utils.install.delete_desktop_icon_and_sidebar" page_js = {"setup-wizard": "public/js/frappe/setup_wizard.js"} diff --git a/frappe/utils/install.py b/frappe/utils/install.py index dfb9e30047..60a393882e 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -198,7 +198,7 @@ def auto_generate_icons_and_sidebar(app_name=None): print(f"Error creating icons {e}") -def delete_desktop_icon(app_name): +def delete_desktop_icon_and_sidebar(app_name, dry_run=False): frappe.get_hooks(app_name=app_name) app_title = frappe.get_hooks(app_name=app_name)["app_title"][0] icons_to_be_deleted = frappe.get_all( @@ -213,4 +213,11 @@ def delete_desktop_icon(app_name): for icon in icons_to_be_deleted: frappe.delete_doc_if_exists("Desktop Icon", icon) # Delete icons - frappe.db.commit() # nosemgrep + sidebar_to_be_deleted = frappe.get_all("Workspace Sidebar", pluck="name", filters={"app": app_name}) + print("Deleting Workspace Sidebars") + for icon in sidebar_to_be_deleted: + frappe.delete_doc_if_exists("Workspace Sidebar", icon) + + if dry_run: + # Delete icons and sidebars + frappe.db.commit() # nosemgrep