From 2f50f3174f66ca9b229ce71efd2da0c4f27cf5f5 Mon Sep 17 00:00:00 2001 From: ismxilxrif <38789073+ismxilxrif@users.noreply.github.com> Date: Thu, 1 Jan 2026 15:03:15 +0800 Subject: [PATCH] fix(desk): guard owner/modified_by access in update_user_info (#35581) * fix(desk): guard owner/modified_by access in update_user_info Fixes a regression introduced by #35557 This updates the code to safely check for the presence of those fields using `getattr` before adding them to the uservlist. This preserves the intended upstream behavior while avoiding runtime errors for virtual/single/transient documents. * chore: cache getattr instead of calling it twice * refactor: less code --------- Co-authored-by: Ankush Menat --- .../system_health_report/test_system_health_report.py | 3 ++- frappe/desk/form/load.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frappe/desk/doctype/system_health_report/test_system_health_report.py b/frappe/desk/doctype/system_health_report/test_system_health_report.py index 2bd4f79359..e9d7bd5191 100644 --- a/frappe/desk/doctype/system_health_report/test_system_health_report.py +++ b/frappe/desk/doctype/system_health_report/test_system_health_report.py @@ -2,9 +2,10 @@ # See license.txt import frappe +from frappe.desk.form.load import getdoc from frappe.tests import IntegrationTestCase class TestSystemHealthReport(IntegrationTestCase): def test_it_works(self): - frappe.get_doc("System Health Report") + getdoc("System Health Report", "System Health Report") diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 8394e9085b..a0e6999b87 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -481,8 +481,9 @@ def update_user_info(docinfo, doc=None): users = set() if doc: - users.add(doc.owner) - users.add(doc.modified_by) + for field in ("owner", "modified_by"): + if user := doc.get(field): + users.add(user) users.update(d.sender for d in docinfo.communications) users.update(d.user for d in docinfo.shared)