From 470964015eb72d7e4eef2a59f649e5d0943e66a8 Mon Sep 17 00:00:00 2001 From: Kaushal Shriwas <64089478+kaulith@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:10:13 +0530 Subject: [PATCH] fix: also parse JSON-encoded scalar strings in get_safe_filters --- frappe/tests/test_utils.py | 2 ++ frappe/utils/__init__.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index 9ab94d4e6b..2677f7d18f 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -364,6 +364,8 @@ class TestFilters(IntegrationTestCase): def test_get_safe_filters_still_parses_json(self): self.assertEqual(get_safe_filters('{"name": "ABC"}'), {"name": "ABC"}) self.assertEqual(get_safe_filters('[["name", "=", "ABC"]]'), [["name", "=", "ABC"]]) + # FrappeClient encodes scalar filters via frappe.as_json — must still unwrap + self.assertEqual(get_safe_filters('"ABC"'), "ABC") def test_get_safe_filters_passes_through_non_strings(self): self.assertEqual(get_safe_filters({"name": "ABC"}), {"name": "ABC"}) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 122368c1b9..d20a754114 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -904,7 +904,7 @@ def call(fn, *args, **kwargs): def get_safe_filters(filters): - if isinstance(filters, str) and filters and filters[0] in "{[": + if isinstance(filters, str) and filters and filters[0] in '{["': try: return orjson.loads(filters) except (TypeError, ValueError):