[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