Blob Blame History Raw
From 2f6f740610330b9541341ac5f4867c75639576ba Mon Sep 17 00:00:00 2001
From: clime <clime@redhat.com>
Date: Tue, 19 Jul 2016 14:26:52 +0200
Subject: [PATCH] auto_update class attribute added for AbstractWhoosheer

Decides if a whoosheer should be updated by whooshee.on_commit method.
---
 flask_whooshee.py |  4 ++++
 test.py           | 17 +++++++++++++++++
 3 files changed, 39 insertions(+)

diff --git a/flask_whooshee.py b/flask_whooshee.py
index 9367d21..b0d2bfb 100644
--- a/flask_whooshee.py
+++ b/flask_whooshee.py
@@ -128,6 +128,8 @@ class AbstractWhoosheer(object):
       searched.
     """
 
+    auto_update = True
+
     @classmethod
     def search(cls, search_string, values_of='', group=whoosh.qparser.OrGroup, match_substrings=True, limit=None):
         """Searches the fields for given search_string.
@@ -395,6 +397,8 @@ def on_commit(self, changes):
         to do the actual index writing.
         """
         for wh in self.whoosheers:
+            if not wh.auto_update:
+                continue
             writer = None
             for change in changes:
                 if change[0].__class__ in wh.models:
diff --git a/test.py b/test.py
index 65ea79c..103866f 100644
--- a/test.py
+++ b/test.py
@@ -117,6 +117,23 @@ def test_nothing_found(self):
             found = self.Entry.query.whooshee_search('not there!').all()
             self.assertEqual(len(found), 0)
 
+        def test_no_autoupdate(self):
+            for whoosheer in self.wh.whoosheers:
+                whoosheer.auto_update = False
+            self.db.session.add(self.u1)
+            self.db.session.commit()
+
+            found = self.Entry.query.whooshee_search('chuck').all()
+            self.assertEqual(len(found), 0) # nothing is found
+
+            for whoosheer in self.wh.whoosheers:
+                whoosheer.auto_update = True
+            self.db.session.add(self.u2)
+            self.db.session.commit()
+
+            found = self.Entry.query.whooshee_search('arnold').all()
+            self.assertEqual(len(found), 1) # arnold is found
+
         def test_mw_result_in_different_fields(self):
             self.db.session.add_all(self.all_inst)
             self.db.session.commit()