From 93051389b1cdf06fb379ff9d9bc70291fbbeca30 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Fri, 8 Apr 2022 01:54:40 +0530 Subject: [PATCH] fix: use `isinstance` instead of looping over `__dict__` --- frappe/model/meta.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/frappe/model/meta.py b/frappe/model/meta.py index c363e63f4f..5031f7f901 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -134,24 +134,23 @@ class Meta(Document): def as_dict(self, no_nulls=False): def serialize(doc): out = {} - for key in doc.__dict__: - value = doc.__dict__.get(key) - + for key, value in doc.__dict__.items(): if isinstance(value, (list, tuple)): - if len(value) > 0 and hasattr(value[0], "__dict__"): - value = [serialize(d) for d in value] - else: + if not value or not isinstance(value[0], BaseDocument): # non standard list object, skip continue - if isinstance(value, (str, int, float, datetime, list, tuple)) or ( - not no_nulls and value is None + value = [serialize(d) for d in value] + + if ( + isinstance(value, (str, int, float, datetime, list, tuple)) + or (not no_nulls and value is None) ): out[key] = value # set empty lists for unset table fields for table_field in DOCTYPE_TABLE_FIELDS: - if not out.get(table_field.fieldname): + if out.get(table_field.fieldname) is None: out[table_field.fieldname] = [] return out