diff options
| author | Aurélien Bompard <aurelien@bompard.org> | 2013-11-14 21:12:41 +0100 |
|---|---|---|
| committer | Aurélien Bompard <aurelien@bompard.org> | 2013-11-14 21:12:41 +0100 |
| commit | e48c22fbae981b790b395a9bc3fd62e4943d3aed (patch) | |
| tree | 2b3fc6bb91f81e3ffd0fd7412b4059ac1ddd4ffa | |
| parent | c2d1ecd5624db2c231809fbd77fe4bc52e1425ea (diff) | |
| download | kittystore-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.py | 8 | ||||
| -rw-r--r-- | kittystore/test/test_storm_store.py | 29 |
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) |
