feat: Add decorator for redisearch
This commit is contained in:
parent
b29c5d6e84
commit
bd0d0ad0de
@ -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",
|
||||
|
@ -10,6 +10,26 @@ from redisearch import (
|
||||
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 @@ ALLOWED_INDEXABLE_FIELDS_SET = {
|
||||
'web_long_description'
|
||||
}
|
||||
|
||||
@redisearch_decorator
|
||||
def create_website_items_index():
|
||||
'''Creates Index Definition'''
|
||||
# CREATE index
|
||||
@ -67,6 +88,7 @@ def to_search_field(field):
|
||||
|
||||
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 @@ def insert_item_to_index(website_item_doc):
|
||||
|
||||
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 @@ def create_web_item_map(website_item_doc):
|
||||
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 @@ def delete_item_from_index(website_item_doc):
|
||||
|
||||
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 @@ def define_autocomplete_dictionary():
|
||||
|
||||
return True
|
||||
|
||||
@redisearch_decorator
|
||||
def reindex_all_web_items():
|
||||
items = frappe.get_all(
|
||||
'Website Item',
|
||||
|
Loading…
x
Reference in New Issue
Block a user