[Checkins] SVN: Zope/trunk/ Deprecate Products.ZCatalog's current behavior of returning the entire catalog content if no query restriction applied. In Zope 2.14 this will result in an empty LazyCat to be returned instead.

Hanno Schlichting hannosch at hannosch.eu
Sun Jul 25 06:58:19 EDT 2010


Log message for revision 115072:
  Deprecate Products.ZCatalog's current behavior of returning the entire catalog content if no query restriction applied. In Zope 2.14 this will result in an empty LazyCat to be returned instead.
  

Changed:
  U   Zope/trunk/doc/CHANGES.rst
  U   Zope/trunk/src/Products/ZCatalog/Catalog.py
  U   Zope/trunk/src/Products/ZCatalog/tests/testCatalog.py

-=-
Modified: Zope/trunk/doc/CHANGES.rst
===================================================================
--- Zope/trunk/doc/CHANGES.rst	2010-07-25 10:38:24 UTC (rev 115071)
+++ Zope/trunk/doc/CHANGES.rst	2010-07-25 10:58:18 UTC (rev 115072)
@@ -35,6 +35,10 @@
 Restructuring
 +++++++++++++
 
+- Deprecate Products.ZCatalog's current behavior of returning the entire
+  catalog content if no query restriction applied. In Zope 2.14 this will
+  result in an empty LazyCat to be returned instead.
+
 - Deprecate acquiring the request inside Products.ZCatalog's searchResults
   method if no explicit query argument is given.
 

Modified: Zope/trunk/src/Products/ZCatalog/Catalog.py
===================================================================
--- Zope/trunk/src/Products/ZCatalog/Catalog.py	2010-07-25 10:38:24 UTC (rev 115071)
+++ Zope/trunk/src/Products/ZCatalog/Catalog.py	2010-07-25 10:58:18 UTC (rev 115072)
@@ -30,6 +30,7 @@
 from Lazy import LazyMap, LazyCat, LazyValues
 from CatalogBrains import AbstractCatalogBrain, NoBrainer
 from .report import CatalogReport
+from .report import make_key
 
 
 LOG = logging.getLogger('Zope.ZCatalog')
@@ -531,6 +532,12 @@
             # None of the indexes found anything to do with the query
             # We take this to mean that the query was empty (an empty filter)
             # and so we return everything in the catalog
+            warnings.warn('Your query %s produced no query restriction. '
+                          'Currently the entire catalog content is returned. '
+                          'In Zope 2.14 this will result in an empty LazyCat '
+                          'to be returned.' % repr(make_key(self, query)),
+                          DeprecationWarning, stacklevel=3)
+
             if sort_index is None:
                 return LazyMap(self.instantiate, self.data.items(), len(self))
             else:
@@ -775,7 +782,7 @@
                           'keyword arguments is deprecated. In Zope 2.14 the '
                           'query will no longer be automatically taken from '
                           'the acquired request.',
-                          DeprecationWarning, stacklevel=2)
+                          DeprecationWarning, stacklevel=3)
             REQUEST = getattr(self, 'REQUEST', None)
         if isinstance(REQUEST, dict) and not kw:
             # short cut for the best practice

Modified: Zope/trunk/src/Products/ZCatalog/tests/testCatalog.py
===================================================================
--- Zope/trunk/src/Products/ZCatalog/tests/testCatalog.py	2010-07-25 10:38:24 UTC (rev 115071)
+++ Zope/trunk/src/Products/ZCatalog/tests/testCatalog.py	2010-07-25 10:58:18 UTC (rev 115072)
@@ -11,12 +11,10 @@
 #
 ##############################################################################
 """ Unittests for Catalog.
-
-$Id$
 """
 
 import unittest
-import Testing
+from Testing.ZopeTestCase.warnhook import WarningsHook
 import Zope2
 Zope2.startup()
 
@@ -78,9 +76,12 @@
 class CatalogBase:
     def setUp(self):
         self._catalog = Catalog()
+        self.warningshook = WarningsHook()
+        self.warningshook.install()
 
     def tearDown(self):
         self._catalog = None
+        self.warningshook.uninstall()
 
 class TestAddDelColumn(CatalogBase,unittest.TestCase):
     def testAdd(self):
@@ -89,7 +90,6 @@
                          'add column failed')
 
     def testAddBad(self):
-        from Products.ZCatalog.Catalog import CatalogError
         self.assertRaises(CatalogError, self._catalog.addColumn, '_id')
 
     def testDel(self):
@@ -199,6 +199,9 @@
 
     def setUp(self):
         from Products.ZCatalog.ZCatalog import ZCatalog
+        self.warningshook = WarningsHook()
+        self.warningshook.install()
+
         self._catalog = ZCatalog('Catalog')
         self._catalog.resolve_path = self._resolve_num
         self._catalog.addIndex('title', 'KeywordIndex')
@@ -212,7 +215,10 @@
             ob = zdummy(x)
             self.d[str(x)] = ob
             self._catalog.catalog_object(ob, str(x))
-        
+
+    def tearDown(self):
+        self.warningshook.uninstall()
+
     def _resolve_num(self, num):
         return self.d[num]
 
@@ -343,6 +349,9 @@
         nums[j] = tmp
 
     def setUp(self):
+        self.warningshook = WarningsHook()
+        self.warningshook.install()
+
         self._catalog = Catalog()
         self._catalog.lexicon = PLexicon('lexicon')
         col1 = FieldIndex('col1')
@@ -378,6 +387,7 @@
 
     def tearDown(self):
         self._catalog = None
+        self.warningshook.uninstall()
 
     def testResultLength(self):
         a = self._catalog()
@@ -595,6 +605,8 @@
     # Test merging results from multiple catalogs
 
     def setUp(self):
+        self.warningshook = WarningsHook()
+        self.warningshook.install()
         self.catalogs = []
         for i in range(3):
             cat = Catalog()
@@ -611,6 +623,9 @@
                 cat.catalogObject(obj, str(i))
             self.catalogs.append(cat)
 
+    def tearDown(self):
+        self.warningshook.uninstall()
+
     def testNoFilterOrSort(self):
         from Products.ZCatalog.Catalog import mergeResults
         results = [cat.searchResults(_merge=0) for cat in self.catalogs]
@@ -690,6 +705,8 @@
 
     def setUp(self):
         from Products.ZCatalog.ZCatalog import ZCatalog
+        self.warningshook = WarningsHook()
+        self.warningshook.install()
         catalog = ZCatalog('catalog')
         catalog.addIndex('id', 'FieldIndex')
         root = Folder('')
@@ -698,10 +715,11 @@
         self.root.catalog = catalog
 
     def tearDown(self):
+        self.warningshook.uninstall()
         noSecurityManager()
         if self._old_flag is not None:
             self._restore_getObject_flag()
-    
+
     def _init_getObject_flag(self, flag):
         from Products.ZCatalog import CatalogBrains
         self._old_flag = CatalogBrains.GETOBJECT_RAISES
@@ -736,7 +754,6 @@
     def test_getObject_restricted_raises_Unauthorized(self):
         # Check that if the object's security does not allow traversal,
         # None is returned
-        from zExceptions import NotFound
         self._init_getObject_flag(True)
         root = self.root
         catalog = root.catalog



More information about the checkins mailing list