[Checkins] SVN: z3ext.layout/trunk/ extend @@pagelet view
Nikolay Kim
fafhrd91 at gmail.com
Thu Jun 18 03:00:47 EDT 2009
Log message for revision 101116:
extend @@pagelet view
Changed:
U z3ext.layout/trunk/CHANGES.txt
U z3ext.layout/trunk/src/z3ext/layout/configure.zcml
U z3ext.layout/trunk/src/z3ext/layout/pagelet.py
U z3ext.layout/trunk/src/z3ext/layout/pagelet.txt
U z3ext.layout/trunk/src/z3ext/layout/tales.py
U z3ext.layout/trunk/src/z3ext/layout/tests.py
U z3ext.layout/trunk/src/z3ext/layout/zcml.py
-=-
Modified: z3ext.layout/trunk/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/CHANGES.txt 2009-06-18 07:00:46 UTC (rev 101116)
@@ -2,6 +2,16 @@
CHANGES
=======
+2.1.0 (2009-06-18)
+------------------
+
+- Allow use interface as type for z3ext:pagelet directive
+
+- Allow use named typed pagelets with '@@pagelet' view and 'pagelet:' tales
+
+- Added 'pageletObject' view, it doesn't call pagelet render method
+
+
2.0.8 (2009-06-03)
------------------
Modified: z3ext.layout/trunk/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2009-06-18 07:00:46 UTC (rev 101116)
@@ -26,6 +26,10 @@
name="pagelet"
factory=".pagelet.PageletPublisher" />
+ <adapter
+ name="pageletObject"
+ factory=".pagelet.PageletObjectPublisher" />
+
<class class=".pagelet.PageletPublisher">
<allow
attributes="__getitem__"
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2009-06-18 07:00:46 UTC (rev 101116)
@@ -108,6 +108,8 @@
interface.implements(IBrowserPublisher)
component.adapts(interface.Interface, interface.Interface)
+ render = True
+
def __init__(self, context, request):
self.context = context
self.request = request
@@ -130,7 +132,13 @@
return u''
def __getitem__(self, name):
+ pageletName = u''
+
if name:
+ splited = name.split(u'|', 1)
+ if len(splited) > 1:
+ name, pageletName = splited
+
iface = queryUtility(IPageletType, name)
if iface is None:
@@ -155,16 +163,18 @@
else:
required.append(contexts)
required.append(self.request)
- view = queryMultiAdapter(required, iface)
+ view = queryMultiAdapter(required, iface, pageletName)
else:
- view = queryMultiAdapter((context, self.request), iface)
+ view = queryMultiAdapter((context, self.request), iface, pageletName)
if view is not None:
try:
view.update()
if view.isRedirected:
return u''
- return view.render()
+ if self.render:
+ return view.render()
+ return view
except Exception, err:
log = logging.getLogger('z3ext.layout')
log.exception(err)
@@ -173,3 +183,8 @@
def browserDefault(self, request):
return self.context, ('',)
+
+
+class PageletObjectPublisher(PageletPublisher):
+
+ render = False
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2009-06-18 07:00:46 UTC (rev 101116)
@@ -578,7 +578,60 @@
>>> print pagelet.publishTraverse(request, 'myPagelet5')
<div>My pagelet5</div>
+We can use interface as pagelet 'type'
+ >>> class IMyPagelet6(interface.Interface):
+ ... pass
+
+ >>> provideInterface('myPagelet6', IMyPagelet6, IPageletType)
+
+ >>> template6 = os.path.join(temp_dir, 'pagelet6.pt')
+ >>> open(template6, 'w').write('''<div>My pagelet6</div>''')
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... for="*"
+ ... template="%s"
+ ... type="z3ext.layout.TESTS.IMyPagelet6"
+ ... permission="zope.Public" />
+ ... </configure>"""%template6, context)
+
+ >>> pagelet = component.getMultiAdapter((Content(), request), name='pagelet')
+ >>> print pagelet.publishTraverse(request, 'myPagelet6')
+ <div>My pagelet6</div>
+
+
+we can call named pagelets
+
+ >>> template7 = os.path.join(temp_dir, 'pagelet7.pt')
+ >>> open(template7, 'w').write('''<div>My pagelet7</div>''')
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="named"
+ ... for="*"
+ ... template="%s"
+ ... type="z3ext.layout.TESTS.IMyPagelet6"
+ ... permission="zope.Public" />
+ ... </configure>"""%template7, context)
+
+ >>> pagelet = component.getMultiAdapter((Content(), request), name='pagelet')
+ >>> print pagelet.publishTraverse(request, 'myPagelet6|named')
+ <div>My pagelet7</div>
+
+
+'pageletObject' - same as 'pagelet' but it doesnt call pagelet render
+
+ >>> pagelet=component.getMultiAdapter((Content(),request),name='pageletObject')
+ >>> pob = pagelet.publishTraverse(request, 'myPagelet6|named')
+ >>> pob
+ <z3ext.layout.zcml.PageletClass from None object at ...>
+ >>> print pob.render()
+ <div>My pagelet7</div>
+
+
We can't register nameless pagelet, we can register only typed pagelet
without name
Modified: z3ext.layout/trunk/src/z3ext/layout/tales.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tales.py 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/tales.py 2009-06-18 07:00:46 UTC (rev 101116)
@@ -31,8 +31,14 @@
request = econtext.vars['request']
modules = econtext.vars['modules']
+ pageletName = u''
+
# lookup pagelet
if name:
+ splited = name.split('|', 1)
+ if len(splited) > 1:
+ name, pageletName = splited
+
iface = queryUtility(IPageletType, name)
if iface is None:
@@ -57,9 +63,9 @@
else:
required.append(contexts)
required.append(request)
- view = queryMultiAdapter(required, iface)
+ view = queryMultiAdapter(required, iface, pageletName)
else:
- view = queryMultiAdapter((context, request), iface)
+ view = queryMultiAdapter((context, request), iface, pageletName)
if view is not None:
try:
Modified: z3ext.layout/trunk/src/z3ext/layout/tests.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tests.py 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/tests.py 2009-06-18 07:00:46 UTC (rev 101116)
@@ -52,6 +52,7 @@
test.globs['root'] = root
component.provideAdapter(pagelet.queryPagelet)
component.provideAdapter(pagelet.PageletPublisher, name='pagelet')
+ component.provideAdapter(pagelet.PageletObjectPublisher,name='pageletObject')
setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
Modified: z3ext.layout/trunk/src/z3ext/layout/zcml.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/zcml.py 2009-06-18 06:33:08 UTC (rev 101115)
+++ z3ext.layout/trunk/src/z3ext/layout/zcml.py 2009-06-18 07:00:46 UTC (rev 101116)
@@ -226,7 +226,7 @@
cdict['description'] = description
if template:
- cdict['template'] = LayoutTemplateFile(template, content_type=contentType)
+ cdict['template'] = LayoutTemplateFile(template,content_type=contentType)
cdict.update(kwargs)
@@ -296,10 +296,11 @@
Type = type
# pagelet directive
-def pageletDirective(_context, for_, name=u'', type=(),
- class_=None, layer=IDefaultBrowserLayer, provides=[],
- allowed_interface=[], allowed_attributes=[],
- template=u'', layout=u'', permission='zope.Public', **kwargs):
+def pageletDirective(
+ _context, for_, name=u'', type=(),
+ class_=None, layer=IDefaultBrowserLayer, provides=[],
+ allowed_interface=[], allowed_attributes=[],
+ template=u'', layout=u'', permission='zope.Public', **kwargs):
# Check paeglet name
if not name and not type:
@@ -338,9 +339,17 @@
new_class = Type('PageletClass from %s'%class_, bases, cdict)
# extend provides with type
+ tps = []
for tp in type:
iface = queryUtility(IPageletType, tp)
+ if iface is None:
+ try:
+ iface = _context.resolve(tp)
+ except Exception, err:
+ pass
+
if iface is not None:
+ tps.append(iface)
provides.append(iface)
kwargs['type'] = type
@@ -403,12 +412,13 @@
# register pagelet
for_.append(layer)
- if type:
+ if tps:
_context.action(
discriminator = (
- 'z3ext.layout:registerPagelets', tuple(type), tuple(for_), layer, name),
+ 'z3ext.layout:registerPagelets',
+ tuple(tps), tuple(for_), layer, name),
callable = registerTypedPagelets,
- args = (for_, new_class, type, name, _context.info))
+ args = (for_, new_class, tps, name, _context.info))
else:
_context.action(
discriminator = (
@@ -429,8 +439,7 @@
def registerTypedPagelets(required, newClass, type, name, info):
- for tp in type:
- iface = getUtility(IPageletType, tp)
+ for iface in type:
handler('registerAdapter', newClass, required, iface, name, info)
More information about the Checkins
mailing list