[Checkins] SVN: z3ext.layout/trunk/ update tests
Nikolay Kim
fafhrd91 at gmail.com
Tue Dec 22 18:46:21 EST 2009
Log message for revision 106970:
update tests
Changed:
U z3ext.layout/trunk/CHANGES.txt
U z3ext.layout/trunk/setup.py
U z3ext.layout/trunk/src/z3ext/layout/configure.zcml
A z3ext.layout/trunk/src/z3ext/layout/index.pt
A z3ext.layout/trunk/src/z3ext/layout/layoutpage.pt
U z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt
D z3ext.layout/trunk/src/z3ext/layout/layoutportal.py
D z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt
U z3ext.layout/trunk/src/z3ext/layout/layoutviewspace.pt
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
-=-
Modified: z3ext.layout/trunk/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/CHANGES.txt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -5,9 +5,15 @@
2.3.0 (Unreleased)
------------------
-- ZTK support
+- Use ``zope.site`` intead of ``zope.app.component``
+- Use ``zope.browserpage`` intead of ``zope.app.publisher``
+- Make ``zope.app.pagetemplate`` optional
+
+- Use ``ErrorReportingUtility`` for exception logging
+
+
2.2.2 (2009-09-14)
------------------
Modified: z3ext.layout/trunk/setup.py
===================================================================
--- z3ext.layout/trunk/setup.py 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/setup.py 2009-12-22 23:46:21 UTC (rev 106970)
@@ -47,12 +47,13 @@
'Framework :: Zope3'],
author='Nikolay Kim',
author_email='fafhrd91 at gmail.com',
- url='http://z3ext.net/',
+ url='http://pypi.python.org/pypi/z3ext.layout/',
license='ZPL 2.1',
packages=find_packages('src'),
package_dir = {'':'src'},
namespace_packages=['z3ext'],
install_requires = ['setuptools',
+ 'Chameleon',
'zope.event',
'zope.schema',
'zope.component',
@@ -62,13 +63,16 @@
'zope.configuration',
'zope.pagetemplate',
'zope.tales',
- 'zope.app.pagetemplate',
+ 'zope.error',
+ 'zope.browserpage',
+ 'zope.app.schema',
'z3c.pt',
],
- extras_require = dict(test=['zope.site',
- 'zope.container',
+ extras_require = dict(test=['zope.container',
'zope.app.testing',
+ 'zope.app.pagetemplate',
'zope.testing',
+ 'RestrictedPython',
]),
include_package_data = True,
zip_safe = False)
Modified: z3ext.layout/trunk/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2009-12-22 23:46:21 UTC (rev 106970)
@@ -2,7 +2,7 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:zcml="http://namespaces.zope.org/zcml"
xmlns:z3ext="http://namespaces.zope.org/z3ext"
- xmlns:tales="http://namespaces.zope.org/tales"
+ xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="z3ext.layout">
<z3ext:pageletType
@@ -21,11 +21,6 @@
name="pagelet"
factory=".expressions.PageletTranslator" />
- <!-- pagelet: tales expression -->
- <tales:expressiontype
- name="pagelet"
- handler=".tales.TALESPageletExpression" />
-
<!-- @@pagelet view -->
<adapter
name="pagelet"
@@ -44,7 +39,7 @@
<!-- default layouts -->
<z3ext:layout
layout="viewspace"
- for="zope.app.component.site.SiteManagerContainer"
+ for="zope.site.site.SiteManagerContainer"
description="Default layout, registered for IDefaultBrowserLayer."
template="layoutcontent.pt" />
@@ -54,7 +49,7 @@
layout="workspace"
uid="default.viewspace"
description="Default viewpsace layout, registered for IDefaultBrowserLayer."
- for="zope.app.component.site.SiteManagerContainer"
+ for="zope.site.site.SiteManagerContainer"
template="layoutviewspace.pt" />
<z3ext:layout
@@ -63,18 +58,34 @@
title="Workspace"
uid="default.workspace"
description="Default workspace layout, registered for IDefaultBrowserLayer."
- for="zope.app.component.site.SiteManagerContainer"
+ for="zope.site.site.SiteManagerContainer"
template="layoutworkspace.pt" />
<z3ext:layout
name="portal"
+ layout="page"
+ uid="default.portal"
+ for="zope.site.site.SiteManagerContainer"
title="Portal"
- uid="default.portal"
description="Default portal layout, registered for IDefaultBrowserLayer"
- for="zope.app.component.site.SiteManagerContainer"
- class=".layoutportal.DefaultLayoutPortal"
template="layoutportal.pt" />
+ <z3ext:layout
+ name="page"
+ title="Page"
+ uid="default.page"
+ for="zope.site.site.SiteManagerContainer"
+ description="Page layout. It contains html headers, html body, etc."
+ template="layoutpage.pt" />
+
+ <!-- default view -->
+ <browser:defaultView name="index.html" />
+
+ <z3ext:pagelet
+ for="*"
+ name="index.html"
+ template="index.pt" />
+
<!-- Registering documentation with API doc -->
<configure
xmlns:zcml="http://namespaces.zope.org/zcml"
Added: z3ext.layout/trunk/src/z3ext/layout/index.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/index.pt (rev 0)
+++ z3ext.layout/trunk/src/z3ext/layout/index.pt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -0,0 +1 @@
+<p></p>
Added: z3ext.layout/trunk/src/z3ext/layout/layoutpage.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutpage.pt (rev 0)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutpage.pt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -0,0 +1,4 @@
+<html>
+ <body tal:content="structure view/render">
+ </body>
+</html>
Modified: z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportal.pt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -1,4 +1,2 @@
-<div id="z-portal">
- <tal:block tal:content="structure provider:statusMessage" />
- <tal:block tal:content="structure view/render" />
-</div>
+<div id="z-portal"
+ tal:content="structure view/render"></div>
Deleted: z3ext.layout/trunk/src/z3ext/layout/layoutportal.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportal.py 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportal.py 2009-12-22 23:46:21 UTC (rev 106970)
@@ -1,36 +0,0 @@
-##############################################################################
-#
-# 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
Deleted: z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutportaltmpl.pt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -1,11 +0,0 @@
-<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/layoutviewspace.pt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layoutviewspace.pt 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/layoutviewspace.pt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -1 +1,7 @@
-<div id="z-portal-viewspace" tal:content="structure view/render"></div>
+<div id="z-portal-viewspace">
+ <div class="z-portal-statusmessage"
+ tal:define="msg provider:statusMessage"
+ tal:condition="msg" tal:content="structure msg"></div>
+
+ <tal:block tal:content="structure view/render" />
+</div>
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2009-12-22 23:46:21 UTC (rev 106970)
@@ -15,7 +15,7 @@
$Id$
"""
-import logging, sys
+import sys
from zope import interface, component
from zope.component import queryUtility, queryAdapter, queryMultiAdapter
from zope.publisher.interfaces import NotFound
@@ -23,6 +23,7 @@
from zope.publisher.browser import BrowserPage
from zope.publisher.defaultview import queryDefaultViewName
from zope.tales.expressions import SimpleModuleImporter
+from zope.error.interfaces import IErrorReportingUtility
from interfaces import ILayout, IPagelet, IPageletType, IPageletContext
@@ -184,9 +185,10 @@
if view is not None:
try:
return view.updateAndRender()
- except Exception, err:
- log = logging.getLogger('z3ext.layout')
- log.exception(err)
+ except:
+ errUtility = queryUtility(IErrorReportingUtility)
+ if errUtility is not None:
+ errUtility.raising(sys.exc_info(), self.request)
raise KeyError(name)
@@ -204,7 +206,8 @@
view.update()
return view
except Exception, err:
- log = logging.getLogger('z3ext.layout')
- log.exception(err)
+ errUtility = queryUtility(IErrorReportingUtility)
+ if errUtility is not None:
+ errUtility.raising(sys.exc_info(), self.request)
raise KeyError(name)
Modified: z3ext.layout/trunk/src/z3ext/layout/pagelet.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2009-12-22 23:46:21 UTC (rev 106970)
@@ -795,12 +795,10 @@
Also we should register tales expression
>>> from z3ext.layout import tales
- >>> from zope.app.pagetemplate.metaconfigure import registerType
- >>> registerType('pagelet', tales.TALESPageletExpression)
Finally we look up the view and render it.
- >>> from zope.app.pagetemplate.simpleviewclass import SimpleViewClass
+ >>> from z3ext.layout.tests import SimpleViewClass
>>> FrontPage = SimpleViewClass(templateFileName, name='main.html')
>>> component.provideAdapter(
@@ -822,6 +820,35 @@
</body>
</html>
+ >>> view.index
+ <z3c.pt.pagetemplate.BoundViewPageTemplateFile ...>
+
+'pagelet' expression works for chameleon and for pagetemplate
+
+ >>> FrontPage = SimpleViewClass(templateFileName, name='main.html', pt=False)
+ >>> component.provideAdapter(
+ ... FrontPage,
+ ... (interface.Interface, interface.Interface), interface.Interface,
+ ... name='main.html')
+
+ >>> view = component.getMultiAdapter((object(), request), name='main.html')
+ >>> print view()
+ <html>
+ <body>
+ <h1>My Web Page</h1>
+ <div class="left-column">
+ <div>My pagelet</div>
+ </div>
+ <div class="main">
+ Content here
+ </div>
+ </body>
+ </html>
+
+ >>> view.index
+ <BoundPageTemplateFile of ...>
+
+
Or we can use typed pagelet interface
>>> open(templateFileName, 'w').write('''
@@ -935,7 +962,7 @@
>>> class PageletWithError(object):
... def render(self):
- ... raise Exception('Error')
+ ... raise Exception('Pagelet Error')
>>> context = xmlconfig.string("""
... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
@@ -979,6 +1006,21 @@
</body>
</html>
+ >>> from zope.error.interfaces import IErrorReportingUtility
+ >>> error = component.getUtility(IErrorReportingUtility)
+ >>> print error.getLogEntries()[0]['tb_html']
+ <p>Traceback (most recent call last):
+ <ul>
+ <li> Module z3ext.layout.tales, line 34, in render<br />
+ return pagelet.updateAndRender()</li>
+ <li> Module z3ext.layout.pagelet, line 131, in updateAndRender<br />
+ return self.render()</li>
+ <li> Module z3ext.layout.TESTS, line 3, in render<br />
+ raise Exception('Pagelet Error')</li>
+ </ul>Exception: Pagelet Error<br />
+ </p><br />
+
+
Pagelet with extra context
>>> open(templateFileName, 'w').write('''
Modified: z3ext.layout/trunk/src/z3ext/layout/tales.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tales.py 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/tales.py 2009-12-22 23:46:21 UTC (rev 106970)
@@ -16,8 +16,10 @@
$Id: tales.py 2720 2008-08-25 11:15:10Z fafhrd91 $
"""
import logging, sys
+from zope.component import queryUtility, queryAdapter, queryMultiAdapter
+from zope.error.interfaces import IErrorReportingUtility
+from zope.pagetemplate.engine import Engine, TrustedEngine
from zope.tales.expressions import StringExpr, SimpleModuleImporter
-from zope.component import queryUtility, queryAdapter, queryMultiAdapter
from pagelet import queryPagelet
from interfaces import IPagelet, IPageletType, IPageletContext
@@ -30,9 +32,10 @@
pagelet = queryPagelet(context, request, name)
if pagelet is not None:
return pagelet.updateAndRender()
- except Exception, err:
- log = logging.getLogger('z3ext.layout')
- log.exception(err)
+ except:
+ errUtility = queryUtility(IErrorReportingUtility)
+ if errUtility is not None:
+ errUtility.raising(sys.exc_info(), request)
return u''
@@ -47,3 +50,7 @@
view = econtext.vars['view']
return self.render(context, request, view, name)
+
+
+Engine.registerType("pagelet", TALESPageletExpression)
+TrustedEngine.registerType("pagelet", TALESPageletExpression)
Modified: z3ext.layout/trunk/src/z3ext/layout/tests.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tests.py 2009-12-22 23:46:06 UTC (rev 106969)
+++ z3ext.layout/trunk/src/z3ext/layout/tests.py 2009-12-22 23:46:21 UTC (rev 106970)
@@ -15,14 +15,23 @@
$Id$
"""
-import unittest, doctest
+import unittest, doctest, sys
from zope import interface, component
-from zope.testing.doctestunit import DocFileSuite
from zope.app.testing import setup
from zope.container.sample import SampleContainer
+from zope.publisher.browser import BrowserView
+from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.publisher.interfaces import NotFound
+from zope.error.error import ErrorReportingUtility
+from zope.error.interfaces import IErrorReportingUtility
+from zope.app.pagetemplate import ViewPageTemplateFile
+
from z3c.pt import expressions
+from z3c.pt.pagetemplate import \
+ ViewPageTemplateFile as ViewPageTemplateFilePT
from z3ext.layout import pagelet
+from z3ext.layout.expressions import PageletTranslator
class IFolder1(interface.Interface):
@@ -47,6 +56,31 @@
title = u'My layout'
+class simple(BrowserView):
+ interface.implements(IBrowserPublisher)
+
+ def __call__(self, *args, **kw):
+ return self.index(*args, **kw)
+
+
+def SimpleViewClass(src, offering=None, bases=(), name=u'', pt=True):
+ if offering is None:
+ offering = sys._getframe(1).f_globals
+
+ bases += (simple, )
+
+ if pt:
+ class_ = type("SimpleViewClass PT from %s" % src, bases,
+ {'index': ViewPageTemplateFilePT(src, offering),
+ '__name__': name})
+ else:
+ class_ = type("SimpleViewClass from %s" % src, bases,
+ {'index': ViewPageTemplateFile(src, offering),
+ '__name__': name})
+
+ return class_
+
+
def setUp(test):
root = setup.placefulSetUp(site=True)
root.__name__ = 'root'
@@ -55,6 +89,8 @@
component.provideAdapter(pagelet.PageletPublisher, name='pagelet')
component.provideAdapter(pagelet.PageletObjectPublisher,name='pageletObject')
component.provideUtility(expressions.path_translator, name='path')
+ component.provideUtility(PageletTranslator(), name="pagelet")
+ component.provideUtility(ErrorReportingUtility(), IErrorReportingUtility)
setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
More information about the checkins
mailing list