[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