From 1a20f376f3b5259e66e3d0b4ab58664371722e8e Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Tue, 15 Feb 2022 13:06:30 +0530 Subject: [PATCH] perf: reduce loop in `doc.update` --- frappe/model/base_document.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index a0f692f630..c8a6ead0ec 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -106,13 +106,9 @@ class BaseDocument(object): }) """ - # QUESTION: why do we need the 1st for loop? - # we're essentially setting the values in d, in the 2nd for loop (?) - - # first set default field values of base document - for key in default_fields: - if key in d: - self.set(key, d[key]) + # set name first, as it is used a reference in child document + if "name" in d: + self.name = d["name"] for key, value in d.items(): self.set(key, value) @@ -189,6 +185,7 @@ class BaseDocument(object): if isinstance(value, (dict, BaseDocument)): if not self.__dict__.get(key): self.__dict__[key] = [] + value = self._init_child(value, key) self.__dict__[key].append(value) @@ -225,6 +222,7 @@ class BaseDocument(object): def _init_child(self, value, key): if not self.doctype: return value + if not isinstance(value, BaseDocument): if "doctype" not in value or value['doctype'] is None: value["doctype"] = self.get_table_field_doctype(key)