[Checkins] SVN: z3c.traverser/trunk/ - bugfix: if viewlet and managers get nested a viewlet was not found if

Bernd Roessl bernd.roessl at lovelysystems.com
Thu Nov 29 09:05:37 EST 2007


Log message for revision 82026:
  - bugfix: if viewlet and managers get nested a viewlet was not found if
    the depth reaches 3 because the context was set to the page and not
    to the context object
  - bugfix: replaced call to _getContextName because it has been removed from
    absoluteURL
  
  

Changed:
  U   z3c.traverser/trunk/CHANGES.txt
  U   z3c.traverser/trunk/setup.py
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/BROWSER.txt
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/README.txt
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py
  U   z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/app.py
  A   z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/inner.pt
  A   z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/nested.pt
  A   z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/outer.pt

-=-
Modified: z3c.traverser/trunk/CHANGES.txt
===================================================================
--- z3c.traverser/trunk/CHANGES.txt	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/CHANGES.txt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -2,6 +2,16 @@
 CHANGES
 =======
 
+0.2.1 (2007-11-92)
+------------------
+
+- bugfix: if viewlet and managers get nested a viewlet was not found if
+  the depth reaches 3 because the context was set to the page and not
+  to the context object
+- bugfix: replaced call to _getContextName because it has been removed from
+  absoluteURL
+
+
 0.2.0 (2007-10-31)
 ------------------
 

Modified: z3c.traverser/trunk/setup.py
===================================================================
--- z3c.traverser/trunk/setup.py	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/setup.py	2007-11-29 14:05:37 UTC (rev 82026)
@@ -1,4 +1,4 @@
-##############################################################################
+###############################################################################
 #
 # Copyright (c) 2007 Zope Corporation and Contributors.
 # All Rights Reserved.
@@ -22,7 +22,7 @@
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
 setup(name='z3c.traverser',
-      version = '0.3.0',
+      version = '0.2.1',
       author='Zope Corporation and Contributors',
       author_email='zope3-dev at zope.org',
       description='Pluggable Traverser API',

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/BROWSER.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/BROWSER.txt	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/BROWSER.txt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -29,6 +29,29 @@
   >>> print browser.contents
   <div><a href="http://localhost/test.html/++manager++IMyManager/++viewlet++MyViewlet">My Viewlet</a></div>
 
+
+What happens if a viewlet managers is nested into another viewlet? To test
+this we will create anothe manager and another viewlet::
+
+  >>> browser.open('http://localhost/@@nested.html')
+  >>> print browser.contents
+  <html>
+    <body>
+      <div><div><a href="http://localhost/nested.html/++manager++IOuterManager/++viewlet++OuterViewlet/++manager++IInnerManager/++viewlet++InnerViewlet/++manager++IMostInnerManager/++viewlet++MostInnerViewlet">Most inner viewlet</a></div>
+      </div>
+    </body>
+  </html>
+
+Let's follow the link to traverse the viewlet directly.
+
+  >>> browser.getLink('Most inner viewlet').click()
+  >>> browser.url
+  'http://localhost/nested.html/++manager++IOuterManager/++viewlet++OuterViewlet/++manager++IInnerManager/++viewlet++InnerViewlet/++manager++IMostInnerManager/++viewlet++MostInnerViewlet'
+
+  >>> browser.contents
+  '<div><a href="http://localhost/nested.html/++manager++IOuterManager/++viewlet++OuterViewlet/++manager++IInnerManager/++viewlet++InnerViewlet/++manager++IMostInnerManager/++viewlet++MostInnerViewlet">Most inner viewlet</a></div>'
+
+
 Ceveats
 -------
 

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/README.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/README.txt	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/README.txt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -86,7 +86,7 @@
   ...     IAbsoluteURL)
   >>> myViewlet = MyViewlet(content, request, view, leftColumn)
   >>> absoluteurl.absoluteURL(leftColumn, request)
-  'http://127.0.0.1/content/test.html/++manager++left'  
+  'http://127.0.0.1/content/test.html/++manager++left'
   >>> absoluteurl.absoluteURL(myViewlet, request)
   '.../content/test.html/++manager++left/++viewlet++myViewlet'
 

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/browser.py	2007-11-29 14:05:37 UTC (rev 82026)
@@ -32,8 +32,7 @@
         return url
 
     def _getContextName(self, context):
-        name = super(ViewletAbsoluteURL,
-                     self)._getContextName(context)
+        name = getattr(context, '__name__', None)
         return u'++viewlet++' + name
 
 
@@ -62,8 +61,7 @@
 
 
     def _getContextName(self, context):
-        name = super(ViewletManagerAbsoluteURL,
-                     self)._getContextName(context)
+        name = getattr(context, '__name__', None)
         return u'++manager++' + name
 
     __call__ = __str__

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/ftesting.zcml	2007-11-29 14:05:37 UTC (rev 82026)
@@ -88,5 +88,53 @@
       template="test.pt"
       permission="zope.Public"
       />
