From 8a30667a97992784c8681949c1c92ff6ef902ba2 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 12 Jun 2023 14:59:42 +0530 Subject: [PATCH] fix: Fetch non-cached version of Meta on Customize Form. (#21269) * fix: Replace meta cache when uncached meta is requested * fix: use meta from DB on customize form * refactor: make cached kw only, use _dev_server --- frappe/desk/form/load.py | 2 +- frappe/desk/form/meta.py | 12 +++++++----- frappe/model/meta.py | 8 +++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 42109f8863..9e7e818cf0 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -80,7 +80,7 @@ def get_meta_bundle(doctype): bundle = [frappe.desk.form.meta.get_meta(doctype)] for df in bundle[0].fields: if df.fieldtype in frappe.model.table_fields: - bundle.append(frappe.desk.form.meta.get_meta(df.options, not frappe.conf.developer_mode)) + bundle.append(frappe.desk.form.meta.get_meta(df.options)) return bundle diff --git a/frappe/desk/form/meta.py b/frappe/desk/form/meta.py index 580e8d5102..4f664658ad 100644 --- a/frappe/desk/form/meta.py +++ b/frappe/desk/form/meta.py @@ -34,12 +34,14 @@ ASSET_KEYS = ( ) -def get_meta(doctype, cached=True): +def get_meta(doctype, cached=True) -> "FormMeta": # don't cache for developer mode as js files, templates may be edited - if cached and not frappe.conf.developer_mode: + cached = cached and not frappe._dev_server + if cached: meta = frappe.cache.hget("doctype_form_meta", doctype) if not meta: - meta = FormMeta(doctype) + # Cache miss - explicitly get meta from DB to avoid + meta = FormMeta(doctype, cached=False) frappe.cache.hset("doctype_form_meta", doctype, meta) else: meta = FormMeta(doctype) @@ -51,8 +53,8 @@ def get_meta(doctype, cached=True): class FormMeta(Meta): - def __init__(self, doctype): - self.__dict__.update(frappe.get_meta(doctype).__dict__) + def __init__(self, doctype, *, cached=True): + self.__dict__.update(frappe.get_meta(doctype, cached=cached).__dict__) self.load_assets() def load_assets(self): diff --git a/frappe/model/meta.py b/frappe/model/meta.py index d97146c480..83c21f8502 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -56,14 +56,12 @@ DEFAULT_FIELD_LABELS = { def get_meta(doctype, cached=True) -> "Meta": - if not cached: - return Meta(doctype) - - if meta := frappe.cache.hget("doctype_meta", doctype): + cached = cached and isinstance(doctype, str) + if cached and (meta := frappe.cache.hget("doctype_meta", doctype)): return meta meta = Meta(doctype) - frappe.cache.hset("doctype_meta", doctype, meta) + frappe.cache.hset("doctype_meta", meta.name, meta) return meta