[Checkins] SVN: z3ext.layout/trunk/ - Use chameleon for zpt

Nikolay Kim fafhrd91 at gmail.com
Sun Jul 5 04:20:36 EDT 2009


Log message for revision 101565:
  - Use chameleon for zpt
  
  - Do not use metal in default layoutsxs
  
  
  

Changed:
  U   z3ext.layout/trunk/CHANGES.txt
  U   z3ext.layout/trunk/setup.py
  U   z3ext.layout/trunk/src/z3ext/layout/README.txt
  U   z3ext.layout/trunk/src/z3ext/layout/configure.zcml
  A   z3ext.layout/trunk/src/z3ext/layout/expressions.py
  U   z3ext.layout/trunk/src/z3ext/layout/layout.py
  U   z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt
  A   z3ext.layout/trunk/src/z3ext/layout/layoutportal.py
  A   z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt
  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-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/CHANGES.txt	2009-07-05 08:20:35 UTC (rev 101565)
@@ -2,6 +2,14 @@
 CHANGES
 =======
 
+2.2.0 (Unrelased)
+-----------------
+
+- Use chameleon for zpt
+
+- Do not use metal in default layouts
+
+
 2.1.0 (2009-06-20)
 ------------------
 

Modified: z3ext.layout/trunk/setup.py
===================================================================
--- z3ext.layout/trunk/setup.py	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/setup.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -21,7 +21,7 @@
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
-version='2.1.1dev'
+version='2.2.0dev'
 
 
 setup(name='z3ext.layout',
@@ -65,6 +65,7 @@
                           'zope.app.component',
                           'zope.app.publisher',
                           'zope.app.pagetemplate',
+			  'z3c.pt',
                           ],
       extras_require = dict(test=['zope.app.container',
                                   'zope.app.testing',

Modified: z3ext.layout/trunk/src/z3ext/layout/README.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/README.txt	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/README.txt	2009-07-05 08:20:35 UTC (rev 101565)
@@ -95,10 +95,8 @@
 
   >>> print view()
   <html>
-  <body>
-        <div id="portal">
-          <div id="workspace">
-          <div id="content">root</div>...
+     <body>
+        <div id="portal"><div id="workspace"><div id="content">root</div></div></div>
      </body>
   </html>
 
@@ -113,9 +111,7 @@
   >>> print MyView(folder1, request)()
   <html>
     <body>
-      <div id="portal">
-        <div id="workspace">
-        <div id="content">folder1</div>...
+      <div id="portal"><div id="workspace"><div id="content">folder1</div></div></div>
     </body>
   </html>
 
@@ -130,9 +126,7 @@
   >>> print MyView(folder1_1_1, request)()
   <html>
     <body>
-      <div id="portal">
-        <div id="workspace">
-          <div id="content">folder1_1_1</div>...
+      <div id="portal"><div id="workspace"><div id="content">folder1_1_1</div></div></div>
     </body>
   </html>
 
@@ -169,15 +163,13 @@
   >>> print MyView(folder1, request)()
   <html>
     <body>
-      <div id="portal">
-        <table id="columns">
+      <div id="portal"><table id="columns">
           <tr>
             <td id="column1">Column1</td>
-            <td id="column2">
-              <div id="content">folder1</div>...
+            <td id="column2"><div id="content">folder1</div></td>
             <td id="column3">Column3</td>
           </tr>
-        </table>...
+        </table></div>
     </body>
   </html>
 
@@ -186,15 +178,13 @@
   >>> print MyView(folder1_1, request)()
   <html>
     <body>
-      <div id="portal">
-        <table id="columns">
+      <div id="portal"><table id="columns">
           <tr>
             <td id="column1">Column1</td>
-            <td id="column2">
-              <div id="content">folder1_1</div>...
+            <td id="column2"><div id="content">folder1_1</div></td>
             <td id="column3">Column3</td>
-          </tr>
-        </table>...
+          </tr> 
+        </table></div>
     </body>
   </html>
 
@@ -202,15 +192,13 @@
   >>> print MyView(folder1_1_1, request)()
   <html>
     <body>
-      <div id="portal">
-        <table id="columns">
+      <div id="portal"><table id="columns">
           <tr>
             <td id="column1">Column1</td>
-            <td id="column2">
-              <div id="content">folder1_1_1</div>...
+            <td id="column2"><div id="content">folder1_1_1</div></td>
             <td id="column3">Column3</td>
           </tr>
-        </table>...
+        </table></div>
     </body>
   </html>
 
@@ -238,19 +226,16 @@
   >>> print MyView(folder1_1, request)()
   <html>
     <body>
-      <div id="portal">
-        <table id="columns">
+      <div id="portal"><table id="columns">
           <tr>
             <td id="column1">Column1</td>
-            <td id="column2">
-              <div id="content">
-                <div id="content1_1">
-                  <h1>Folder1_1</h1>
-                  <div>folder1_1</div>
-                </div>...
+            <td id="column2"><div id="content"><div id="content1_1">
+               <h1>Folder1_1</h1>
+               <div>folder1_1</div>
+            </div></div></td>
             <td id="column3">Column3</td>
           </tr>
-        </table>...
+        </table></div>
      </body>
   </html>
 
@@ -278,20 +263,18 @@
   >>> print MyView(folder1_1_1, request)()
   <html>
     <body>
-      <div id="portal">
-        <table id="columns">
-          <tr>
+      <div id="portal"><table id="columns">
+         <tr>
             <td id="column1">Column1</td>
-            <td id="column2">
-              <div id="content">
-                <div id="content1_1">
-                  <h1>Folder1_1</h1>
-                  <div>
-                    <div id="content1_1_1">
-                      <h1>Folder1_1_1</h1>
-                      <div>folder1_1_1</div>...
+            <td id="column2"><div id="content"><div id="content1_1">
+              <h1>Folder1_1</h1>
+              <div><div id="content1_1_1">
+                 <h1>Folder1_1_1</h1>
+                 <div>folder1_1_1</div>
+              </div></div>
+            </div></div></td>
             <td id="column3">Column3</td>
-          </tr>
-        </table>...
+         </tr>
+      </table></div>
     </body>
   </html>

Modified: z3ext.layout/trunk/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/configure.zcml	2009-07-05 08:20:35 UTC (rev 101565)
@@ -67,8 +67,14 @@
      uid="default.portal"
      description="Default portal layout, registered for IDefaultBrowserLayer"
      for="zope.app.component.site.SiteManagerContainer"
+     class=".layoutportal.DefaultLayoutPortal"
      template="layoutportal.pt" />
 
+  <!-- pagelet: expression for chameleon -->
+  <utility
+     name="pagelet"
+     factory=".expressions.PageletTranslator" />
+
   <!-- Registering documentation with API doc -->
   <configure
      xmlns:zcml="http://namespaces.zope.org/zcml"

Added: z3ext.layout/trunk/src/z3ext/layout/expressions.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/expressions.py	                        (rev 0)
+++ z3ext.layout/trunk/src/z3ext/layout/expressions.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -0,0 +1,44 @@
+##############################################################################
+#
+# Copyright (c) 2009 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" 
+
+$Id:  2007-12-12 12:27:02Z fafhrd $
+"""
+import re
+from chameleon.core import types
+from chameleon.zpt import expressions
+
+from tales import PageletExpression
+
+
+class PageletTraverser(PageletExpression):
+
+    __call__ = PageletExpression.render
+
+
+class PageletTranslator(expressions.ExpressionTranslator):
+    provider_regex = re.compile(r'^[A-Za-z][A-Za-z0-9_\.-;:]*$')
+
+    symbol = '_get_z3ext_pagelet'
+    pagelet_traverser = PageletTraverser()
+
+    def translate(self, string, escape=None):
+        if self.provider_regex.match(string) is None:
+            raise SyntaxError(
+                "%s is not a valid content provider name." % string)
+
+        value = types.value("%s(context, request, view, '%s')" % \
+                                (self.symbol, string))
+        value.symbol_mapping[self.symbol] = self.pagelet_traverser
+        return value

Modified: z3ext.layout/trunk/src/z3ext/layout/layout.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layout.py	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/layout.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -19,55 +19,30 @@
 from zope.publisher import browser
 from zope.component import getMultiAdapter
 from zope.traversing.api import getRoot
-from zope.app.pagetemplate.engine import TrustedAppPT
-from zope.pagetemplate.pagetemplatefile import PageTemplateFile
 
+from z3c.pt.pagetemplate import ViewPageTemplateFile
+
 from z3ext.layout.pagelet import queryLayout
 from z3ext.layout.interfaces import LayoutNotFound
 from z3ext.layout.interfaces import ILayout, ILayoutView, ILayoutTemplateFile
 
 
-class ViewMapper(object):
-
-    def __init__(self, ob, request):
-        self.ob = ob
-        self.request = request
-
-    def __getitem__(self, name):
-        return getMultiAdapter((self.ob, self.request), name=name)
-
-
-class LayoutTemplateFile(TrustedAppPT, PageTemplateFile):
+class LayoutTemplateFile(ViewPageTemplateFile):
     interface.implements(ILayoutTemplateFile)
 
-    expand = False
-
-    def __init__(self, filename, _prefix=None, content_type=None):
-        _prefix = self.get_path_from_prefix(_prefix)
-        super(LayoutTemplateFile, self).__init__(filename, _prefix)
-        if content_type is not None:
-            self.content_type = content_type
-
-    def pt_getContext(self, layout, **_kw):
+    def _pt_get_context(self, layout, request, kwargs):
         view = layout.view
 
-        # instance is a View component
-        namespace = super(LayoutTemplateFile, self).pt_getContext(**_kw)
-        namespace['view'] = view
-        namespace['request'] = layout.request
-        namespace['context'] = view.context
+        namespace = super(LayoutTemplateFile, self)._pt_get_context(
+            view, request, kwargs)
+
         namespace['layout'] = layout
         namespace['layoutcontext'] = layout.context
         namespace['mainview'] = layout.mainview
         namespace['maincontext'] = layout.maincontext
-        namespace['views'] = ViewMapper(view.context, layout.request)
         return namespace
 
-    def __call__(self, layout, *args, **kw):
-        namespace = self.pt_getContext(layout, args=args, options=kw)
-        return self.pt_render(namespace)
 
-
 class Layout(browser.BrowserPage):
     interface.implements(ILayout)
 
@@ -91,7 +66,8 @@
             view.update()
             return view.render()
 
-        return self.template(self)
+        return self.template(
+            self, context=self.view.context, request=self.request)
 
     def __call__(self, layout=None, view=None, *args, **kw):
         if view is None:

Modified: z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt	2009-07-05 08:20:35 UTC (rev 101565)
@@ -1,14 +1,4 @@
-<metal:block metal:use-macro="context/@@standard_macros/page">
-  <div id="z-portal" metal:fill-slot="columns">
-    <tal:block tal:content="structure provider:statusMessage" />
-    <tal:block tal:content="structure view/render" />
-  </div>
-  <div id="z-portal" metal:fill-slot="workspace">
-    <tal:block tal:content="structure provider:statusMessage" />
-    <tal:block tal:content="structure view/render" />
-  </div>
-  <div id="z-portal" metal:fill-slot="body">
-    <tal:block tal:content="structure provider:statusMessage" />
-    <tal:block tal:content="structure view/render" />
-  </div>
-</metal:block>
+<div id="z-portal">
+  <tal:block tal:content="structure provider:statusMessage" />
+  <tal:block tal:content="structure view/render" />
+</div>

Added: z3ext.layout/trunk/src/z3ext/layout/layoutportal.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportal.py	                        (rev 0)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportal.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -0,0 +1,36 @@
+##############################################################################
+#
+# Copyright (c) 2009 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" 
+
+$Id:  2007-12-12 12:27:02Z fafhrd $
+"""
+from zope.app.pagetemplate import ViewPageTemplateFile
+
+
+class DefaultLayoutPortal(object):
+
+    content = ViewPageTemplateFile('layoutportaltmpl.pt')
+
+    def render(self):
+        rendered = self.template(
+            self, context=self.view.context, request=self.request)
+
+        tmpl = self.content(self)
+
+        parts = tmpl.split(u'<!-- default layout portal contents -->', 1) 
+
+        if len(parts) == 2:
+            return parts[0] + rendered + parts[1]
+        else:
+            return rendered

Added: z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt	                        (rev 0)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt	2009-07-05 08:20:35 UTC (rev 101565)
@@ -0,0 +1,11 @@
+<metal:block metal:use-macro="context/@@standard_macros/page">
+  <tal:block metal:fill-slot="columns">
+    <!-- default layout portal contents -->
+  </tal:block>
+  <tal:block metal:fill-slot="workspace">
+    <!-- default layout portal contents -->
+  </tal:block>
+  <tal:block metal:fill-slot="body">
+    <!-- default layout portal contents -->
+  </tal:block>
+</metal:block>

Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.txt	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.txt	2009-07-05 08:20:35 UTC (rev 101565)
@@ -296,7 +296,7 @@
   <z3ext.layout.zcml.PageletClass from None ...>
 
   >>> pagelet.template
-  <BoundPageTemplateFile of <z3ext.layout.zcml.PageletClass from None ...>>
+  <z3c.pt.pagetemplate.BoundViewPageTemplateFile '...'>
 
 We can create pagelet with additional context
 

Modified: z3ext.layout/trunk/src/z3ext/layout/tales.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tales.py	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/tales.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -16,21 +16,17 @@
 $Id: tales.py 2720 2008-08-25 11:15:10Z fafhrd91 $
 """
 import logging, sys
-from zope.tales.expressions import StringExpr
+from zope.tales.expressions import StringExpr, SimpleModuleImporter
 from zope.component import queryUtility, queryAdapter, queryMultiAdapter
 
 from interfaces import IPagelet, IPageletType, IPageletContext
 
 
-class TALESPageletExpression(StringExpr):
+class PageletExpression(object):
 
-    def __call__(self, econtext):
-        name = super(TALESPageletExpression, self).__call__(econtext)
-
-        context = econtext.vars['context']
-        request = econtext.vars['request']
-        modules = econtext.vars['modules']
-
+    def render(self, context, request, view, name):
+        modules = SimpleModuleImporter()
+        
         pageletName = u''
 
         # lookup pagelet
@@ -78,3 +74,15 @@
                 log.exception(err)
 
         return u''
+
+
+class TALESPageletExpression(StringExpr, PageletExpression):
+
+    def __call__(self, econtext):
+        name = super(TALESPageletExpression, self).__call__(econtext)
+
+        context = econtext.vars['context']
+        request = econtext.vars['request']
+        view = econtext.vars['view']
+
+        return self.render(context, request, view, name)

Modified: z3ext.layout/trunk/src/z3ext/layout/tests.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tests.py	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/tests.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -20,6 +20,7 @@
 from zope.testing.doctestunit import DocFileSuite
 from zope.app.testing import setup
 from zope.app.container.sample import SampleContainer
+from z3c.pt import expressions 
 
 from z3ext.layout import pagelet
 
@@ -53,6 +54,8 @@
     component.provideAdapter(pagelet.queryPagelet)
     component.provideAdapter(pagelet.PageletPublisher, name='pagelet')
     component.provideAdapter(pagelet.PageletObjectPublisher,name='pageletObject')
+    component.provideUtility(expressions.path_translator, name='path')
+
     setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
 
 

Modified: z3ext.layout/trunk/src/z3ext/layout/zcml.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/zcml.py	2009-07-05 08:06:15 UTC (rev 101564)
+++ z3ext.layout/trunk/src/z3ext/layout/zcml.py	2009-07-05 08:20:35 UTC (rev 101565)
@@ -22,17 +22,18 @@
 from zope.component import getUtility, queryUtility
 from zope.component.interface import provideInterface
 from zope.component.zcml import handler, adapter, utility
+from zope.security.zcml import Permission
 from zope.security.checker import defineChecker, Checker, CheckerPublic
-from zope.configuration.fields import Path, Tokens, GlobalObject, GlobalInterface
+from zope.configuration.fields import Path,Tokens,GlobalObject,GlobalInterface
 from zope.configuration.exceptions import ConfigurationError
 from zope.publisher.interfaces import IPublishTraverse
 from zope.publisher.interfaces.browser import IBrowserPage
 from zope.publisher.interfaces.browser import IBrowserPublisher
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.app.component.metadirectives import IBasicViewInformation
-from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
-from zope.security.zcml import Permission
 
+from z3c.pt.pagetemplate import ViewPageTemplateFile
+
 from interfaces import IPagelet, IPageletType
 from interfaces import ILayout, ILayoutCreatedEvent
 



More information about the Checkins mailing list