From 616a17c3ecf8344f97f5e323d535f463f5945aa3 Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Wed, 22 Apr 2026 21:13:38 +0530 Subject: [PATCH] refactor(client): add stronger checks Previous code was very passive for dicts., this fixes that by parsing and then checking membership. --- frappe/client.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/frappe/client.py b/frappe/client.py index 71c26448fa..08f502c9f3 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -189,18 +189,21 @@ def set_value(doctype: str, name: str | int, fieldname: str | dict[str, Any], va :param fieldname: fieldname string or JSON / dict with key value pair :param value: value if fieldname is JSON / dict""" - if fieldname in (frappe.model.default_fields + frappe.model.child_table_fields): - frappe.throw(_("Cannot edit standard fields")) - - if not value: - values = fieldname - if isinstance(fieldname, str): - try: - values = json.loads(fieldname) - except ValueError: - values = {fieldname: ""} - else: + values = {} + if value is not None: values = {fieldname: value} + elif isinstance(fieldname, dict): + values = fieldname + elif isinstance(fieldname, str): + try: + values = json.loads(fieldname) + except ValueError: + values = {fieldname: ""} + + forbidden = set(frappe.model.default_fields + frappe.model.child_table_fields) + for field in values: + if field in forbidden: + frappe.throw(_("Cannot edit standard fields")) # check for child table doctype if not frappe.get_meta(doctype).istable: