From 987b47557dcda466163177fdb0eaf8cd472f644f Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Thu, 31 Mar 2022 12:28:23 +0530 Subject: [PATCH] perf: cache parsed `assets_json` instead of string --- frappe/utils/__init__.py | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 4a6d578a9c..fe4599caeb 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -793,38 +793,24 @@ def get_build_version(): def get_assets_json(): if not hasattr(frappe.local, "assets_json"): cache = frappe.cache() + assets = None - # using .get instead of .get_value to avoid pickle.loads - try: - if not frappe.conf.developer_mode: - assets_json = cache.get("assets_json").decode('utf-8') - else: - assets_json = None - except (UnicodeDecodeError, AttributeError, ConnectionError): - assets_json = None + if not frappe.conf.developer_mode: + assets = cache.get_value("assets_json", shared=True) - if not assets_json: + if not assets: # get merged assets.json and assets-rtl.json - assets_dict = frappe.parse_json( - frappe.read_file("assets/assets.json") - ) - - assets_rtl = frappe.read_file("assets/assets-rtl.json") - if assets_rtl: - assets_dict.update( - frappe.parse_json(assets_rtl) - ) - frappe.local.assets_json = frappe.as_json(assets_dict) + assets = frappe.parse_json(frappe.read_file("assets/assets.json")) + + if assets_rtl := frappe.read_file("assets/assets-rtl.json"): + assets.update(frappe.parse_json(assets_rtl)) + # save in cache - cache.set_value("assets_json", frappe.local.assets_json, - shared=True) + cache.set_value("assets_json", assets, shared=True) - return assets_dict - else: - # from cache, decode and send - frappe.local.assets_json = frappe.safe_decode(assets_json) + frappe.local.assets_json = assets - return frappe.parse_json(frappe.local.assets_json) + return frappe.local.assets_json def get_bench_relative_path(file_path):