refactor: Use @cached_property instead of implmenting it
This commit is contained in:
parent
b3859d9fa3
commit
e6bad301b8
2 changed files with 44 additions and 33 deletions
|
|
@ -798,10 +798,12 @@ class TestDocType(IntegrationTestCase):
|
|||
|
||||
def test_meta_serialization(self):
|
||||
doctype = new_doctype(
|
||||
fields=[{"fieldname": "some_fieldname", "fieldtype": "Data", "set_only_once": 1}]
|
||||
fields=[{"fieldname": "some_fieldname", "fieldtype": "Data", "set_only_once": 1}],
|
||||
is_submittable=1,
|
||||
).insert()
|
||||
doc = frappe.new_doc(doctype.name, some_fieldname="something").insert()
|
||||
doc.save()
|
||||
doc.submit()
|
||||
frappe.get_meta(doctype.name).as_dict()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import json
|
|||
import os
|
||||
import typing
|
||||
from datetime import datetime
|
||||
from functools import singledispatchmethod
|
||||
from functools import cached_property, singledispatchmethod
|
||||
from types import NoneType
|
||||
|
||||
import click
|
||||
|
|
@ -238,16 +238,19 @@ class Meta(Document):
|
|||
|
||||
def get_set_only_once_fields(self):
|
||||
"""Return fields with `set_only_once` set"""
|
||||
if not hasattr(self, "_set_only_once_fields"):
|
||||
self._set_only_once_fields = self.get("fields", {"set_only_once": 1})
|
||||
fieldnames = [d.fieldname for d in self._set_only_once_fields]
|
||||
|
||||
for df in self.standard_set_once_fields:
|
||||
if df.fieldname not in fieldnames:
|
||||
self._set_only_once_fields.append(df)
|
||||
|
||||
return self._set_only_once_fields
|
||||
|
||||
@cached_property
|
||||
def _set_only_once_fields(self):
|
||||
set_only_once_fields = self.get("fields", {"set_only_once": 1})
|
||||
fieldnames = [d.fieldname for d in set_only_once_fields]
|
||||
|
||||
for df in self.standard_set_once_fields:
|
||||
if df.fieldname not in fieldnames:
|
||||
set_only_once_fields.append(df)
|
||||
|
||||
return set_only_once_fields
|
||||
|
||||
def get_table_fields(self):
|
||||
return self._table_fields
|
||||
|
||||
|
|
@ -260,34 +263,40 @@ class Meta(Document):
|
|||
return fields
|
||||
|
||||
def get_valid_columns(self) -> list[str]:
|
||||
if not hasattr(self, "_valid_columns"):
|
||||
table_exists = frappe.db.table_exists(self.name)
|
||||
if self.name in self.special_doctypes and table_exists:
|
||||
self._valid_columns = get_table_columns(self.name)
|
||||
else:
|
||||
self._valid_columns = self.default_fields + [
|
||||
df.fieldname
|
||||
for df in self.get("fields")
|
||||
if not df.get("is_virtual") and df.fieldtype in data_fieldtypes
|
||||
]
|
||||
if self.istable:
|
||||
self._valid_columns += list(child_table_fields)
|
||||
|
||||
return self._valid_columns
|
||||
|
||||
def get_valid_fields(self) -> list[str]:
|
||||
if not hasattr(self, "_valid_fields"):
|
||||
if (frappe.flags.in_install or frappe.flags.in_migrate) and self.name in self.special_doctypes:
|
||||
self._valid_fields = get_table_columns(self.name)
|
||||
else:
|
||||
self._valid_fields = self.default_fields + [
|
||||
df.fieldname for df in self.get("fields") if df.fieldtype in data_fieldtypes
|
||||
]
|
||||
if self.istable:
|
||||
self._valid_fields += list(child_table_fields)
|
||||
@cached_property
|
||||
def _valid_columns(self):
|
||||
table_exists = frappe.db.table_exists(self.name)
|
||||
if self.name in self.special_doctypes and table_exists:
|
||||
valid_columns = get_table_columns(self.name)
|
||||
else:
|
||||
valid_columns = self.default_fields + [
|
||||
df.fieldname
|
||||
for df in self.get("fields")
|
||||
if not df.get("is_virtual") and df.fieldtype in data_fieldtypes
|
||||
]
|
||||
if self.istable:
|
||||
valid_columns += list(child_table_fields)
|
||||
|
||||
return valid_columns
|
||||
|
||||
def get_valid_fields(self) -> list[str]:
|
||||
return self._valid_fields
|
||||
|
||||
@cached_property
|
||||
def _valid_fields(self):
|
||||
if (frappe.flags.in_install or frappe.flags.in_migrate) and self.name in self.special_doctypes:
|
||||
valid_fields = get_table_columns(self.name)
|
||||
else:
|
||||
valid_fields = self.default_fields + [
|
||||
df.fieldname for df in self.get("fields") if df.fieldtype in data_fieldtypes
|
||||
]
|
||||
if self.istable:
|
||||
valid_fields += list(child_table_fields)
|
||||
|
||||
return valid_fields
|
||||
|
||||
def get_table_field_doctype(self, fieldname):
|
||||
return TABLE_DOCTYPES_FOR_DOCTYPE.get(fieldname)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue