fix: respect override_whitelisted_method in map_docs (#31718)

* refactor: override_whitelisted_method

* fix: respect `override_whitelisted_method` in `map_docs`

* refactor: override_whitelisted_method
This commit is contained in:
Raffael Meyer 2025-03-17 14:27:12 +01:00 committed by GitHub
parent 4a04b0a17f
commit 9430e3af86
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 10 additions and 16 deletions

View file

@ -2050,6 +2050,12 @@ def validate_and_sanitize_search_inputs(fn):
return wrapper
def override_whitelisted_method(original_method: str) -> str:
"""Return the last override or the original whitelisted method."""
overrides = frappe.get_hooks("override_whitelisted_methods", {}).get(original_method, [])
return overrides[-1] if overrides else original_method
# Backward compatibility
from frappe.utils.messages import * # noqa: I001

View file

@ -33,10 +33,7 @@ def handle_rpc_call(method: str, doctype: str | None = None):
module = load_doctype_module(doctype)
method = module.__name__ + "." + method
for hook in reversed(frappe.get_hooks("override_whitelisted_methods", {}).get(method, [])):
# override using the last hook
method = hook
break
method = frappe.override_whitelisted_method(method)
# via server script
server_script = get_server_script_map().get("_api", {}).get(method)

View file

@ -62,10 +62,7 @@ def handle():
def execute_cmd(cmd, from_async=False):
"""execute a request as python module"""
for hook in reversed(frappe.get_hooks("override_whitelisted_methods", {}).get(cmd, [])):
# override using the last hook
cmd = hook
break
cmd = frappe.override_whitelisted_method(cmd)
# via server script
server_script = get_server_script_map().get("_api", {}).get(cmd)

View file

@ -15,13 +15,7 @@ def make_mapped_doc(method, source_name, selected_children=None, args=None):
Set `selected_children` as flags for the `get_mapped_doc` method.
Called from `open_mapped_doc` from create_new.js"""
for hook in reversed(frappe.get_hooks("override_whitelisted_methods", {}).get(method, [])):
# override using the last hook
method = hook
break
method = frappe.get_attr(method)
method = frappe.get_attr(frappe.override_whitelisted_method(method))
frappe.is_whitelisted(method)
@ -45,8 +39,8 @@ def map_docs(method, source_names, target_doc, args=None):
e.g. args: "{ 'supplier': 'XYZ' }"
"""
method = frappe.get_attr(frappe.override_whitelisted_method(method))
method = frappe.get_attr(method)
frappe.is_whitelisted(method)
for src in json.loads(source_names):