diff --git a/frappe/__init__.py b/frappe/__init__.py index fc8d85c287..d235600458 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1033,3 +1033,19 @@ def publish_realtime(*args, **kwargs): import frappe.async return frappe.async.publish_realtime(*args, **kwargs) + +def local_cache(namespace, key, generator): + """A key value store for caching within a request + + :param namespace: frappe.local.cache[namespace] + :param key: frappe.local.cache[namespace][key] used to retrieve value + :param generator: method to generate a value if not found in store + + """ + if namespace not in local.cache: + local.cache[namespace] = {} + + if key not in local.cache[namespace]: + local.cache[namespace][key] = generator() + + return local.cache[namespace][key]