[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