diff --git a/frappe/__init__.py b/frappe/__init__.py index 5be6fe4098..85f30984bb 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1380,13 +1380,7 @@ def get_doc(*args: Any, **kwargs: Any) -> "Document": """ import frappe.model.document - doc = frappe.model.document.get_doc(*args, **kwargs) - - # Replace cache if stale one exists - if not kwargs.get("for_update") and (key := can_cache_doc(args)) and cache.exists(key): - _set_document_in_cache(key, doc) - - return doc + return frappe.model.document.get_doc(*args, **kwargs) def get_last_doc( diff --git a/frappe/core/doctype/role_profile/role_profile.py b/frappe/core/doctype/role_profile/role_profile.py index f156c87038..9d790bc84a 100644 --- a/frappe/core/doctype/role_profile/role_profile.py +++ b/frappe/core/doctype/role_profile/role_profile.py @@ -26,6 +26,7 @@ class RoleProfile(Document): self.name = self.role_profile def on_update(self): + self.clear_cache() self.queue_action( "update_all_users", now=frappe.flags.in_test or frappe.flags.in_install, diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 93845bab34..363d55e845 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -20,7 +20,7 @@ if typing.TYPE_CHECKING: @frappe.whitelist() -def getdoc(doctype, name, user=None): +def getdoc(doctype, name): """ Loads a doclist for a given document. This method is called directly from the client. Requries "doctype", "name" as form variables. @@ -38,6 +38,11 @@ def getdoc(doctype, name, user=None): doc.check_permission("read") + # Replace cache if stale one exists + # PERF: This should be eventually removed completely when we are sure about caching correctness + if (key := frappe.can_cache_doc((doctype, name))) and frappe.cache.exists(key): + frappe._set_document_in_cache(key, doc) + run_onload(doc) doc.apply_fieldlevel_read_permissions()