perf: use orjson in utils

This commit is contained in:
Sagar Vora 2025-06-24 12:12:25 +05:30
parent b857a4099a
commit cda7699187

View file

@ -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