[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - give catalog brains the acquisition context they expect (I'm not happy with this hack, but at least it seems to work)
Yvo Schubbe
y.2011 at wcm-solutions.de
Mon Sep 19 03:59:23 EST 2011
Log message for revision 122834:
- give catalog brains the acquisition context they expect (I'm not happy with this hack, but at least it seems to work)
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-19 06:40:33 UTC (rev 122833)
+++ Products.CMFCore/trunk/Products/CMFCore/CatalogTool.py 2011-09-19 08:59:22 UTC (rev 122834)
@@ -17,6 +17,8 @@
from AccessControl.SecurityInfo import ClassSecurityInfo
from AccessControl.SecurityManagement import getSecurityManager
from Acquisition import aq_base
+from Acquisition import aq_chain
+from Acquisition import aq_parent
from App.class_init import InitializeClass
from App.special_dtml import DTMLFile
from DateTime.DateTime import DateTime
@@ -247,15 +249,26 @@
If you're in doubt if you should use this method or
'searchResults' use the latter.
"""
+ # XXX: catalog brains use self.REQUEST in getURL
# 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)
+ mod_self = RequestContainer(REQUEST=real_request)
+ for item in reversed(aq_chain(self)):
+ if getattr(item, '__of__', None) is not None:
+ mod_self = item.__of__(mod_self)
else:
mod_self = self
return ZCatalog.searchResults(mod_self, REQUEST, **kw)
+ def getPhysicalRoot(self):
+ # XXX: catalog brains use getPhysicalRoot for wrapping objects
+ app = aq_parent(self).getPhysicalRoot()
+ request = getRequest()
+ if request is not None and getattr(app, '__of__', None) is not None:
+ app = app.__of__(RequestContainer(REQUEST=request))
+ return app
+
def __url(self, ob):
return '/'.join( ob.getPhysicalPath() )
Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py 2011-09-19 06:40:33 UTC (rev 122833)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_CatalogTool.py 2011-09-19 08:59:22 UTC (rev 122834)
@@ -480,6 +480,7 @@
self.assertEqual('/dummy', brain.getPath())
self.assertEqual('http://nohost/dummy', brain.getURL())
self.assertEqual(site.dummy, brain.getObject())
+ self.assertTrue(hasattr(brain.getObject(), 'REQUEST'))
def test_refreshCatalog(self):
site = DummySite('site')
More information about the checkins
mailing list