summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-11-14 21:12:41 +0100
committerAurélien Bompard <aurelien@bompard.org>2013-11-14 21:12:41 +0100
commite48c22fbae981b790b395a9bc3fd62e4943d3aed (patch)
tree2b3fc6bb91f81e3ffd0fd7412b4059ac1ddd4ffa
parentc2d1ecd5624db2c231809fbd77fe4bc52e1425ea (diff)
downloadkittystore-e48c22fbae981b790b395a9bc3fd62e4943d3aed.tar.gz
kittystore-e48c22fbae981b790b395a9bc3fd62e4943d3aed.tar.xz
kittystore-e48c22fbae981b790b395a9bc3fd62e4943d3aed.zip
Add to the search engine after list properties have been updated
-rw-r--r--kittystore/storm/store.py8
-rw-r--r--kittystore/test/test_storm_store.py29
2 files changed, 34 insertions, 3 deletions
diff --git a/kittystore/storm/store.py b/kittystore/storm/store.py
index 75545b2..8f9b6e7 100644
--- a/kittystore/storm/store.py
+++ b/kittystore/storm/store.py
@@ -176,14 +176,16 @@ class StormStore(object):
for attachment in attachments:
self.add_attachment(list_name, msg_id, *attachment)
self.flush()
- # search indexing
- if self.search_index is not None:
- self.search_index.add(email)
# caching
if self._cache_manager is not None:
self._cache_manager.on_new_message(self, mlist, email)
if new_thread:
self._cache_manager.on_new_thread(self, mlist, thread)
+ # search indexing
+ # do it after caching because we need some list properties (like
+ # archive_policy)
+ if self.search_index is not None:
+ self.search_index.add(email)
return email.message_id_hash
diff --git a/kittystore/test/test_storm_store.py b/kittystore/test/test_storm_store.py
index 89bac7d..1d5221c 100644
--- a/kittystore/test/test_storm_store.py
+++ b/kittystore/test/test_storm_store.py
@@ -6,12 +6,16 @@
import unittest
import email
import datetime
+from shutil import rmtree
+from tempfile import mkdtemp
#from traceback import format_exc
from storm.exceptions import IntegrityError
#from storm.exceptions import DatabaseError
from mailman.email.message import Message
+from mailman.interfaces.archiver import ArchivePolicy
+from kittystore import get_store
from kittystore.storm import get_storm_store
from kittystore.storm.model import Email, Attachment, List, Thread
from kittystore.utils import get_message_id_hash
@@ -230,3 +234,28 @@ class TestStormStore(unittest.TestCase):
# "From header not decoded: %s" % msg.sender)
# self.failIf("=?" in msg.subject,
# "Subject header not decoded: %s" % msg.sender)
+
+
+class TestStormStoreWithSearch(unittest.TestCase):
+
+ def setUp(self):
+ self.tmpdir = mkdtemp(prefix="kittystore-testing-")
+ settings = SettingsModule()
+ settings.KITTYSTORE_SEARCH_INDEX = self.tmpdir
+ self.store = get_store(settings, auto_create=True)
+
+ def tearDown(self):
+ self.store.close()
+ rmtree(self.tmpdir)
+
+ def test_private_list(self):
+ # emails on private lists must not be found by a search on all lists
+ ml = FakeList("example-list")
+ ml.archive_policy = ArchivePolicy.private
+ msg = Message()
+ msg["From"] = "dummy@example.com"
+ msg["Message-ID"] = "<dummy>"
+ msg.set_payload("Dummy message")
+ self.store.add_to_list(ml, msg)
+ result = self.store.search("dummy")
+ self.assertEqual(result["total"], 0)