perf(site_cache): reduce access to frappe.local namespace

This change also allows calling @site_cache during init, as long as `site` parameter is set.
This commit is contained in:
Ankush Menat 2024-12-17 11:23:33 +05:30
parent 531b9a3e3d
commit 3675f3c797

View file

@ -122,7 +122,7 @@ def site_cache(ttl: int | None = None, maxsize: int | None = None) -> Callable:
@wraps(func)
def site_cache_wrapper(*args, **kwargs):
if getattr(frappe.local, "initialised", None):
if site := getattr(frappe.local, "site", None):
func_call_key = json.dumps((args, kwargs))
if hasattr(func, "ttl") and datetime.datetime.now(datetime.timezone.utc) >= func.expiration:
@ -131,15 +131,13 @@ def site_cache(ttl: int | None = None, maxsize: int | None = None) -> Callable:
seconds=func.ttl
)
if hasattr(func, "maxsize") and len(_SITE_CACHE[func_key][frappe.local.site]) >= func.maxsize:
_SITE_CACHE[func_key][frappe.local.site].pop(
next(iter(_SITE_CACHE[func_key][frappe.local.site])), None
)
if hasattr(func, "maxsize") and len(_SITE_CACHE[func_key][site]) >= func.maxsize:
_SITE_CACHE[func_key][site].pop(next(iter(_SITE_CACHE[func_key][site])), None)
if func_call_key not in _SITE_CACHE[func_key][frappe.local.site]:
_SITE_CACHE[func_key][frappe.local.site][func_call_key] = func(*args, **kwargs)
if func_call_key not in _SITE_CACHE[func_key][site]:
_SITE_CACHE[func_key][site][func_call_key] = func(*args, **kwargs)
return _SITE_CACHE[func_key][frappe.local.site][func_call_key]
return _SITE_CACHE[func_key][site][func_call_key]
return func(*args, **kwargs)