perf: Use lazy doc in a lot more places

This commit is contained in:
Ankush Menat 2025-06-10 21:53:03 +05:30
parent beefdb9a1f
commit 49f582ae57
17 changed files with 32 additions and 32 deletions

View file

@ -312,7 +312,7 @@ def get_doc_permissions(doctype: str, docname: str):
:param doctype: DocType of the document to be evaluated
:param docname: `name` of the document to be evaluated
"""
doc = frappe.get_doc(doctype, docname)
doc = frappe.get_lazy_doc(doctype, docname)
return {"permissions": frappe.permissions.get_doc_permissions(doc)}
@ -325,7 +325,7 @@ def get_password(doctype: str, name: str, fieldname: str):
:param fieldname: `fieldname` of the password property
"""
frappe.only_for("System Manager")
return frappe.get_doc(doctype, name).get_password(fieldname)
return frappe.get_lazy_doc(doctype, name).get_password(fieldname)
from frappe.deprecation_dumpster import get_js as _get_js
@ -361,7 +361,7 @@ def attach_file(
:param is_private: Attach file as private file (1 or 0)
:param docfield: file to attach to (optional)"""
doc = frappe.get_doc(doctype, docname)
doc = frappe.get_lazy_doc(doctype, docname)
doc.check_permission()
file = frappe.get_doc(

View file

@ -46,7 +46,7 @@ class DocShare(Document):
def get_doc(self):
if not getattr(self, "_doc", None):
self._doc = frappe.get_doc(self.share_doctype, self.share_name)
self._doc = frappe.get_lazy_doc(self.share_doctype, self.share_name)
return self._doc
def validate_user(self):

View file

@ -132,7 +132,7 @@ def get_desktop_icons(user=None):
user_icons.append(standard_icon)
user_blocked_modules = frappe.get_doc("User", user).get_blocked_modules()
user_blocked_modules = frappe.get_lazy_doc("User", user).get_blocked_modules()
for icon in user_icons:
if icon.module_name in user_blocked_modules:
icon.hidden = 1

View file

@ -115,7 +115,7 @@ class DocTags:
frappe.db.sql(
"update `tab{}` set _user_tags={} where name={}".format(self.dt, "%s", "%s"), (tags, dn)
)
doc = frappe.get_doc(self.dt, dn)
doc = frappe.get_lazy_doc(self.dt, dn)
update_tags(doc, tags)
except Exception as e:
if frappe.db.is_missing_column(e):

View file

@ -96,7 +96,7 @@ def get_docinfo(doc=None, doctype=None, name=None):
from frappe.share import _get_users as get_docshares
if not doc:
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
doc.check_permission("read")
all_communications = _get_communications(doc.doctype, doc.name, limit=21)
@ -205,7 +205,7 @@ def get_versions(doc: "Document") -> list[dict]:
def get_communications(doctype, name, start=0, limit=20):
from frappe.utils import cint
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
doc.check_permission("read")
return _get_communications(doctype, name, cint(start), cint(limit))

View file

@ -27,7 +27,7 @@ def add_comment(
reference_doctype: str, reference_name: str, content: str, comment_email: str, comment_by: str
) -> "Comment":
"""Allow logged user with permission to read document to add a comment"""
reference_doc = frappe.get_doc(reference_doctype, reference_name)
reference_doc = frappe.get_lazy_doc(reference_doctype, reference_name)
reference_doc.check_permission()
comment = frappe.new_doc("Comment")
@ -58,7 +58,7 @@ def update_comment(name, content):
frappe.throw(_("Comment can only be edited by the owner"), frappe.PermissionError)
if doc.reference_doctype and doc.reference_name:
reference_doc = frappe.get_doc(doc.reference_doctype, doc.reference_name)
reference_doc = frappe.get_lazy_doc(doc.reference_doctype, doc.reference_name)
reference_doc.check_permission()
doc.content = extract_images_from_html(reference_doc, content, is_private=True)

View file

@ -88,5 +88,5 @@ def remove_like(doctype, name):
def add_comment(doctype, name):
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
doc.add_comment("Like", _("Liked"))

View file

@ -251,7 +251,7 @@ def get_open_count(doctype: str, name: str, items=None):
if frappe.flags.in_migrate or frappe.flags.in_install:
return {"count": []}
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
doc.check_permission()
meta = doc.meta
links = meta.get_dashboard_data()

View file

@ -233,7 +233,7 @@ def get_context(context):
)
for d in doc_list:
doc = frappe.get_doc(self.document_type, d.name)
doc = frappe.get_lazy_doc(self.document_type, d.name)
if self.condition and not frappe.safe_eval(self.condition, None, get_context(doc)):
continue
@ -282,7 +282,7 @@ def get_context(context):
self.db_set("datetime_last_run", now) # set reference now for next run
for d in doc_list:
doc = frappe.get_doc(self.document_type, d.name)
doc = frappe.get_lazy_doc(self.document_type, d.name)
if self.condition and not frappe.safe_eval(self.condition, None, get_context(doc)):
continue
@ -443,7 +443,7 @@ def get_context(context):
communication_type="Automated Message",
).get("name")
# set the outgoing email account because we did in fact send it via sendmail above
comm = frappe.get_doc("Communication", communication)
comm = frappe.get_lazy_doc("Communication", communication)
comm.get_outgoing_email_account()
frappe.sendmail(

View file

@ -42,7 +42,7 @@ def create_email_flag_queue(names, action):
"""create email flag queue to mark email either as read or unread"""
def mark_as_seen_unseen(name, action):
doc = frappe.get_doc("Communication", name)
doc = frappe.get_lazy_doc("Communication", name)
if action == "Read":
doc.add_seen()
else:

View file

@ -128,7 +128,7 @@ def upload_file():
else:
raise frappe.PermissionError
else:
user: User = frappe.get_doc("User", frappe.session.user)
user: User = frappe.get_lazy_doc("User", frappe.session.user)
ignore_permissions = False
files = frappe.request.files
@ -210,7 +210,7 @@ def check_write_permission(doctype: str | None = None, name: str | None = None):
return
try:
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
except frappe.DoesNotExistError:
# doc has not been inserted yet, name is set to "new-some-doctype"
# If doc inserts fine then only this attachment will be linked see file/utils.py:relink_mismatched_files

View file

@ -139,7 +139,7 @@ def get_doc_from_dict(data: dict[str, Any], **kwargs) -> "Document":
raise ImportError(data["doctype"])
def get_lazy_doc(doctype: str, name: str):
def get_lazy_doc(doctype: str, name: str) -> "Document":
assert doctype != "DocType", "DocType can not be lazy loaded"
controller = get_lazy_controller(doctype)
@ -1944,7 +1944,7 @@ def _document_values_generator(
@frappe.whitelist()
def unlock_document(doctype: str, name: str):
frappe.get_doc(doctype, name).unlock()
frappe.get_lazy_doc(doctype, name).unlock()
frappe.msgprint(frappe._("Document Unlocked"), alert=True)

View file

@ -277,7 +277,7 @@ class Session:
self.insert_session_record()
# update user
user = frappe.get_doc("User", self.data["user"])
user = frappe.get_lazy_doc("User", self.data["user"])
user_doctype = frappe.qb.DocType("User")
(
frappe.qb.update(user_doctype)

View file

@ -125,7 +125,7 @@ def set_docshare_permission(doctype, name, user, permission_to, value=1, everyon
@frappe.whitelist()
def get_users(doctype: str, name: str) -> list:
"""Get list of users with which this document is shared"""
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
return _get_users(doc)

View file

@ -483,7 +483,7 @@ def get_context(context):
return False
if self.apply_document_permissions:
return frappe.get_doc(doctype, name).has_permission(permtype=ptype)
return frappe.get_last_doc(doctype, name).has_permission(permtype=ptype)
# owner matches
elif frappe.db.get_value(doctype, name, "owner") == frappe.session.user:
@ -558,7 +558,7 @@ def accept(web_form, data):
files = []
files_to_delete = []
web_form = frappe.get_doc("Web Form", web_form)
web_form = frappe.get_lazy_doc("Web Form", web_form)
doctype = web_form.doc_type
user = frappe.session.user
@ -654,7 +654,7 @@ def accept(web_form, data):
@frappe.whitelist()
def delete(web_form_name: str, docname: str | int):
web_form = frappe.get_doc("Web Form", web_form_name)
web_form = frappe.get_lazy_doc("Web Form", web_form_name)
owner = frappe.db.get_value(web_form.doc_type, docname, "owner")
if frappe.session.user == owner and web_form.allow_delete:
@ -665,7 +665,7 @@ def delete(web_form_name: str, docname: str | int):
@frappe.whitelist()
def delete_multiple(web_form_name: str, docnames):
web_form = frappe.get_doc("Web Form", web_form_name)
web_form = frappe.get_lazy_doc("Web Form", web_form_name)
docnames = json.loads(docnames)
@ -691,7 +691,7 @@ def delete_multiple(web_form_name: str, docnames):
def check_webform_perm(doctype, name):
doc = frappe.get_doc(doctype, name)
doc = frappe.get_lazy_doc(doctype, name)
if hasattr(doc, "has_webform_permission"):
if doc.has_webform_permission():
return True
@ -762,7 +762,7 @@ def get_in_list_view_fields(doctype):
def get_link_options(web_form_name, doctype, allow_read_on_all_link_options=False):
web_form: WebForm = frappe.get_doc("Web Form", web_form_name)
web_form: WebForm = frappe.get_lazy_doc("Web Form", web_form_name)
if web_form.login_required and frappe.session.user == "Guest":
frappe.throw(_("You must be logged in to use this form."), frappe.PermissionError)

View file

@ -197,7 +197,7 @@ def get_list_context(context, doctype, web_form_name=None):
# get context from web form module
if web_form_name:
web_form = frappe.get_doc("Web Form", web_form_name)
web_form = frappe.get_lazy_doc("Web Form", web_form_name)
list_context = update_context_from_module(get_web_form_module(web_form), list_context)
# get path from '/templates/' folder of the doctype

View file

@ -60,7 +60,7 @@ def get_context(context) -> PrintContext:
if frappe.form_dict.doc:
doc = frappe.form_dict.doc
else:
doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)
doc = frappe.get_lazy_doc(frappe.form_dict.doctype, frappe.form_dict.name)
set_link_titles(doc)
@ -340,7 +340,7 @@ def get_html_and_style(
"""Return `html` and `style` of print format, used in PDF etc."""
if isinstance(name, str):
document = frappe.get_doc(doc, name)
document = frappe.get_lazy_doc(doc, name)
else:
document = frappe.get_doc(json.loads(doc))
@ -371,7 +371,7 @@ def get_rendered_raw_commands(doc: str, name: str | None = None, print_format: s
"""Return Rendered Raw Commands of print format, used to send directly to printer."""
if isinstance(name, str):
document = frappe.get_doc(doc, name)
document = frappe.get_lazy_doc(doc, name)
else:
document = frappe.get_doc(json.loads(doc))