[Checkins] SVN: Zope/branches/easter-sprint_traversal-refactor/lib/python/ZPublisher/BaseRequest.py Support for IDefaultViewName.

Lennart Regebro regebro at gmail.com
Thu Apr 27 08:49:23 EDT 2006


Log message for revision 67640:
  Support for IDefaultViewName.
  

Changed:
  U   Zope/branches/easter-sprint_traversal-refactor/lib/python/ZPublisher/BaseRequest.py

-=-
Modified: Zope/branches/easter-sprint_traversal-refactor/lib/python/ZPublisher/BaseRequest.py
===================================================================
--- Zope/branches/easter-sprint_traversal-refactor/lib/python/ZPublisher/BaseRequest.py	2006-04-27 12:30:38 UTC (rev 67639)
+++ Zope/branches/easter-sprint_traversal-refactor/lib/python/ZPublisher/BaseRequest.py	2006-04-27 12:49:22 UTC (rev 67640)
@@ -18,13 +18,17 @@
 import xmlrpc
 from zExceptions import Forbidden, Unauthorized
 
-from zope.interface import implements
+from zope.interface import implements, providedBy
 from zope.component import queryMultiAdapter
+from zope.component import getSiteManager
+from zope.component.interfaces import ComponentLookupError
 from zope.event import notify
 from zope.app.publication.interfaces import EndRequestEvent
 from zope.publisher.interfaces import IPublishTraverse
 from zope.publisher.interfaces import NotFound
+from zope.component.interfaces import IDefaultViewName
 from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.app.traversing.interfaces import TraversalError
 from zope.app.traversing.namespace import nsParse
 from zope.app.traversing.namespace import namespaceLookup
@@ -109,6 +113,20 @@
     def browserDefault(self, request):
         if hasattr(self.context, '__browser_default__'):
             return self.context.__browser_default__(request)
+        # Zope 3.2 still uses IDefaultView name when it
+        # registeres default views, even though it's
+        # deprecated. So we handle that here:
+        try:
+            sm = getSiteManager(self.context)
+        except ComponentLookupError:
+            # Context has no context (typically Application).
+            # Just look up the global site manager
+            sm = getSiteManager()
+        default_name = sm.adapters.lookup(
+            map(providedBy, (self.context, request)),
+            IDefaultViewName)
+        if default_name is not None:
+            return self.context, (default_name,)
         return self.context, ()
         
 
@@ -381,15 +399,17 @@
                     # BrowserDefault returns the object to be published
                     # (usually self) and a sequence of names to traverse to
                     # find the method to be published.
-                    if IBrowserPublisher.providedBy(object):
+                    if (IBrowserPublisher.providedBy(object) or 
+                        IDefaultViewName.providedBy(object)):
                         adapter = object
                     else:
-                        adapter = queryMultiAdapter((object, self), IBrowserPublisher)
+                        adapter = queryMultiAdapter((object, self), 
+                                                    IBrowserPublisher)
                         if adapter is None:
-                            ## Zope2 doesn't set up its own adapters in a lot of cases
-                            ## so we will just use a default adapter.
+                            # Zope2 doesn't set up its own adapters in a lot
+                            # of cases so we will just use a default adapter.
                             adapter = DefaultPublishTraverse(object, self)
-
+                    
                     newobject, default_path = adapter.browserDefault(self)
                     if default_path or newobject is not object:
                         object = newobject



More information about the Checkins mailing list