[z3-checkins] r5850 - z3/Five/branch/dc-experiments

dreamcatcher at codespeak.net dreamcatcher at codespeak.net
Mon Aug 2 22:21:26 MEST 2004


Author: dreamcatcher
Date: Mon Aug  2 22:21:25 2004
New Revision: 5850

Modified:
   z3/Five/branch/dc-experiments/api.py
   z3/Five/branch/dc-experiments/configure.zcml
   z3/Five/branch/dc-experiments/fivedirectives.py
   z3/Five/branch/dc-experiments/interfaces.py
   z3/Five/branch/dc-experiments/viewable.py
Log:
Factor out default view lookup into an adapter.

Modified: z3/Five/branch/dc-experiments/api.py
==============================================================================
--- z3/Five/branch/dc-experiments/api.py	(original)
+++ z3/Five/branch/dc-experiments/api.py	Mon Aug  2 22:21:25 2004
@@ -12,3 +12,4 @@
 """
 from browser import BrowserView, StandardMacros
 from traversable import Traversable
+from viewable import Viewable

Modified: z3/Five/branch/dc-experiments/configure.zcml
==============================================================================
--- z3/Five/branch/dc-experiments/configure.zcml	(original)
+++ z3/Five/branch/dc-experiments/configure.zcml	Mon Aug  2 22:21:25 2004
@@ -13,12 +13,20 @@
   <adapter
       for="*"
       factory=".traversable.FiveTraversable"
-      provides="zope.app.traversing.interfaces.ITraversable" />
+      provides="zope.app.traversing.interfaces.ITraversable"
+      />
 
   <adapter
       for="*"
       factory="zope.app.traversing.adapters.Traverser"
-      provides="zope.app.traversing.interfaces.ITraverser" />
+      provides="zope.app.traversing.interfaces.ITraverser"
+      />
+
+  <adapter
+      for="*"
+      factory=".viewable.BrowserDefault"
+      provides=".interfaces.IBrowserDefault"
+      />
 
   <browser:page
       for="*"

Modified: z3/Five/branch/dc-experiments/fivedirectives.py
==============================================================================
--- z3/Five/branch/dc-experiments/fivedirectives.py	(original)
+++ z3/Five/branch/dc-experiments/fivedirectives.py	Mon Aug  2 22:21:25 2004
@@ -36,9 +36,12 @@
         required=True
         )
 
-class IViewableDirective(ITraversableDirective):
-    """State that a class can be viewed.
-
-    Deprecated.
+class IViewableDirective(Interface):
+    """State that an instance class can be viewed directly by
+    choosing the default view through a IBrowserDefault adapter.
     """
+    class_ = GlobalObject(
+        title=u"Class",
+        required=True
+        )
 

Modified: z3/Five/branch/dc-experiments/interfaces.py
==============================================================================
--- z3/Five/branch/dc-experiments/interfaces.py	(original)
+++ z3/Five/branch/dc-experiments/interfaces.py	Mon Aug  2 22:21:25 2004
@@ -36,6 +36,15 @@
     def modified_in_version():
         """Was the object modified in this version?"""
 
+class IBrowserDefault(Interface):
+    """Provide a hook for deciding about the default view for an object"""
+
+    def defaultView(self, request):
+        """Return the object to be published
+        (usually self) and a sequence of names to traverse to
+        find the method to be published.
+        """
+
 class IAcquisitionWrapper(Interface):
 
     def acquire(name, filter=0, extra=None, expl=0, default=0,

Modified: z3/Five/branch/dc-experiments/viewable.py
==============================================================================
--- z3/Five/branch/dc-experiments/viewable.py	(original)
+++ z3/Five/branch/dc-experiments/viewable.py	Mon Aug  2 22:21:25 2004
@@ -16,6 +16,7 @@
 from zope.interface import implements
 from zope.publisher.interfaces.browser import IBrowserRequest
 from traversable import FakeRequest
+from interfaces import IBrowserDefault
 
 _marker = object
 
@@ -38,17 +39,16 @@
 
     # we have a default view, tell zpublisher to go there
     def __browser_default__(self, request):
-        name = None
+        obj = self
+        path = None
         try:
-            name = getDefaultViewName(self, request)
+            obj, path = IBrowserDefault(self).defaultView(request)
         except ComponentLookupError:
             pass
-        if name:
-            if name == '__call__':
-                return self, ('fallback_call__',)
-            view = self.unrestrictedTraverse([name])
-            if view is not None:
-                return self, (name,)
+        if path:
+            if len(path) == 1 and path[0] == '__call__':
+                return obj, ('fallback_call__',)
+            return obj, path
         return self.__fallback_default__(request)
     __browser_default__.__five_method__ = True
 
@@ -62,11 +62,26 @@
             request = getattr(self, 'REQUEST', None)
             if not IBrowserRequest.providedBy(request):
                 request = FakeRequest()
-        obj, name = self.__browser_default__(request)
-        if name:
-            name = name[0]
-            meth = obj.unrestrictedTraverse([name])
+        obj, path = self.__browser_default__(request)
+        if path:
+            meth = obj.unrestrictedTraverse(path)
             if meth is not None:
                 return meth(*args, **kw)
         return self.fallback_call__(*args, **kw)
     __call__.__five_method__ = True
+
+class BrowserDefault:
+
+    implements(IBrowserDefault)
+
+    def __init__(self, context):
+        self.context = context
+
+    def defaultView(self, request):
+        context = self.context
+        name = None
+        try:
+            name = getDefaultViewName(context, request)
+        except ComponentLookupError:
+            pass
+        return context, (name,)


More information about the z3-checkins mailing list