diff --git a/substanced/catalog/subscribers.py b/substanced/catalog/subscribers.py index ef281589..d7d58f4a 100644 --- a/substanced/catalog/subscribers.py +++ b/substanced/catalog/subscribers.py @@ -1,3 +1,4 @@ +import BTrees from zope.interface import Interface from pyramid.events import subscriber @@ -33,9 +34,8 @@ def object_will_be_removed(obj, event): if objectmap is None or catalog is None: return objectids = objectmap.pathlookup(obj) - for oid in objectids: - if oid in catalog.objectids: - catalog.unindex_doc(oid) + for oid in BTrees.family32.IF.intersection(objectids, catalog.objectids): + catalog.unindex_doc(oid) @subscriber([Interface, IObjectModifiedEvent]) def object_modified(obj, event): diff --git a/substanced/catalog/tests/test_subscribers.py b/substanced/catalog/tests/test_subscribers.py index 141dd876..033aea22 100644 --- a/substanced/catalog/tests/test_subscribers.py +++ b/substanced/catalog/tests/test_subscribers.py @@ -1,11 +1,10 @@ import unittest +import BTrees from zope.interface import alsoProvides from pyramid import testing -from pyramid.traversal import resource_path_tuple - def _makeSite(**kw): from ...interfaces import IFolder site = testing.DummyResource(__provides__=kw.pop('__provides__', None)) @@ -75,7 +74,7 @@ def test_no_catalog(self): def test_with_pathlookup(self): model = testing.DummyResource() catalog = DummyCatalog() - catalog.objectids = [1,2] + catalog.objectids = BTrees.family32.IF.Set([1,2]) objectmap = DummyObjectMap() site = _makeSite(objectmap=objectmap, catalog=catalog) site['model'] = model @@ -87,7 +86,7 @@ def test_with_pathlookup(self): def test_with_pathlookup_limited_by_objectids(self): model = testing.DummyResource() catalog = DummyCatalog() - catalog.objectids = [1] + catalog.objectids = BTrees.family32.IF.Set([1]) objectmap = DummyObjectMap() site = _makeSite(objectmap=objectmap, catalog=catalog) site['model'] = model @@ -154,7 +153,7 @@ def reindex_doc(self, objectid, obj): class DummyObjectMap: def pathlookup(self, obj): - return [1,2] + return BTrees.family32.IF.Set([1,2]) class DummyEvent(object): def __init__(self, parent):