perf: use client cache for doctype "maps" (#31105)

This commit is contained in:
Ankush Menat 2025-02-05 12:16:47 +05:30 committed by GitHub
parent 7718e597e7
commit 174783d0ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 11 deletions

View file

@ -18,7 +18,7 @@ class TestMilestoneTracker(IntegrationTestCase):
def test_milestone(self):
frappe.db.delete("Milestone Tracker")
frappe.cache.delete_key("milestone_tracker_map")
frappe.cache_manager.clear_doctype_map("Milestone Tracker")
milestone_tracker = frappe.get_doc(
doctype="Milestone Tracker", document_type="ToDo", track_field="status"

View file

@ -13,8 +13,8 @@ doctypes_for_mapping = {
}
def get_doctype_map_key(doctype):
return frappe.scrub(doctype) + "_map"
def get_doctype_map_key(doctype, name="*") -> str:
return frappe.scrub(doctype) + f"_map::{name}"
doctype_map_keys = tuple(map(get_doctype_map_key, doctypes_for_mapping))
@ -76,6 +76,7 @@ doctype_cache_keys = (
wildcard_keys = (
"document_cache::*",
"table_columns::*",
*doctype_map_keys,
)
@ -180,15 +181,14 @@ def clear_controller_cache(doctype=None):
def get_doctype_map(doctype, name, filters=None, order_by=None):
return frappe.cache.hget(
get_doctype_map_key(doctype),
name,
lambda: frappe.get_all(doctype, filters=filters, order_by=order_by, ignore_ddl=True),
return frappe.client_cache.get_value(
get_doctype_map_key(doctype, name),
generator=lambda: frappe.get_all(doctype, filters=filters, order_by=order_by, ignore_ddl=True),
)
def clear_doctype_map(doctype, name):
frappe.cache.hdel(frappe.scrub(doctype) + "_map", name)
def clear_doctype_map(doctype, name="*"):
frappe.client_cache.delete_keys(get_doctype_map_key(doctype, name))
def build_table_count_cache():

View file

@ -1,6 +1,7 @@
# Copyright (c) 2019, Frappe Technologies and Contributors
# License: MIT. See LICENSE
import frappe
from frappe.cache_manager import clear_doctype_map
from frappe.desk.form.assign_to import add as assign_to
from frappe.desk.page.user_profile.user_profile import get_energy_points_heatmap_data
from frappe.tests import IntegrationTestCase, UnitTestCase
@ -34,13 +35,13 @@ class TestEnergyPointLog(IntegrationTestCase):
settings.save()
def setUp(self):
frappe.cache.delete_value("energy_point_rule_map")
clear_doctype_map("Energy Point Rule")
def tearDown(self):
frappe.set_user("Administrator")
frappe.db.delete("Energy Point Log")
frappe.db.delete("Energy Point Rule")
frappe.cache.delete_value("energy_point_rule_map")
clear_doctype_map("Energy Point Rule")
def test_user_energy_point(self):
frappe.set_user("test@example.com")