diff --git a/frappe/desk/doctype/tag_link/tag_link.json b/frappe/desk/doctype/tag_link/tag_link.json index c80ef8603b..9613c7d0ed 100644 --- a/frappe/desk/doctype/tag_link/tag_link.json +++ b/frappe/desk/doctype/tag_link/tag_link.json @@ -46,7 +46,7 @@ } ], "links": [], - "modified": "2024-03-23 16:03:39.781828", + "modified": "2025-02-04 12:02:03.779623", "modified_by": "Administrator", "module": "Desk", "name": "Tag Link", @@ -79,6 +79,5 @@ "read_only": 1, "sort_field": "creation", "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file + "states": [] +} diff --git a/frappe/desk/doctype/tag_link/tag_link.py b/frappe/desk/doctype/tag_link/tag_link.py index 52000b6b63..d99f4dc31b 100644 --- a/frappe/desk/doctype/tag_link/tag_link.py +++ b/frappe/desk/doctype/tag_link/tag_link.py @@ -1,7 +1,7 @@ # Copyright (c) 2019, Frappe Technologies and contributors # License: MIT. See LICENSE -# import frappe +import frappe from frappe.model.document import Document @@ -18,6 +18,23 @@ class TagLink(Document): document_type: DF.Link | None tag: DF.Link | None title: DF.Data | None + # end: auto-generated types - pass + def clear_cache(self): + super().clear_cache() + if has_tags(self.document_type): + frappe.client_cache.delete_value(f"doctype_has_tags::{self.document_type}") + + +def on_doctype_update(): + frappe.db.add_index("Tag Link", ["document_type", "document_name"]) + + +def has_tags(doctype: str): + """Short circuit checks for tags by first checking if users even uses tags""" + + def check_db(): + return frappe.db.exists("Tag Link", {"document_type": doctype}) + + return frappe.client_cache.get_value(f"doctype_has_tags::{doctype}", generator=check_db) diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 11878ae6ad..cd315b7c4d 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -385,6 +385,11 @@ def get_view_logs(doc: "Document") -> list[dict]: def get_tags(doctype: str, name: str) -> str: + from frappe.desk.doctype.tag_link.tag_link import has_tags + + if not has_tags(doctype): + return + tags = frappe.get_all( "Tag Link", filters={"document_type": doctype, "document_name": name},