[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