From b7ddd1df924d57f8ffc29e94622dced0a079cf52 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 6 Jan 2025 19:55:50 +0530 Subject: [PATCH] perf: cache hooks in client-side cache --- frappe/__init__.py | 12 +++++++----- frappe/tests/test_hooks.py | 4 ++-- frappe/tests/test_webform.py | 2 +- frappe/tests/test_website.py | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index a72075a946..aed180e0d9 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1592,16 +1592,18 @@ def get_hooks( :param app_name: Filter by app.""" if app_name: - hooks = _dict(_load_app_hooks(app_name)) + hooks = _load_app_hooks(app_name) else: if conf.developer_mode: - hooks = _dict(_load_app_hooks()) + hooks = _load_app_hooks() else: - hooks = _dict(cache.get_value("app_hooks", _load_app_hooks)) - + hooks = client_cache.get_value("app_hooks") + if hooks is None: + hooks = _load_app_hooks() + client_cache.set_value("app_hooks", hooks) if hook: return hooks.get(hook, ([] if default == "_KEEP_DEFAULT_LIST" else default)) - return hooks + return _dict(hooks) def append_hook(target, key, value): diff --git a/frappe/tests/test_hooks.py b/frappe/tests/test_hooks.py index 976b07736d..9f175a958a 100644 --- a/frappe/tests/test_hooks.py +++ b/frappe/tests/test_hooks.py @@ -26,7 +26,7 @@ class TestHooks(IntegrationTestCase): hooks.override_doctype_class = {"ToDo": ["frappe.tests.test_hooks.CustomToDo"]} # Clear cache - frappe.cache.delete_value("app_hooks") + frappe.client_cache.delete_value("app_hooks") clear_controller_cache("ToDo") todo = frappe.get_doc(doctype="ToDo", description="asdf") @@ -53,7 +53,7 @@ class TestHooks(IntegrationTestCase): hooks.has_permission["*"] = wildcard_has_permission_hook # Clear cache - frappe.cache.delete_value("app_hooks") + frappe.client_cache.delete_value("app_hooks") # Init User and Address username = "test@example.com" diff --git a/frappe/tests/test_webform.py b/frappe/tests/test_webform.py index 7221612297..706fafb4d4 100644 --- a/frappe/tests/test_webform.py +++ b/frappe/tests/test_webform.py @@ -80,4 +80,4 @@ def set_webform_hook(key, value): delattr(hooks, hook) setattr(hooks, key, value) - frappe.cache.delete_key("app_hooks") + frappe.client_cache.delete_value("app_hooks") diff --git a/frappe/tests/test_website.py b/frappe/tests/test_website.py index dd725d94a4..e44ab92205 100644 --- a/frappe/tests/test_website.py +++ b/frappe/tests/test_website.py @@ -227,7 +227,7 @@ class TestWebsite(IntegrationTestCase): self.assertEqual(response.headers.get("Location"), "/test") delattr(frappe.hooks, "website_redirects") - frappe.cache.delete_key("app_hooks") + frappe.client_cache.delete_value("app_hooks") def test_custom_page_renderer(self): from frappe import get_hooks