[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