From 5b87d55b7ec3bb8c247b2a60abdda819af8a101d Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 23 Dec 2025 16:06:10 +0530 Subject: [PATCH] perf: Cache get_apps and internals --- frappe/apps.py | 2 ++ frappe/utils/modules.py | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frappe/apps.py b/frappe/apps.py index e6eec57126..dfb6e83c20 100644 --- a/frappe/apps.py +++ b/frappe/apps.py @@ -10,12 +10,14 @@ from frappe.core.doctype.installed_applications.installed_applications import ( get_setup_wizard_completed_apps, get_setup_wizard_not_required_apps, ) +from frappe.utils.caching import request_cache # check if route is /desk or /desk/* and not /app1 or /app1/* DESK_APP_PATTERN = re.compile(r"^/desk(/.*)?$") @frappe.whitelist() +@request_cache def get_apps(): apps = frappe.get_installed_apps() app_list = [] diff --git a/frappe/utils/modules.py b/frappe/utils/modules.py index 74f717df15..d2d206cb74 100644 --- a/frappe/utils/modules.py +++ b/frappe/utils/modules.py @@ -1,12 +1,13 @@ import frappe from frappe import _ +from frappe.utils.caching import redis_cache def get_modules_from_all_apps_for_user(user: str | None = None) -> list[dict]: user = user or frappe.session.user all_modules = get_modules_from_all_apps() - global_blocked_modules = frappe.get_doc("User", "Administrator").get_blocked_modules() - user_blocked_modules = frappe.get_doc("User", user).get_blocked_modules() + global_blocked_modules = frappe.get_cached_doc("User", "Administrator").get_blocked_modules() + user_blocked_modules = frappe.get_cached_doc("User", user).get_blocked_modules() blocked_modules = global_blocked_modules + user_blocked_modules allowed_modules_list = [m for m in all_modules if m.get("module_name") not in blocked_modules] @@ -29,6 +30,7 @@ def get_modules_from_all_apps(): return modules_list +@redis_cache def get_modules_from_app(app): return frappe.get_all("Module Def", filters={"app_name": app}, fields=["module_name", "app_name as app"])