Skip to content

Commit

Permalink
perf: reuse _doc_before_save in doc.get_latest (backport #19326) (#…
Browse files Browse the repository at this point in the history
…19345)

* perf: reuse `_doc_before_save` in `doc.get_latest`

(cherry picked from commit c453ad2)

# Conflicts:
#	frappe/model/base_document.py

* test: improve doctype and field naming

(cherry picked from commit 9ad9c39)

# Conflicts:
#	frappe/tests/test_linked_with.py

* chore: resolve conflicts

* fix: add validation for reserved keywords when saving DocType (backport)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
  • Loading branch information
mergify[bot] and sagarvora committed Dec 19, 2022
1 parent 7d93bf0 commit 757b042
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 10 deletions.
11 changes: 6 additions & 5 deletions frappe/core/doctype/doctype/doctype.py
Expand Up @@ -931,12 +931,13 @@ def check_illegal_characters(fieldname):
validate_column_name(fieldname)

def check_invalid_fieldnames(docname, fieldname):
invalid_fields = ("doctype",)
if fieldname in invalid_fields:
if fieldname in Document._reserved_keywords:
frappe.throw(
_("{0}: Fieldname cannot be one of {1}").format(
docname, ", ".join([frappe.bold(d) for d in invalid_fields])
)
_("{0}: fieldname cannot be set to reserved keyword {1}").format(
frappe.bold(docname),
frappe.bold(fieldname),
),
title=_("Invalid Fieldname"),
)

def check_unique_fieldname(docname, fieldname):
Expand Down
15 changes: 13 additions & 2 deletions frappe/model/base_document.py
Expand Up @@ -85,7 +85,18 @@ def _get_controller():


class BaseDocument(object):
ignore_in_setter = ("doctype", "_meta", "meta", "_table_fields", "_valid_columns")
_reserved_keywords = {
"doctype",
"meta",
"_meta",
"flags",
"parent_doc",
"_table_fields",
"_valid_columns",
"_doc_before_save",
"_reserved_keywords",
"dont_update_if_missing",
}

def __init__(self, d):
if d.get("doctype"):
Expand Down Expand Up @@ -170,7 +181,7 @@ def getone(self, key, filters=None):
return self.get(key, filters=filters, limit=1)[0]

def set(self, key, value, as_value=False):
if key in self.ignore_in_setter:
if key in self._reserved_keywords:
return

if isinstance(value, list) and not as_value:
Expand Down
7 changes: 4 additions & 3 deletions frappe/model/document.py
Expand Up @@ -191,9 +191,10 @@ def load_from_db(self):
self.__setup__()

def get_latest(self):
if not getattr(self, "latest", None):
self.latest = frappe.get_doc(self.doctype, self.name)
return self.latest
if not hasattr(self, "_doc_before_save"):
self.load_doc_before_save()

return self._doc_before_save

def check_permission(self, permtype="read", permlevel=None):
"""Raise `frappe.PermissionError` if not permitted"""
Expand Down

0 comments on commit 757b042

Please sign in to comment.