+
+  <!-- nested viewlet manager -->
+  <browser:page
+      for="*"
+      name="nested.html"
+      template="nested.pt"
+      permission="zope.Public"
+      />
+
+  <browser:viewletManager
+      name="IOuterManager"
+      provides=".app.IOuterManager"
+      permission="zope.Public"
+      />
+
+  <browser:viewlet
+      for="zope.app.component.interfaces.ISite"
+      name="OuterViewlet"
+      manager=".app.IOuterManager"
+      class=".app.OuterViewlet"
+      permission="zope.Public"/>
+
+  <browser:viewletManager
+      name="IInnerManager"
+      provides=".app.IInnerManager"
+      permission="zope.Public"
+      />
+
+  <browser:viewlet
+      for="zope.app.component.interfaces.ISite"
+      name="InnerViewlet"
+      manager=".app.IInnerManager"
+      class=".app.InnerViewlet"
+      permission="zope.Public"/>
+
+  <browser:viewletManager
+      name="IMostInnerManager"
+      provides=".app.IMostInnerManager"
+      permission="zope.Public"
+      />
+
+  <browser:viewlet
+      for="zope.app.component.interfaces.ISite"
+      name="MostInnerViewlet"
+      manager=".app.IMostInnerManager"
+      class=".app.MostInnerViewlet"
+      permission="zope.Public"/>
+
   </configure>
 </configure>

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/namespace.py	2007-11-29 14:05:37 UTC (rev 82026)
@@ -11,13 +11,13 @@
         self.request = request
 
     def traverse(self, name, ignored):
-        context = self.context.__parent__.__parent__
+        context = removeSecurityProxy(self.context).context
         provider = component.queryMultiAdapter(
             (context, self.request, self.context),
             IViewletManager, name)
         if provider is None:
             raise NotFound(self.context, name, self.request)
-        
+
         return provider
 
 
@@ -53,6 +53,6 @@
         # viewlet class a IBrowserPublisher, which assumes that we
         # have a call in browserdefault, so we have to replace this
         # method.
-        viewlet.browserDefault = lambda r: (viewlet, ('index.html',))  
+        viewlet.browserDefault = lambda r: (viewlet, ('index.html',))
         return viewlet
-        
+

Modified: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/app.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/app.py	2007-11-29 13:20:51 UTC (rev 82025)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/app.py	2007-11-29 14:05:37 UTC (rev 82026)
@@ -1,6 +1,8 @@
 from zope.viewlet import interfaces
 from zope.traversing.browser.absoluteurl import absoluteURL
+from zope.app.pagetemplate import ViewPageTemplateFile
 
+
 class IMyManager(interfaces.IViewletManager):
     """Viewlet manager"""
 
@@ -14,3 +16,45 @@
                absoluteURL(self, self.request)
 
 
+class IOuterManager(interfaces.IViewletManager):
+    """Outer viewlet manager"""
+
+
+class IInnerManager(interfaces.IViewletManager):
+    """Inner viewlet manager"""
+
+
+class IMostInnerManager(interfaces.IViewletManager):
+    """Most inner viewlet manager"""
+
+
+class OuterViewlet(object):
+
+    template = ViewPageTemplateFile('outer.pt')
+
+    def upate(self):
+        pass
+
+    def render(self):
+        return self.template()
+
+
+class InnerViewlet(object):
+
+    template = ViewPageTemplateFile('inner.pt')
+
+    def upate(self):
+        pass
+
+    def render(self):
+        return self.template()
+
+
+class MostInnerViewlet(object):
+
+    def upate(self):
+        pass
+
+    def render(self):
+        return '<div><a href="%s">Most inner viewlet</a></div>' % \
+               absoluteURL(self, self.request)

Added: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/inner.pt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/inner.pt	                        (rev 0)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/inner.pt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -0,0 +1 @@
+<div tal:replace="structure provider:IMostInnerManager"></div>
\ No newline at end of file


Property changes on: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/inner.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/nested.pt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/nested.pt	                        (rev 0)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/nested.pt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -0,0 +1,5 @@
+<html>
+  <body>
+    <div tal:content="structure provider:IOuterManager"/>
+  </body>
+</html>
\ No newline at end of file


Property changes on: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/nested.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/outer.pt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/outer.pt	                        (rev 0)
+++ z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/outer.pt	2007-11-29 14:05:37 UTC (rev 82026)
@@ -0,0 +1 @@
+<div tal:replace="structure provider:IInnerManager"></div>
\ No newline at end of file


Property changes on: z3c.traverser/trunk/src/z3c/traverser/viewlet/testing/outer.pt
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list