From 91092be410aa0a09b90e5491eb4cf6413d5875da Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Mon, 3 Oct 2022 17:28:24 +0200
Subject: [PATCH] allows to disable auto indexing, provide a basic in-memory
 storage for get_setting_from_storage/set_setting_in_storage

---
 autocomplete_multi_models/business_process.py | 8 ++++++--
 autocomplete_multi_models/signals.py          | 3 ++-
 autocomplete_multi_models/utils.py            | 1 +
 setup.cfg                                     | 2 +-
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/autocomplete_multi_models/business_process.py b/autocomplete_multi_models/business_process.py
index b86026a..5cb7b00 100644
--- a/autocomplete_multi_models/business_process.py
+++ b/autocomplete_multi_models/business_process.py
@@ -15,14 +15,18 @@ _AUTOCOMPLETE_MIN_LENGTH = utils.DEFAULT_AUTOCOMPLETE_MIN_LENGTH
 _AUTOCOMPLETE_MIN_SIMILARITY = utils.DEFAULT_AUTOCOMPLETE_MIN_SIMILARITY
 _AUTOCOMPLETE_LIMIT = utils.DEFAULT_AUTOCOMPLETE_LIMIT
 _CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME = utils.DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME
+__in_mem_storage = {
+    utils.AUTO_UPDATE_ENABLED: True,
+    utils.REBUILD_NEEDED: True,
+}
 
 
 def get_setting_from_storage(key, default):
-    return key == utils.REBUILD_NEEDED
+    return __in_mem_storage.get(key, default)
 
 
 def set_setting_in_storage(key, value):
-    pass
+    __in_mem_storage[key] = value
 
 
 def split_string(value):
diff --git a/autocomplete_multi_models/signals.py b/autocomplete_multi_models/signals.py
index 42d6b1d..6f9ff42 100644
--- a/autocomplete_multi_models/signals.py
+++ b/autocomplete_multi_models/signals.py
@@ -2,7 +2,8 @@ from autocomplete_multi_models import business_process, utils
 
 
 def instance_update(sender, instance, field_names, **kwargs):
-    business_process.add_instance_to_index(instance, field_names)
+    if business_process.get_setting_from_storage(utils.AUTO_UPDATE_ENABLED, True):
+        business_process.add_instance_to_index(instance, field_names)
 
 
 def instance_delete(sender, instance, field_names, **kwargs):
diff --git a/autocomplete_multi_models/utils.py b/autocomplete_multi_models/utils.py
index 456bc4f..e01972e 100644
--- a/autocomplete_multi_models/utils.py
+++ b/autocomplete_multi_models/utils.py
@@ -7,6 +7,7 @@ DEFAULT_AUTOCOMPLETE_MIN_SIMILARITY = 0.3
 DEFAULT_AUTOCOMPLETE_LIMIT = 10
 REBUILD_NEEDED = "is_autocomplete_multi_models_rebuild_needed"
 DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME = "can_be_indexed_by_autocomplete"
+AUTO_UPDATE_ENABLED = "is_autocomplete_auto_update_on_save_enabled"
 
 
 def get_indexed_fields():
diff --git a/setup.cfg b/setup.cfg
index 6a9b154..786e0ba 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = autocomplete-multi-models
-version = 0.2
+version = 0.3
 description = An app that index fields across multiple models, and expose an api to query for word similar to the query.
 long_description = file: README.md
 author = Bryan Brancotte
-- 
GitLab