From ce58432e4ba9a51e42b205abe0c5c787eea4313c Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sat, 4 May 2024 12:26:02 +0530 Subject: [PATCH] feat: Keep certain keys persistent in cache --- frappe/__init__.py | 6 +++++- frappe/hooks.py | 7 +++++++ frappe/tests/test_deferred_insert.py | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index aa97caf2ec48..233b28d54c8e 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1049,7 +1049,11 @@ def clear_cache(user: str | None = None, doctype: str | None = None): frappe.cache_manager.clear_user_cache(user) else: # everything # Delete ALL keys associated with this site. - frappe.cache.delete_keys("") + keys_to_delete = set(frappe.cache.get_keys("")) + for key in frappe.get_hooks("persistent_cache_keys"): + keys_to_delete.difference_update(frappe.cache.get_keys(key)) + frappe.cache.delete_value(list(keys_to_delete), make_keys=False) + reset_metadata_version() local.cache = {} local.new_doc_templates = {} diff --git a/frappe/hooks.py b/frappe/hooks.py index 5d55b30ddc0f..9b2cf606e1b8 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -545,3 +545,10 @@ "Activity Log": 90, "Route History": 90, } + +# These keys will not be erased when doing frappe.clear_cache() +persistent_cache_keys = [ + "update-user-set", + "update-info", + "insert_queue_for_*", # Deferred Insert +] diff --git a/frappe/tests/test_deferred_insert.py b/frappe/tests/test_deferred_insert.py index 4f27bef4f0b1..8c44b875911d 100644 --- a/frappe/tests/test_deferred_insert.py +++ b/frappe/tests/test_deferred_insert.py @@ -10,3 +10,9 @@ def test_deferred_insert(self): save_to_db() self.assertTrue(frappe.db.exists("Route History", route_history)) + + route_history = {"route": frappe.generate_hash(), "user": "Administrator"} + deferred_insert("Route History", [route_history]) + frappe.clear_cache() # deferred_insert cache keys are supposed to be persistent + save_to_db() + self.assertTrue(frappe.db.exists("Route History", route_history))