From 4f4a387b7ee89281338ca920935ed771dd42e67a Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sun, 10 Mar 2024 13:06:12 +0530 Subject: [PATCH] fix(patch): Remove obviously invalid fetch from expressions (#25284) --- .../property_setter/patches/__init__.py | 0 .../remove_invalid_fetch_from_expressions.py | 26 +++++++++++++++++++ frappe/patches.txt | 1 + 3 files changed, 27 insertions(+) create mode 100644 frappe/custom/doctype/property_setter/patches/__init__.py create mode 100644 frappe/custom/doctype/property_setter/patches/remove_invalid_fetch_from_expressions.py diff --git a/frappe/custom/doctype/property_setter/patches/__init__.py b/frappe/custom/doctype/property_setter/patches/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/custom/doctype/property_setter/patches/remove_invalid_fetch_from_expressions.py b/frappe/custom/doctype/property_setter/patches/remove_invalid_fetch_from_expressions.py new file mode 100644 index 0000000000..777e2af2d8 --- /dev/null +++ b/frappe/custom/doctype/property_setter/patches/remove_invalid_fetch_from_expressions.py @@ -0,0 +1,26 @@ +import frappe + + +def execute(): + """Remove invalid fetch from expressions""" + + property_setters = frappe.get_all( + "Property Setter", {"doctype_or_field": "DocField", "property": "fetch_from"}, ["name", "value"] + ) + for ps in property_setters: + if not is_valid_expression(ps.value): + frappe.db.delete("Property Setter", {"name": ps.name}) + + custom_fields = frappe.get_all("Custom Field", {"fetch_from": ("is", "set")}, ["name", "fetch_from"]) + for cf in custom_fields: + if not is_valid_expression(cf.fetch_from): + frappe.db.set_value("Custom Field", cf.name, "fetch_from", "") + + +def is_valid_expression(expr) -> bool: + if not expr or "." not in expr: + return False + source_field, target_field = expr.split(".") + if not source_field or not target_field: + return False + return True diff --git a/frappe/patches.txt b/frappe/patches.txt index 93c3808534..36dc85102b 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -235,3 +235,4 @@ frappe.patches.v15_0.validate_newsletter_recipients frappe.patches.v15_0.sanitize_workspace_titles frappe.patches.v15_0.migrate_role_profile_to_table_multi_select frappe.patches.v15_0.migrate_session_data +frappe.custom.doctype.property_setter.patches.remove_invalid_fetch_from_expressions