fix: preserve docnames matching scientific notation in get_safe_filters
This commit is contained in:
parent
4093ecc409
commit
ff83bb1473
3 changed files with 29 additions and 4 deletions
|
|
@ -291,3 +291,12 @@ class TestClient(IntegrationTestCase):
|
||||||
# cleanup
|
# cleanup
|
||||||
for doc in docs:
|
for doc in docs:
|
||||||
frappe.delete_doc("Note", doc)
|
frappe.delete_doc("Note", doc)
|
||||||
|
|
||||||
|
def test_get_value_with_scientific_notation_docname(self):
|
||||||
|
from frappe.client import get_value
|
||||||
|
|
||||||
|
tag = frappe.get_doc({"doctype": "Tag", "name": "3E002"}).insert(ignore_if_duplicate=True)
|
||||||
|
try:
|
||||||
|
self.assertEqual(get_value("Tag", ["name"], "3E002"), {"name": "3E002"})
|
||||||
|
finally:
|
||||||
|
tag.delete()
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ from frappe.utils import (
|
||||||
get_file_timestamp,
|
get_file_timestamp,
|
||||||
get_gravatar,
|
get_gravatar,
|
||||||
get_link_to_report,
|
get_link_to_report,
|
||||||
|
get_safe_filters,
|
||||||
get_site_info,
|
get_site_info,
|
||||||
get_sites,
|
get_sites,
|
||||||
get_url,
|
get_url,
|
||||||
|
|
@ -352,6 +353,23 @@ class TestFilters(IntegrationTestCase):
|
||||||
link = get_link_to_report(name="ToDo", filters=filters)
|
link = get_link_to_report(name="ToDo", filters=filters)
|
||||||
self.assertIn('creation=["between",["2024-01-01","2024-12-31"]]', link)
|
self.assertIn('creation=["between",["2024-01-01","2024-12-31"]]', link)
|
||||||
|
|
||||||
|
def test_get_safe_filters_preserves_scientific_notation_docnames(self):
|
||||||
|
self.assertEqual(get_safe_filters("3E002"), "3E002")
|
||||||
|
self.assertEqual(get_safe_filters("1E5"), "1E5")
|
||||||
|
self.assertEqual(get_safe_filters("2e10"), "2e10")
|
||||||
|
self.assertEqual(get_safe_filters("1.5"), "1.5")
|
||||||
|
self.assertEqual(get_safe_filters("Infinity"), "Infinity")
|
||||||
|
self.assertEqual(get_safe_filters("NaN"), "NaN")
|
||||||
|
|
||||||
|
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"]])
|
||||||
|
|
||||||
|
def test_get_safe_filters_passes_through_non_strings(self):
|
||||||
|
self.assertEqual(get_safe_filters({"name": "ABC"}), {"name": "ABC"})
|
||||||
|
self.assertEqual(get_safe_filters([["name", "=", "ABC"]]), [["name", "=", "ABC"]])
|
||||||
|
self.assertIsNone(get_safe_filters(None))
|
||||||
|
|
||||||
|
|
||||||
class TestMoney(IntegrationTestCase):
|
class TestMoney(IntegrationTestCase):
|
||||||
def test_money_in_words(self):
|
def test_money_in_words(self):
|
||||||
|
|
|
||||||
|
|
@ -904,12 +904,10 @@ def call(fn, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def get_safe_filters(filters):
|
def get_safe_filters(filters):
|
||||||
|
if not isinstance(filters, str) or not filters or filters[0] not in "{[":
|
||||||
|
return filters
|
||||||
try:
|
try:
|
||||||
filters = orjson.loads(filters)
|
filters = orjson.loads(filters)
|
||||||
|
|
||||||
if isinstance(filters, int | float):
|
|
||||||
filters = frappe.as_unicode(filters)
|
|
||||||
|
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
# filters are not passed, not json
|
# filters are not passed, not json
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue