feat: Add decorator for redisearch
diff --git a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
index 36177ff..94560eb 100644
--- a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
+++ b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
@@ -48,7 +48,9 @@
"item_search_settings_section",
"search_index_fields",
"show_categories_in_search_autocomplete",
- "show_brand_line"
+ "show_brand_line",
+ "is_redisearch_loaded",
+ "redisearch"
],
"fields": [
{
@@ -328,12 +330,26 @@
"fieldname": "show_brand_line",
"fieldtype": "Check",
"label": "Show Brand Line"
+ },
+ {
+ "default": "0",
+ "fieldname": "is_redisearch_loaded",
+ "fieldtype": "Check",
+ "hidden": 1,
+ "label": "Is Redisearch Loaded"
+ },
+ {
+ "depends_on": "eval:doc.is_search_module_loaded",
+ "fieldname": "redisearch",
+ "fieldtype": "Heading",
+ "label": "Redisearch",
+ "options": "Some heading"
}
],
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2021-05-05 13:41:11.483232",
+ "modified": "2021-05-26 20:00:35.399936",
"modified_by": "Administrator",
"module": "E-commerce",
"name": "E Commerce Settings",
diff --git a/erpnext/e_commerce/website_item_indexing.py b/erpnext/e_commerce/website_item_indexing.py
index 134939c..3b82a32 100644
--- a/erpnext/e_commerce/website_item_indexing.py
+++ b/erpnext/e_commerce/website_item_indexing.py
@@ -10,6 +10,26 @@
TextField, TagField
)
+def is_search_module_loaded():
+ cache = frappe.cache()
+ out = cache.execute_command('MODULE LIST')
+
+ parsed_output = " ".join(
+ (" ".join([s.decode() for s in o if not isinstance(s, int)]) for o in out)
+ )
+
+ return "search" in parsed_output
+
+# Decorator for checking wether Redisearch is there or not
+def redisearch_decorator(function):
+ def wrapper(*args, **kwargs):
+ if is_search_module_loaded():
+ func = function(*args, **kwargs)
+ return func
+ return
+
+ return wrapper
+
def make_key(key):
return "{0}|{1}".format(frappe.conf.db_name, key).encode('utf-8')
@@ -28,6 +48,7 @@
'web_long_description'
}
+@redisearch_decorator
def create_website_items_index():
'''Creates Index Definition'''
# CREATE index
@@ -67,6 +88,7 @@
return TextField(field)
+@redisearch_decorator
def insert_item_to_index(website_item_doc):
# Insert item to index
key = get_cache_key(website_item_doc.name)
@@ -78,6 +100,7 @@
insert_to_name_ac(website_item_doc.web_item_name, website_item_doc.name)
+@redisearch_decorator
def insert_to_name_ac(web_name, doc_name):
ac = AutoCompleter(make_key(WEBSITE_ITEM_NAME_AUTOCOMPLETE), conn=frappe.cache())
ac.add_suggestions(Suggestion(web_name, payload=doc_name))
@@ -91,12 +114,14 @@
web_item[f] = website_item_doc.get(f) or ''
return web_item
-
+
+@redisearch_decorator
def update_index_for_item(website_item_doc):
# Reinsert to Cache
insert_item_to_index(website_item_doc)
define_autocomplete_dictionary()
+@redisearch_decorator
def delete_item_from_index(website_item_doc):
r = frappe.cache()
key = get_cache_key(website_item_doc.name)
@@ -110,12 +135,14 @@
return True
+@redisearch_decorator
def delete_from_ac_dict(website_item_doc):
'''Removes this items's name from autocomplete dictionary'''
r = frappe.cache()
name_ac = AutoCompleter(make_key(WEBSITE_ITEM_NAME_AUTOCOMPLETE), conn=r)
name_ac.delete(website_item_doc.web_item_name)
+@redisearch_decorator
def define_autocomplete_dictionary():
"""Creates an autocomplete search dictionary for `name`.
Also creats autocomplete dictionary for `categories` if
@@ -150,6 +177,7 @@
return True
+@redisearch_decorator
def reindex_all_web_items():
items = frappe.get_all(
'Website Item',