From cda7699187ce2d9e488255797c82060c43e8ae68 Mon Sep 17 00:00:00 2001 From: Sagar Vora <16315650+sagarvora@users.noreply.github.com> Date: Tue, 24 Jun 2025 12:12:25 +0530 Subject: [PATCH] perf: use `orjson` in utils --- frappe/utils/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index a9bdee4d1a..0bc0666922 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -21,6 +21,7 @@ from email.header import decode_header, make_header from email.utils import formataddr, parseaddr from typing import Any, Generic, TypeAlias, TypedDict +import orjson from werkzeug.test import Client from frappe.deprecation_dumpster import gzip_compress, gzip_decompress, make_esc @@ -830,7 +831,7 @@ def get_site_info(): site_info.update(frappe.get_attr(method_name)(site_info) or {}) # dumps -> loads to prevent datatype conflicts - return json.loads(frappe.as_json(site_info)) + return orjson.loads(frappe.as_json(site_info)) def parse_json(val: str): @@ -838,7 +839,7 @@ def parse_json(val: str): Parses json if string else return """ if isinstance(val, str): - val = json.loads(val) + val = orjson.loads(val) if isinstance(val, dict): val = frappe._dict(val) return val @@ -862,7 +863,7 @@ def get_db_count(*args): for doctype in args: db_count[doctype] = frappe.db.count(doctype) - return json.loads(frappe.as_json(db_count)) + return orjson.loads(frappe.as_json(db_count)) def call(fn, *args, **kwargs): @@ -878,12 +879,12 @@ def call(fn, *args, **kwargs): via terminal: bench --site erpnext.local execute frappe.utils.call --args '''["frappe.get_all", "Activity Log"]''' --kwargs '''{"fields": ["user", "creation", "full_name"], "filters":{"Operation": "Login", "Status": "Success"}, "limit": "10"}''' """ - return json.loads(frappe.as_json(frappe.call(fn, *args, **kwargs))) + return orjson.loads(frappe.as_json(frappe.call(fn, *args, **kwargs))) def get_safe_filters(filters): try: - filters = json.loads(filters) + filters = orjson.loads(filters) if isinstance(filters, int | float): filters = frappe.as_unicode(filters) @@ -1043,7 +1044,7 @@ def safe_json_loads(*args): for arg in args: try: - arg = json.loads(arg) + arg = orjson.loads(arg) except Exception: pass