[Checkins] SVN: z3c.traverser/trunk/src/z3c/traverser/viewlet/ some bugs fixed, not ready

Bernd Dorn bernd.dorn at lovelysystems.com
Wed Apr 18 13:20:35 EDT 2007


Log message for revision 74239:
  some bugs fixed, not ready

Changed:
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/configure.zcml
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py

-=-
Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py	2007-04-18 16:43:25 UTC (rev 74238)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py	2007-04-18 17:20:34 UTC (rev 74239)
@@ -1,11 +1,13 @@
 from zope.traversing.browser import absoluteurl
 import zope.component
 import urllib
+from zope.security.proxy import removeSecurityProxy
+from zope.publisher.browser import BrowserView
 
 class ViewletAbsoluteURL(absoluteurl.AbsoluteURL):
 
     def __str__(self):
-        context = self.context
+        context = removeSecurityProxy(self.context)
         request = self.request
 
         # The application URL contains all the namespaces that are at the
@@ -15,10 +17,8 @@
         container = getattr(context, 'manager', None)
         if container is None:
             raise TypeError(absoluteurl._insufficientContext)
-
         url = str(zope.component.getMultiAdapter((container, request),
                                                  name='absolute_url'))
-
         name = self._getContextName(context)
         if name is None:
             raise TypeError(absoluteurl._insufficientContext)
@@ -39,13 +39,35 @@
 
 class ViewletManagerAbsoluteURL(absoluteurl.AbsoluteURL):
 
+    def __str__(self):
+        context = self.context
+        request = self.request
+
+        container = getattr(context, '__parent__', None)
+        if container is None:
+            raise TypeError(absoluteurl._insufficientContext)
+        url = str(zope.component.getMultiAdapter((container, request),
+                                                 name='absolute_url'))
+        name = self._getContextName(context)
+        if name is None:
+            raise TypeError(absoluteurl._insufficientContext)
+
+        if name:
+            url += '/' + urllib.quote(name.encode('utf-8'),
+                                      absoluteurl._safe)
+
+        return url
+
+
     def _getContextName(self, context):
         name = super(ViewletManagerAbsoluteURL,
                      self)._getContextName(context)
         return u'++manager++' + name
 
-class ViewletView(object):
+    __call__ = __str__
 
+class ViewletView(BrowserView):
+
     def __call__(self):
         self.context.update()
         return self.context.render()

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/configure.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/configure.zcml	2007-04-18 16:43:25 UTC (rev 74238)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/configure.zcml	2007-04-18 17:20:34 UTC (rev 74239)
@@ -54,16 +54,31 @@
 
   <adapter
       name="manager"
-      provides="zope.traversing.interfaces.ITraversable" for="*"
+      provides="zope.traversing.interfaces.ITraversable"
+      for="zope.publisher.interfaces.browser.IBrowserView"
       factory=".namespace.ViewletManagerHandler"
   />
   
   <view
       name="manager"
       type="zope.interface.Interface"
-      provides="zope.traversing.interfaces.ITraversable" for="*"
+      provides="zope.traversing.interfaces.ITraversable"
+      for="zope.publisher.interfaces.browser.IBrowserView"
       factory=".namespace.ViewletManagerHandler"/>
 
+  <adapter
+      name="manager"
+      provides="zope.traversing.interfaces.ITraversable"
+      for="zope.viewlet.interfaces.IViewlet"
+      factory=".namespace.ViewletViewletManagerHandler"
+      />
+  
+  <view
+      name="manager"
+      type="zope.interface.Interface"
+      provides="zope.traversing.interfaces.ITraversable"
+      for="zope.viewlet.interfaces.IViewlet"
+      factory=".namespace.ViewletViewletManagerHandler"/>
 
   <adapter
       name="viewlet"
@@ -78,10 +93,19 @@
       factory=".namespace.ViewletHandler"
       />
 
+  <adapter
+      name="index.html"
+      for="zope.viewlet.interfaces.IViewlet
+           zope.publisher.interfaces.browser.IBrowserRequest"
+      permission="zope.Public"
+      provides="zope.publisher.interfaces.browser.IBrowserView"
+      factory=".browser.ViewletView"/>
+
+  <!--
   <browser:page
       for="zope.viewlet.interfaces.IViewlet"
       name="index.html"
       class=".browser.ViewletView"
       permission="zope.Public"/>
-  
+  -->
 </configure>
\ No newline at end of file

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py	2007-04-18 16:43:25 UTC (rev 74238)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py	2007-04-18 17:20:34 UTC (rev 74239)
@@ -3,6 +3,24 @@
 from zope.publisher.interfaces import NotFound
 from zope.viewlet.interfaces import IViewletManager
 
+
+class ViewletViewletManagerHandler(SimpleHandler):
+
+    def __init__(self, context, request=None):
+        self.context = context
+        self.request = request
+
+    def traverse(self, name, ignored):
+        context = self.context.__parent__.__parent__
+        provider = component.queryMultiAdapter(
+            (context, self.request, self.context),
+            IViewletManager, name)
+        if provider is None:
+            raise NotFound(self.context, name, self.request)
+        
+        return provider
+
+
 class ViewletManagerHandler(SimpleHandler):
 
     def __init__(self, context, request=None):
@@ -10,9 +28,9 @@
         self.request = request
 
     def traverse(self, name, ignored):
+        context = self.context.__parent__
         provider = component.queryMultiAdapter(
-            (self.context.__parent__,
-             self.request, self.context),
+            (context, self.request, self.context),
             IViewletManager, name)
         if provider is None:
             raise NotFound(self.context, name, self.request)



More information about the Checkins mailing list