[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/ LP #143655: allow path index to be used for sorting.

Tres Seaver tseaver at palladion.com
Mon Apr 12 12:42:51 EDT 2010


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')), [])



More information about the Zope-Checkins mailing list