[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - fixed searchResults (the getURL method of brains expects self.REQUEST is available)

Yvo Schubbe y.2011 at wcm-solutions.de
Sat Sep 17 03:36:49 EST 2011


Log message for revision 122828:
  - fixed searchResults (the getURL method of brains expects self.REQUEST is available)

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CatalogTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CatalogTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CatalogTool.py	2011-09-16 13:48:27 UTC (rev 122827)
+++ Products.CMFCore/trunk/Products/CMFCore/CatalogTool.py	2011-09-17 08:36:47 UTC (rev 122828)
@@ -25,11 +25,13 @@
 from zope.component import adapts
 from zope.component import queryMultiAdapter
 from zope.component import queryUtility
+from zope.globalrequest import getRequest
 from zope.interface import implements
 from zope.interface import providedBy
 from zope.interface.declarations import getObjectSpecification
 from zope.interface.declarations import ObjectSpecification
 from zope.interface.declarations import ObjectSpecificationDescriptor
+from ZPublisher.BaseRequest import RequestContainer
 
 from Products.CMFCore.ActionProviderBase import ActionProviderBase
 from Products.CMFCore.interfaces import ICatalogTool
@@ -228,7 +230,7 @@
                     range = 'min:max'
                 kw[k] = {'query': query, 'range': range}
 
-        return ZCatalog.searchResults(self, REQUEST, **kw)
+        return self.unrestrictedSearchResults(REQUEST, **kw)
 
     __call__ = searchResults
 
@@ -245,7 +247,14 @@
         If you're in doubt if you should use this method or
         'searchResults' use the latter.
         """
-        return ZCatalog.searchResults(self, REQUEST, **kw)
+        # usually the REQUEST argument is no request, so we always look it up
+        real_request = getRequest()
+        if real_request is not None:
+            request_container = RequestContainer(REQUEST=real_request)
+            mod_self = self.__of__(request_container)
+        else:
+            mod_self = self
+        return ZCatalog.searchResults(mod_self, REQUEST, **kw)
 
     def __url(self, ob):
         return '/'.join( ob.getPhysicalPath() )
@@ -256,8 +265,6 @@
                        pghandler=None):
         # Wraps the object with workflow and accessibility
         # information just before cataloging.
-        # XXX: this method violates the rules for tools/utilities:
-        # it depends on a non-utility tool
         if IIndexableObject.providedBy(obj):
             w = obj
         else:
@@ -304,5 +311,4 @@
         self.catalog_object(object, uid, idxs, update_metadata)
 
 InitializeClass(CatalogTool)
-# XXX: fix this
-# registerToolInterface('portal_catalog', ICatalogTool)
+registerToolInterface('portal_catalog', ICatalogTool)

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py	2011-09-16 13:48:27 UTC (rev 122827)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py	2011-09-17 08:36:47 UTC (rev 122828)
@@ -17,6 +17,8 @@
 
 from Acquisition import Implicit
 from zope.component import getSiteManager
+from zope.globalrequest import clearRequest
+from zope.globalrequest import setRequest
 from zope.interface import implements
 from zope.testing.cleanup import cleanUp
 
@@ -25,6 +27,7 @@
 from Products.CMFCore.interfaces import IIndexableObject
 from Products.CMFCore.interfaces import IWorkflowTool
 from Products.CMFCore.tests.base.dummy import DummyContent
+from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.testcase import SecurityTest
 
 
@@ -65,10 +68,8 @@
         return IndexableObjectWrapper
 
     def _makeOne(self, vars, obj):
-        self.app = FakeFolder()
-        self.app.portal_catalog = FakeCatalog()
         getSiteManager().registerUtility(FakeWorkflowTool(vars), IWorkflowTool)
-        catalog = self.app.portal_catalog
+        catalog = FakeCatalog().__of__(FakeFolder())
         return self._getTargetClass()(obj, catalog)
 
     def _makeContent(self, *args, **kw):
@@ -464,9 +465,24 @@
         self.assertEqual(kw, {'expires':
                               {'query': (5, 7), 'range': 'min:max'}})
 
+    def test_searchResults_brain(self):
+        site = DummySite('site')
+        site._setObject('dummy', self._makeContent(catalog=1))
+        ctool = self._makeOne().__of__(site)
+        ctool.addIndex('meta_type', 'FieldIndex')
+        ctool.catalog_object(site.dummy, '/dummy')
+
+        query = {'meta_type': 'Dummy'}
+        setRequest(self.REQUEST)
+        brain = ctool.searchResults(query)[0]
+        clearRequest()
+
+        self.assertEqual('/dummy', brain.getPath())
+        self.assertEqual('http://nohost/dummy', brain.getURL())
+        self.assertEqual(site.dummy, brain.getObject())
+
     def test_refreshCatalog(self):
-        from Products.CMFCore.tests.base.dummy import DummySite
-        site = DummySite('site').__of__(self.app)
+        site = DummySite('site')
         site._setObject('dummy', self._makeContent(catalog=1))
         ctool = self._makeOne().__of__(site)
         ctool.addIndex('meta_type', 'FieldIndex')



More information about the checkins mailing list