[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