From e2b9a38f283d7ac3a1f011d1a28e40c5e5d7d9ce Mon Sep 17 00:00:00 2001 From: marination Date: Thu, 2 Sep 2021 14:30:37 +0530 Subject: [PATCH] fix: Failing search util import and patch - Use simple function import instead of global variable to check if field is valid to index - Commit after every 20 items in patch to create web items from items --- .../e_commerce_settings.py | 8 +++++--- erpnext/e_commerce/redisearch.py | 3 --- erpnext/patches/v13_0/create_website_items.py | 19 ++++++++++++------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py index ece60d4ba6..1ff3152b57 100644 --- a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py +++ b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.py @@ -7,7 +7,7 @@ from frappe.utils import comma_and, flt from frappe import _, msgprint from frappe.model.document import Document from frappe.utils import unique -from erpnext.e_commerce.redisearch import create_website_items_index, ALLOWED_INDEXABLE_FIELDS_SET, is_search_module_loaded +from erpnext.e_commerce.redisearch import create_website_items_index, get_indexable_web_fields, is_search_module_loaded class ShoppingCartSetupError(frappe.ValidationError): pass @@ -57,8 +57,10 @@ class ECommerceSettings(Document): fields = unique(fields.strip(',').split(',')) # Remove extra ',' and remove duplicates # All fields should be indexable - if not (set(fields).issubset(ALLOWED_INDEXABLE_FIELDS_SET)): - invalid_fields = list(set(fields).difference(ALLOWED_INDEXABLE_FIELDS_SET)) + allowed_indexable_fields = get_indexable_web_fields() + + if not (set(fields).issubset(allowed_indexable_fields)): + invalid_fields = list(set(fields).difference(allowed_indexable_fields)) num_invalid_fields = len(invalid_fields) invalid_fields = comma_and(invalid_fields) diff --git a/erpnext/e_commerce/redisearch.py b/erpnext/e_commerce/redisearch.py index 9dac40fea2..d0626a3682 100644 --- a/erpnext/e_commerce/redisearch.py +++ b/erpnext/e_commerce/redisearch.py @@ -19,9 +19,6 @@ def get_indexable_web_fields(): return [df.fieldname for df in valid_fields] -ALLOWED_INDEXABLE_FIELDS_SET = get_indexable_web_fields() - - def is_search_module_loaded(): cache = frappe.cache() out = cache.execute_command('MODULE LIST') diff --git a/erpnext/patches/v13_0/create_website_items.py b/erpnext/patches/v13_0/create_website_items.py index a8bdc5c263..fa03962760 100644 --- a/erpnext/patches/v13_0/create_website_items.py +++ b/erpnext/patches/v13_0/create_website_items.py @@ -13,12 +13,12 @@ def execute(): item_table_fields = frappe.db.sql("desc `tabItem`", as_dict=1) item_table_fields = [d.get('Field') for d in item_table_fields] - # prepare fields to query from Item, check if the field exists in Item master + # prepare fields to query from Item, check if the web field exists in Item master web_query_fields = [] - for field in web_fields_to_map: - if field in item_table_fields: - web_query_fields.append(field) - item_fields.append(field) + for web_field in web_fields_to_map: + if web_field in item_table_fields: + web_query_fields.append(web_field) + item_fields.append(web_field) # check if the filter fields exist in Item master or_filters = {} @@ -37,6 +37,7 @@ def execute(): or_filters=or_filters ) + count = 0 for item in items: if frappe.db.exists("Website Item", {"item_code": item.item_code}): continue @@ -59,5 +60,9 @@ def execute(): parent = '{web_item}' where parenttype = 'Item' - and parent = '{item}' - """) \ No newline at end of file + and parent = '{item_code}' + """) + + count += 1 + if count % 20 == 0: # commit after every 20 items + frappe.db.commit()