Przeglądaj źródła

Merge pull request #16449 from resilient-tech/refactor-_dict

refactor!: improved `frappe._dict`
version-14
mergify[bot] 3 lat temu
committed by GitHub
rodzic
commit
5f0a95f8bd
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 16 dodań i 24 usunięć
  1. +9
    -15
      frappe/__init__.py
  2. +7
    -9
      frappe/model/meta.py

+ 9
- 15
frappe/__init__.py Wyświetl plik

@@ -55,29 +55,23 @@ controllers = {}
class _dict(dict):
"""dict like object that exposes keys as attributes"""

def __getattr__(self, key):
ret = self.get(key)
# "__deepcopy__" exception added to fix frappe#14833 via DFP
if not ret and key.startswith("__") and key != "__deepcopy__":
raise AttributeError()
return ret

def __setattr__(self, key, value):
self[key] = value
__slots__ = ()
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
__setstate__ = dict.update

def __getstate__(self):
return self

def __setstate__(self, d):
self.update(d)

def update(self, d):
def update(self, *args, **kwargs):
"""update and return self -- the missing dict feature in python"""
super(_dict, self).update(d)

super().update(*args, **kwargs)
return self

def copy(self):
return _dict(dict(self).copy())
return _dict(self)


def _(msg, lang=None, context=None):


+ 7
- 9
frappe/model/meta.py Wyświetl plik

@@ -134,24 +134,22 @@ 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 (not no_nulls and value is None) or isinstance(
value, (str, int, float, datetime, list, tuple)
):
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


Ładowanie…
Anuluj
Zapisz