[Checkins] SVN: z3ext.layout/trunk/ Added IPageletManagerType, same as IPageletType but use extra parameters for adopter

Nikolay Kim fafhrd at datacom.kz
Fri Dec 19 16:50:59 EST 2008


Log message for revision 94204:
  Added IPageletManagerType, same as IPageletType but use extra parameters for adopter

Changed:
  U   z3ext.layout/trunk/CHANGES.txt
  U   z3ext.layout/trunk/src/z3ext/layout/configure.zcml
  U   z3ext.layout/trunk/src/z3ext/layout/interfaces.py
  U   z3ext.layout/trunk/src/z3ext/layout/pagelet.py
  U   z3ext.layout/trunk/src/z3ext/layout/tales.py
  U   z3ext.layout/trunk/src/z3ext/layout/zcml.py

-=-
Modified: z3ext.layout/trunk/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/CHANGES.txt	2008-12-19 21:50:58 UTC (rev 94204)
@@ -2,6 +2,12 @@
 CHANGES
 =======
 
+1.7.4 (2008-12-??)
+------------------
+
+- Added IPageletManagerType, same as IPageletType but use extra parameters for adopter
+
+
 1.7.3 (2008-12-18)
 ------------------
 

Modified: z3ext.layout/trunk/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/src/z3ext/layout/configure.zcml	2008-12-19 21:50:58 UTC (rev 94204)
@@ -21,7 +21,7 @@
      factory=".pagelet.PageletPublisher" />
 
   <class class=".pagelet.PageletPublisher">
-    <allow 
+    <allow
        attributes="__getitem__"
        interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
   </class>

Modified: z3ext.layout/trunk/src/z3ext/layout/interfaces.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/interfaces.py	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/src/z3ext/layout/interfaces.py	2008-12-19 21:50:58 UTC (rev 94204)
@@ -46,6 +46,13 @@
     """ pagelet interface type """
 
 
+class IPageletManager(interface.Interface):
+    """ pagelet manager """
+
+class IPageletManagerType(IPageletType):
+    """ pagelet interface type with view as manager """
+
+
 class ILayout(IBrowserPage):
     """ layout """
 

Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.py	2008-12-19 21:50:58 UTC (rev 94204)
@@ -25,7 +25,8 @@
 from zope.tales.expressions import SimpleModuleImporter
 from zope.app.publisher.browser import queryDefaultViewName
 
-from z3ext.layout.interfaces import IPagelet, IPageletType, ILayout
+from z3ext.layout.interfaces import IPagelet, ILayout, IPageletType
+from z3ext.layout.interfaces import IPageletManager, IPageletManagerType
 
 
 @interface.implementer(IPagelet)
@@ -123,8 +124,11 @@
 
     def __getitem__(self, name):
         if name:
-            iface = queryUtility(IPageletType, name)
+            iface = queryUtility(IPageletManagerType, name)
             if iface is None:
+                iface = queryUtility(IPageletType, name)
+
+            if iface is None:
                 try:
                     iface, iname = name.rsplit('.', 1)
                     iface = getattr(self.modules[iface], iname)
@@ -133,19 +137,29 @@
         else:
             iface = IPagelet
 
-        if iface.providedBy(self.context):
-            return self.context.render()
+        context = self.context
 
-        try:
-            view = queryMultiAdapter((self.context, self.request), iface)
-            if view is not None:
+        if iface.providedBy(context):
+            return context.render()
+
+        if IPageletManagerType.providedBy(iface):
+            manager = IPageletManager(context, None)
+            context = [context, self.request]
+            if type(manager) in (list, tuple):
+                context.extend(manager)
+            view = queryMultiAdapter(context, iface)
+        else:
+            view = queryMultiAdapter((context, self.request), iface)
+
+        if view is not None:
+            try:
                 view.update()
                 if view.isRedirected:
                     return u''
                 return view.render()
-        except Exception, err:
-            log = logging.getLogger('z3ext.layout')
-            log.exception(err)
+            except Exception, err:
+                log = logging.getLogger('z3ext.layout')
+                log.exception(err)
 
         raise KeyError(name)
 

Modified: z3ext.layout/trunk/src/z3ext/layout/tales.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tales.py	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/src/z3ext/layout/tales.py	2008-12-19 21:50:58 UTC (rev 94204)
@@ -21,6 +21,7 @@
 from zope.tales.expressions import StringExpr
 
 from interfaces import IPagelet, IPageletType
+from interfaces import IPageletManager, IPageletManagerType
 
 
 class TALESPageletExpression(StringExpr):
@@ -34,8 +35,11 @@
 
         # lookup pagelet
         if name:
-            iface = queryUtility(IPageletType, name)
+            iface = queryUtility(IPageletManagerType, name)
             if iface is None:
+                iface = queryUtility(IPageletType, name)
+
+            if iface is None:
                 try:
                     iface, iname = name.rsplit('.', 1)
                     iface = getattr(modules[iface], iname)
@@ -49,15 +53,23 @@
         if iface.providedBy(context):
             return context.render()
 
-        try:
+        if IPageletManagerType.providedBy(iface):
+            manager = IPageletManager(context, None)
+            context = [context, request]
+            if type(manager) in (list, tuple):
+                context.extend(manager)
+            view = queryMultiAdapter(context, iface)
+        else:
             view = queryMultiAdapter((context, request), iface)
-            if view is not None:
+
+        if view is not None:
+            try:
                 view.update()
                 if view.isRedirected:
                     return u''
                 return view.render()
-        except Exception, err:
-            log = logging.getLogger('z3ext.layout')
-            log.exception(err)
+            except Exception, err:
+                log = logging.getLogger('z3ext.layout')
+                log.exception(err)
 
         return u''

Modified: z3ext.layout/trunk/src/z3ext/layout/zcml.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/zcml.py	2008-12-19 17:38:33 UTC (rev 94203)
+++ z3ext.layout/trunk/src/z3ext/layout/zcml.py	2008-12-19 21:50:58 UTC (rev 94204)
@@ -282,7 +282,7 @@
 
 # pagelet directive
 def pageletDirective(
-    _context, permission, for_=interface.Interface, name=u'', manager=(), 
+    _context, permission, for_=interface.Interface, name=u'', manager=(),
     class_=None, layer=IDefaultBrowserLayer, provides=[IPagelet,],
     allowed_interface=[], allowed_attributes=[],
     template=u'', layout=u'', **kwargs):



More information about the Checkins mailing list