[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&lt;br /&gt;
+  </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