From 852c76617e19e4f206e53b9d33436f627d5a4379 Mon Sep 17 00:00:00 2001 From: Safwan Samsudeen Date: Mon, 23 Feb 2026 17:55:54 +0530 Subject: [PATCH 1/4] fix: redirect to login if user is logged out Co-authored-by: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> --- frappe/public/js/frappe/request.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/request.js b/frappe/public/js/frappe/request.js index 2f6f4475ba..84c671c66c 100644 --- a/frappe/public/js/frappe/request.js +++ b/frappe/public/js/frappe/request.js @@ -145,7 +145,14 @@ frappe.request.call = function (opts) { opts.error_callback && opts.error_callback(); }, 403: function (xhr) { - if (frappe.session.user === "Guest" && frappe.session.logged_in_user !== "Guest") { + const user_id = document.cookie + .split(";") + .find((c) => c.trim().startsWith("user_id=")) + ?.split("=")[1]; + if ( + user_id === "Guest" || + (frappe.session.user === "Guest" && frappe.session.logged_in_user !== "Guest") + ) { // session expired frappe.app.handle_session_expired(); } else if (xhr.responseJSON && xhr.responseJSON._error_message) { From 3b26e0df77fa15b3db252193e96b2569da614409 Mon Sep 17 00:00:00 2001 From: Sumit Jain Date: Tue, 24 Feb 2026 11:08:06 +0530 Subject: [PATCH 2/4] fix: update label for notification settings --- .../doctype/notification_settings/notification_settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/notification_settings/notification_settings.json b/frappe/desk/doctype/notification_settings/notification_settings.json index fa5abe02cf..7f73c2bff4 100644 --- a/frappe/desk/doctype/notification_settings/notification_settings.json +++ b/frappe/desk/doctype/notification_settings/notification_settings.json @@ -23,7 +23,7 @@ "default": "1", "fieldname": "enabled", "fieldtype": "Check", - "label": "Enabled System Notification" + "label": "Enable System Notification" }, { "fieldname": "subscribed_documents", @@ -98,7 +98,7 @@ "in_create": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2026-02-17 13:39:35.159083", + "modified": "2026-02-24 11:06:24.112935", "modified_by": "Administrator", "module": "Desk", "name": "Notification Settings", From a16938f455f5ec8499d5fe1335f2ea66fedc62a4 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 24 Feb 2026 12:31:09 +0530 Subject: [PATCH 3/4] fix(DX): Throw error when unsupported input is sent (#37438) --- frappe/handler.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/handler.py b/frappe/handler.py index 0ff3be8225..a9e3178bb7 100644 --- a/frappe/handler.py +++ b/frappe/handler.py @@ -265,6 +265,10 @@ def run_doc_method(method, docs=None, dt=None, dn=None, arg=None, args=None): if dt: # not called from a doctype (from a page) if not dn: dn = dt # single + + if not isinstance(dn, str | int): + frappe.throw("'dn' must be a string or an integer") + doc = frappe.get_doc(dt, dn, check_permission=True) else: From 204fb51bb939c297ce72164b9c7a7c08ec80803e Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 24 Feb 2026 12:23:06 +0530 Subject: [PATCH 4/4] fix: make removal of orphan entities robust --- frappe/model/sync.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/frappe/model/sync.py b/frappe/model/sync.py index 12718d813a..5388055242 100644 --- a/frappe/model/sync.py +++ b/frappe/model/sync.py @@ -238,17 +238,22 @@ def remove_orphan_entities(): all_enitities = frappe.get_all( app_entity, filters=entity_filter_map.get(app_entity), fields=["name", "app"] ) - for i, w in enumerate(all_enitities): - if w.app and not check_if_record_exists("app", frappe.get_app_path(w.app), app_entity, w.name): - try: - print(f"Deleting entity {app_entity} {w.name}") - frappe.delete_doc(app_entity, w.name, force=True, ignore_missing=True) - update_progress_bar(f"Deleting orphaned {app_entity}", i, len(all_enitities)) - print() - - except Exception as e: - print(f"Error occurred while deleting entity: {app_entity} {w.name}") - print(e) + for i, entity in enumerate(all_enitities): + try: + app_path = frappe.get_app_path(entity.app) + if entity.app and not check_if_record_exists("app", app_path, app_entity, entity.name): + try: + print(f"Deleting entity {app_entity} {entity.name}") + frappe.delete_doc(app_entity, entity.name, force=True, ignore_missing=True) + update_progress_bar(f"Deleting orphaned {app_entity}", i, len(all_enitities)) + print() + except Exception as e: + print(f"Error occurred while deleting entity: {app_entity} {entity.name}") + print(e) + except ModuleNotFoundError as e: + print(e) + print(f"Deleting entity {app_entity} {entity.name}") + frappe.db.delete(app_entity, {"name": entity.name}) # save the deleted icons frappe.db.commit() # nosemgrep