[Checkins] SVN: z3ext.layout/trunk/ Added @@pagelet browser view for fast access pagelets
Nikolay Kim
fafhrd at datacom.kz
Sun Oct 5 15:15:52 EDT 2008
Log message for revision 91783:
Added @@pagelet browser view for fast access pagelets
Changed:
U z3ext.layout/trunk/CHANGES.txt
U z3ext.layout/trunk/setup.py
U z3ext.layout/trunk/src/z3ext/layout/configure.zcml
U z3ext.layout/trunk/src/z3ext/layout/layout.py
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/tests.py
-=-
Modified: z3ext.layout/trunk/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/CHANGES.txt 2008-10-05 19:15:51 UTC (rev 91783)
@@ -2,6 +2,12 @@
CHANGES
=======
+1.5.0 (2008-10-06)
+------------------
+
+- Added @@pagelet browser view for fast access pagelets
+
+
1.4.6 (2008-10-03)
------------------
Modified: z3ext.layout/trunk/setup.py
===================================================================
--- z3ext.layout/trunk/setup.py 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/setup.py 2008-10-05 19:15:51 UTC (rev 91783)
@@ -21,7 +21,7 @@
def read(*rnames):
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-version='1.4.7dev'
+version='1.5.0dev'
setup(name='z3ext.layout',
Modified: z3ext.layout/trunk/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2008-10-05 19:15:51 UTC (rev 91783)
@@ -8,7 +8,18 @@
<!-- adapter provides IPagelet for (context, request) -->
<adapter factory=".pagelet.queryPagelet" />
+
+ <!-- @@pagelet view -->
+ <adapter
+ name="pagelet"
+ factory=".pagelet.PageletPublisher" />
+ <class class=".pagelet.PageletPublisher">
+ <allow
+ attributes="__getitem__"
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
+ </class>
+
<!-- default layouts -->
<z3ext:layout
layout="viewspace"
Modified: z3ext.layout/trunk/src/z3ext/layout/layout.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layout.py 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/src/z3ext/layout/layout.py 2008-10-05 19:15:51 UTC (rev 91783)
@@ -18,7 +18,6 @@
from zope import interface
from zope.publisher import browser
from zope.component import getMultiAdapter
-
from zope.app.pagetemplate.engine import TrustedAppPT
from zope.pagetemplate.pagetemplatefile import PageTemplateFile
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2008-10-05 19:15:51 UTC (rev 91783)
@@ -18,6 +18,8 @@
from zope import interface, component
from zope.component import queryMultiAdapter
from zope.publisher.browser import BrowserPage
+from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.tales.expressions import SimpleModuleImporter
from zope.pagetemplate.interfaces import IPageTemplate
from zope.app.publisher.browser import queryDefaultViewName
@@ -89,3 +91,38 @@
self.request.response.redirect(url)
self.isRedirected = True
+
+
+class PageletPublisher(object):
+ interface.implements(IBrowserPublisher)
+ component.adapts(interface.Interface, interface.Interface)
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+ self.modules = SimpleModuleImporter()
+
+ def publishTraverse(self, request, name):
+ try:
+ return self[name]
+ except KeyError:
+ pass
+
+ raise NotFound(self.context, name, request)
+
+ def __getitem__(self, name):
+ if name:
+ iface, name = name.rsplit('.', 1)
+ iface = getattr(self.modules[iface], name)
+ else:
+ iface = IPagelet
+
+ view = queryMultiAdapter((self.context, self.request), iface)
+ if view is not None:
+ view.update()
+ return view.render()
+
+ raise KeyError(name)
+
+ def browserDefault(self, request):
+ return self.context, ('',)
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2008-10-05 19:15:51 UTC (rev 91783)
@@ -234,11 +234,13 @@
>>> template2 = os.path.join(temp_dir, 'pagelet2.pt')
>>> open(template2, 'w').write('''<div>My pagelet2</div>''')
+ >>> from z3ext.layout.tests import ITestPagelet
+
>>> context = xmlconfig.string("""
... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
... <z3ext:pagelet
... template="%s"
- ... provides="z3ext.layout.TESTS.IMyPagelet1"
+ ... provides="z3ext.layout.tests.ITestPagelet"
... permission="zope.Public" />
... <z3ext:pagelet
... template="%s"
@@ -247,14 +249,25 @@
... </configure>
... """%(template, template2), context)
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()), IMyPagelet1)
- >>> IMyPagelet1.providedBy(pagelet)
+ >>> pagelet = component.queryMultiAdapter(
+ ... (object(), TestRequest()), ITestPagelet)
+
+ >>> ITestPagelet.providedBy(pagelet)
True
>>> pagelet.render()
u'<div>My pagelet</div>'
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()), IMyPagelet2)
+
+ >>> request = TestRequest()
+ >>> pagelet = component.queryMultiAdapter((object(), request), IMyPagelet2)
>>> IMyPagelet2.providedBy(pagelet)
True
>>> pagelet.render()
- u'<div>My pagelet2</div>'
\ No newline at end of file
+ u'<div>My pagelet2</div>'
+
+Access nameless pagelet from view
+
+ >>> pagelet = component.getMultiAdapter((object(), request), name='pagelet')
+
+ >>> print pagelet.publishTraverse(
+ ... request, 'z3ext.layout.tests.ITestPagelet')
+ <div>My pagelet</div>
Modified: z3ext.layout/trunk/src/z3ext/layout/tests.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tests.py 2008-10-05 15:55:38 UTC (rev 91782)
+++ z3ext.layout/trunk/src/z3ext/layout/tests.py 2008-10-05 19:15:51 UTC (rev 91783)
@@ -33,7 +33,10 @@
class IFolder1_1_1(interface.Interface):
pass
+class ITestPagelet(interface.Interface):
+ pass
+
class Folder(SampleContainer):
pass
@@ -48,6 +51,7 @@
root.__name__ = 'root'
test.globs['root'] = root
component.provideAdapter(pagelet.queryPagelet)
+ component.provideAdapter(pagelet.PageletPublisher, name='pagelet')
setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
More information about the Checkins
mailing list