Log message for revision 110754: LP #143655: allow path index to be used for sorting.
Changed: U Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/PathIndex.py U Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py -=- Modified: Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/PathIndex.py =================================================================== --- Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/PathIndex.py 2010-04-12 16:42:49 UTC (rev 110753) +++ Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/PathIndex.py 2010-04-12 16:42:51 UTC (rev 110754) @@ -31,6 +31,7 @@ from Products.PluginIndexes.common import safe_callable from Products.PluginIndexes.common.util import parseIndexRequest from Products.PluginIndexes.interfaces import IPathIndex +from Products.PluginIndexes.interfaces import ISortIndex from Products.PluginIndexes.interfaces import IUniqueValueIndex LOG = getLogger('Zope.PathIndex') @@ -51,7 +52,7 @@ - the value is a mapping 'level of the path component' to 'all docids with this path component on this level' """ - implements(IPathIndex, IUniqueValueIndex) + implements(IPathIndex, IUniqueValueIndex, ISortIndex) meta_type="PathIndex" query_options = ('query', 'level', 'operator') @@ -213,6 +214,18 @@ for key in self._index.keys(): yield key + # ISortIndex implementation + + def keyForDocument(self, documentId): + """ See ISortIndex. + """ + return self._unindex.get(documentId) + + def documentToKeyMap(self): + """ See ISortIndex. + """ + return self._unindex + # Helper methods def _insertEntry(self, comp, id, level): Modified: Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py =================================================================== --- Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py 2010-04-12 16:42:49 UTC (rev 110753) +++ Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py 2010-04-12 16:42:51 UTC (rev 110754) @@ -83,6 +83,16 @@ from zope.interface.verify import verifyObject verifyObject(IUniqueValueIndex, self._makeOne()) + def test_class_conforms_to_ISortIndex(self): + from Products.PluginIndexes.interfaces import ISortIndex + from zope.interface.verify import verifyClass + verifyClass(ISortIndex, self._getTargetClass()) + + def test_instance_conforms_to_ISortIndex(self): + from Products.PluginIndexes.interfaces import ISortIndex + from zope.interface.verify import verifyObject + verifyObject(ISortIndex, self._makeOne()) + def test_class_conforms_to_IPathIndex(self): from Products.PluginIndexes.interfaces import IPathIndex from zope.interface.verify import verifyClass @@ -427,6 +437,25 @@ self.assertEqual(results['cc'], len([x for x in DUMMIES.values() if 'cc' in x.path])) + def test_keyForDocument_miss(self): + index = self._makeOne() + self.assertEqual(index.keyForDocument(1), None) + + def test_keyForDocument_hit(self): + index = self._makeOne() + _populateIndex(index) + self.assertEqual(index.keyForDocument(1), DUMMIES[1].path) + + def test_documentToKeyMap_empty(self): + index = self._makeOne() + self.assertEqual(dict(index.documentToKeyMap()), {}) + + def test_documentToKeyMap_filled(self): + index = self._makeOne() + _populateIndex(index) + self.assertEqual(dict(index.documentToKeyMap()), + dict([(k, v.path) for k, v in DUMMIES.items()])) + def test__search_empty_index_string_query(self): index = self._makeOne() self.assertEqual(list(index._search('/xxx')), []) _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins