[Checkins] SVN: z3ext.layout/tags/2.2.0/ release tag

Nikolay Kim fafhrd91 at gmail.com
Tue Jul 14 06:07:09 EDT 2009


Log message for revision 101887:
  release tag

Changed:
  A   z3ext.layout/tags/2.2.0/
  D   z3ext.layout/tags/2.2.0/CHANGES.txt
  A   z3ext.layout/tags/2.2.0/CHANGES.txt
  U   z3ext.layout/tags/2.2.0/setup.py
  D   z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py
  A   z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py
  D   z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py
  A   z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py

-=-
Deleted: z3ext.layout/tags/2.2.0/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt	2009-07-13 21:41:48 UTC (rev 101878)
+++ z3ext.layout/tags/2.2.0/CHANGES.txt	2009-07-14 10:07:09 UTC (rev 101887)
@@ -1,301 +0,0 @@
-=======
-CHANGES
-=======
-
-2.2.0 (Unrelased)
------------------
-
-- Use chameleon for zpt
-
-- Do not use metal in default layouts
-
-- Use '+' for named pagelet instead of ';'
-
-
-2.1.0 (2009-06-20)
-------------------
-
-- Allow use interface as type for z3ext:pagelet directive
-
-- Allow use named typed pagelets with '@@pagelet' view and 'pagelet:' tales
-
-- Added 'pageletObject' view, it doesn't call pagelet render method
-
-
-2.0.8 (2009-06-03)
-------------------
-
-- Fixed next layout calculation for root object
-
-
-2.0.7 (2009-04-15)
-------------------
-
-- Do not use z3c.autoinclude
-
-
-2.0.6 (2009-03-11)
-------------------
-
-- Fixed discriminator for z3ext:pagelet directive
-
-- Allow use 'layout' pagelet type as template for layout
-
-- Update styles
-
-
-2.0.5 (2009-01-26)
-------------------
-
-- Update styles
-
-
-2.0.4 (2009-01-22)
-------------------
-
-- Pass permission to class required attributes
-
-
-2.0.3 (2009-01-20)
-------------------
-
-- Use __parent__ for layout quering
-
-
-2.0.2 (2009-01-08)
-------------------
-
-- Register layout for (view, for, layer), instead of view and for separatly
-
-
-2.0.1 (2008-12-25)
-------------------
-
-- Pagelet should implement provided interfaces
-
-
-2.0.0 (2008-12-22)
-------------------
-
-- Pagelet without name is not allowed
-
-- Added 'type' attribute to 'z3ext:pagelet'
-
-- Added 'z3ext:pageletType' directive for registering new pagelet types
-
-- multiple params is allowed for 'for' attribute
-
-- Removed pagelet 'manager' attribute
-
-- 'pagelet' tales expression and 'pagelet' view checks additional context IPageletContext
-  if exists use it as adapter parameter
-
-
-1.7.3 (2008-12-18)
-------------------
-
-- Use IPagelet instead of IPageTemplate for pagelet rendering
-
-
-1.7.2 (2008-12-17)
-------------------
-
-- Update default styles
-
-
-1.7.1 (2008-12-15)
-------------------
-
-- Check if context provides interface in @@pagelet view and pagelet: tales expresion
-
-
-1.7.0 (2008-12-11)
-------------------
-
-- Added `manager` attribute to z3ext:pagelet directive
-  this allow use getMultiAdapter((content, request, manager1, manager2, ...), IPagelet)
-
-- Use 'provides' schema for converting kwargs in z3ext:pagelet directive
-
-
-1.6.0 (2008-11-27)
-------------------
-
-- Added 'uid' attribute to z3ext:layout directive.
-  Send ILayoutCreatedEvent event only if layout has uid
-
-
-1.5.9 (2008-11-24)
-------------------
-
-- Fixed python2.4 compatibility
-
-
-1.5.7 (2008-11-17)
-------------------
-
-- Update css styles
-
-
-1.5.6 (2008-11-06)
-------------------
-
-- Register nameless pagelet only if provided interface is not
-inherited from IBrowserPublisher
-
-
-1.5.5 (2008-11-05)
-------------------
-
-- Add IPagelet interface to pagelet provides
-
-
-1.5.4 (2008-10-30)
-------------------
-
-- Added 'pagelet' tales expression (same as @@pagelet)
-
-- Update css styles
-
-
-1.5.3 (2008-10-16)
-------------------
-
-- Update css styles
-
-
-1.5.2 (2008-10-15)
-------------------
-
-- Render IPagelet adapter for @@pagelet view
-
-
-1.5.1 (2008-10-14)
-------------------
-
-- Fixed missing NotFount in @@pagelet 
-
-- Log errors in @@pagelet
-
-- Default css styles
-
-
-1.5.0 (2008-10-06)
-------------------
-
-- Added @@pagelet browser view for fast access pagelets
-
-
-1.4.6 (2008-10-03)
-------------------
-
-- Fixed bug with multple nameless pagelet
-
-
-1.4.5 (2008-08-18)
-------------------
-
-- `name` attribute is optional for <z3ext:pagelet/> directive
-
-
-1.4.4 (2008-07-22)
-------------------
-
-- Fix IPagelet adapter for content
-
-
-1.4.3 (2008-05-22)
-------------------
-
-- Added LayoutNotFound exception
-
-
-1.4.2 (2008-05-14)
-------------------
-
-- Remove unused interfaces
-
-- Tests updated
-
-
-1.4.1 (2008-04-23)
-------------------
-
-- Use newer version of z3ext.autoinclude
-
-
-1.4 (2008-03-21)
-----------------
-
-- Added z3ext:pagelet directive
-
-- Code cleanup
-
-- Moved to svn.zope.org
-
-
-1.3.2 (2008-03-06)
-------------------
-
-- Removed context layouts
-
-
-1.3.1 (2008-02-21)
-------------------
-
-- Code cleanup
-
-- Remove code related to zope.formlib
-
-
-1.3.0 (2008-02-20)
-------------------
-
-- Removed code related to z3c.form
-
-
-1.2.1 (2008-02-18)
-------------------
-
-- Added 'redirect' method to IBrowserPagelet, this is usefull
-  when we need redirect during 'update' method and we don't 
-  need render pagelet at all.
-
-- Added adapter to IPagelet for (context, request),
-  this adapter gets browser:defaultView for context and if it IPagelet return it
-
-
-1.2.0 (2008-02-13)
-------------------
-
-- Remove all code related to persistent templates
-
-
-1.1.2 (2008-02-12)
-------------------
-
-- Added 'title' and 'description' fields layout directive
-
-- check ILayoutTemplateTAL for ISite
-
-
-1.1.0 (2008-02-08)
-------------------
-
-- Added compatibility with z3c.template layouts
-
-- Added ILayoutTemplateTAL interface, other packages
-  can define adapter to this interface and change layout template
-  TAL program (layout customization)
-
-
-1.0.1 (2008-02-02)
-------------------
-
-- Added required dependencies
-
-
-1.0.0 (2008-01-15)
-------------------
-
-- Initial release

Copied: z3ext.layout/tags/2.2.0/CHANGES.txt (from rev 101886, z3ext.layout/trunk/CHANGES.txt)
===================================================================
--- z3ext.layout/tags/2.2.0/CHANGES.txt	                        (rev 0)
+++ z3ext.layout/tags/2.2.0/CHANGES.txt	2009-07-14 10:07:09 UTC (rev 101887)
@@ -0,0 +1,305 @@
+=======
+CHANGES
+=======
+
+2.2.0 (2009-07-14)
+-----------------
+
+- Use chameleon for pagelets and layouts
+
+- Added 'pagelet' chameleon expression
+
+- Added 'queryPagelet' helper function
+
+- Do not use metal in default layouts
+
+- Use '+' for named pagelet instead of ';'
+
+
+2.1.0 (2009-06-20)
+------------------
+
+- Allow use interface as type for z3ext:pagelet directive
+
+- Allow use named typed pagelets with '@@pagelet' view and 'pagelet:' tales
+
+- Added 'pageletObject' view, it doesn't call pagelet render method
+
+
+2.0.8 (2009-06-03)
+------------------
+
+- Fixed next layout calculation for root object
+
+
+2.0.7 (2009-04-15)
+------------------
+
+- Do not use z3c.autoinclude
+
+
+2.0.6 (2009-03-11)
+------------------
+
+- Fixed discriminator for z3ext:pagelet directive
+
+- Allow use 'layout' pagelet type as template for layout
+
+- Update styles
+
+
+2.0.5 (2009-01-26)
+------------------
+
+- Update styles
+
+
+2.0.4 (2009-01-22)
+------------------
+
+- Pass permission to class required attributes
+
+
+2.0.3 (2009-01-20)
+------------------
+
+- Use __parent__ for layout quering
+
+
+2.0.2 (2009-01-08)
+------------------
+
+- Register layout for (view, for, layer), instead of view and for separatly
+
+
+2.0.1 (2008-12-25)
+------------------
+
+- Pagelet should implement provided interfaces
+
+
+2.0.0 (2008-12-22)
+------------------
+
+- Pagelet without name is not allowed
+
+- Added 'type' attribute to 'z3ext:pagelet'
+
+- Added 'z3ext:pageletType' directive for registering new pagelet types
+
+- multiple params is allowed for 'for' attribute
+
+- Removed pagelet 'manager' attribute
+
+- 'pagelet' tales expression and 'pagelet' view checks additional context IPageletContext
+  if exists use it as adapter parameter
+
+
+1.7.3 (2008-12-18)
+------------------
+
+- Use IPagelet instead of IPageTemplate for pagelet rendering
+
+
+1.7.2 (2008-12-17)
+------------------
+
+- Update default styles
+
+
+1.7.1 (2008-12-15)
+------------------
+
+- Check if context provides interface in @@pagelet view and pagelet: tales expresion
+
+
+1.7.0 (2008-12-11)
+------------------
+
+- Added `manager` attribute to z3ext:pagelet directive
+  this allow use getMultiAdapter((content, request, manager1, manager2, ...), IPagelet)
+
+- Use 'provides' schema for converting kwargs in z3ext:pagelet directive
+
+
+1.6.0 (2008-11-27)
+------------------
+
+- Added 'uid' attribute to z3ext:layout directive.
+  Send ILayoutCreatedEvent event only if layout has uid
+
+
+1.5.9 (2008-11-24)
+------------------
+
+- Fixed python2.4 compatibility
+
+
+1.5.7 (2008-11-17)
+------------------
+
+- Update css styles
+
+
+1.5.6 (2008-11-06)
+------------------
+
+- Register nameless pagelet only if provided interface is not
+inherited from IBrowserPublisher
+
+
+1.5.5 (2008-11-05)
+------------------
+
+- Add IPagelet interface to pagelet provides
+
+
+1.5.4 (2008-10-30)
+------------------
+
+- Added 'pagelet' tales expression (same as @@pagelet)
+
+- Update css styles
+
+
+1.5.3 (2008-10-16)
+------------------
+
+- Update css styles
+
+
+1.5.2 (2008-10-15)
+------------------
+
+- Render IPagelet adapter for @@pagelet view
+
+
+1.5.1 (2008-10-14)
+------------------
+
+- Fixed missing NotFount in @@pagelet 
+
+- Log errors in @@pagelet
+
+- Default css styles
+
+
+1.5.0 (2008-10-06)
+------------------
+
+- Added @@pagelet browser view for fast access pagelets
+
+
+1.4.6 (2008-10-03)
+------------------
+
+- Fixed bug with multple nameless pagelet
+
+
+1.4.5 (2008-08-18)
+------------------
+
+- `name` attribute is optional for <z3ext:pagelet/> directive
+
+
+1.4.4 (2008-07-22)
+------------------
+
+- Fix IPagelet adapter for content
+
+
+1.4.3 (2008-05-22)
+------------------
+
+- Added LayoutNotFound exception
+
+
+1.4.2 (2008-05-14)
+------------------
+
+- Remove unused interfaces
+
+- Tests updated
+
+
+1.4.1 (2008-04-23)
+------------------
+
+- Use newer version of z3ext.autoinclude
+
+
+1.4 (2008-03-21)
+----------------
+
+- Added z3ext:pagelet directive
+
+- Code cleanup
+
+- Moved to svn.zope.org
+
+
+1.3.2 (2008-03-06)
+------------------
+
+- Removed context layouts
+
+
+1.3.1 (2008-02-21)
+------------------
+
+- Code cleanup
+
+- Remove code related to zope.formlib
+
+
+1.3.0 (2008-02-20)
+------------------
+
+- Removed code related to z3c.form
+
+
+1.2.1 (2008-02-18)
+------------------
+
+- Added 'redirect' method to IBrowserPagelet, this is usefull
+  when we need redirect during 'update' method and we don't 
+  need render pagelet at all.
+
+- Added adapter to IPagelet for (context, request),
+  this adapter gets browser:defaultView for context and if it IPagelet return it
+
+
+1.2.0 (2008-02-13)
+------------------
+
+- Remove all code related to persistent templates
+
+
+1.1.2 (2008-02-12)
+------------------
+
+- Added 'title' and 'description' fields layout directive
+
+- check ILayoutTemplateTAL for ISite
+
+
+1.1.0 (2008-02-08)
+------------------
+
+- Added compatibility with z3c.template layouts
+
+- Added ILayoutTemplateTAL interface, other packages
+  can define adapter to this interface and change layout template
+  TAL program (layout customization)
+
+
+1.0.1 (2008-02-02)
+------------------
+
+- Added required dependencies
+
+
+1.0.0 (2008-01-15)
+------------------
+
+- Initial release

Modified: z3ext.layout/tags/2.2.0/setup.py
===================================================================
--- z3ext.layout/trunk/setup.py	2009-07-13 21:41:48 UTC (rev 101878)
+++ z3ext.layout/tags/2.2.0/setup.py	2009-07-14 10:07:09 UTC (rev 101887)
@@ -21,7 +21,7 @@
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
-version='2.2.0dev'
+version='2.2.0'
 
 
 setup(name='z3ext.layout',

Deleted: z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py	2009-07-13 21:41:48 UTC (rev 101878)
+++ z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py	2009-07-14 10:07:09 UTC (rev 101887)
@@ -1,220 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2008 Zope Corporation 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$
-"""
-from datetime import datetime
-
-import logging, sys
-from zope import interface, component
-from zope.component import queryUtility, queryAdapter, queryMultiAdapter
-from zope.publisher.browser import BrowserPage
-from zope.publisher.interfaces import NotFound
-from zope.publisher.interfaces.browser import IBrowserPublisher
-from zope.tales.expressions import SimpleModuleImporter
-from zope.app.publisher.browser import queryDefaultViewName
-
-from interfaces import ILayout, IPagelet, IPageletType, IPageletContext
-
-
-def queryLayout(view, request, context=None, iface=ILayout, name=''):
-    if context is None:
-        context = view.context
-
-    while context is not None:
-        layout = queryMultiAdapter((view, context, request), iface, name)
-        if layout is not None:
-            return layout
-
-        context = getattr(context, '__parent__', None)
-
-    return None
-
-
-def queryPagelet(context, request, name, modules=SimpleModuleImporter()):
-    pageletName = u''
-
-    if name:
-        splited = name.split(u'+', 1)
-        if len(splited) > 1:
-            name, pageletName = splited
-
-        if name:
-            iface = queryUtility(IPageletType, name)
-        else:
-            iface = IPagelet
-
-        if iface is None:
-            try:
-                iface, iname = name.rsplit('.', 1)
-                iface = getattr(modules[iface], iname)
-            except:
-                raise KeyError(name)
-    else:
-        iface = IPagelet
-
-    if iface.providedBy(context):
-        return context
-
-    contexts = queryAdapter(context, IPageletContext, name)
-    if contexts is not None:
-        required = [context]
-        if type(contexts) in (list, tuple):
-            required.extend(contexts)
-        else:
-            required.append(contexts)
-        required.append(request)
-        return queryMultiAdapter(required, iface, pageletName)
-    else:
-        return queryMultiAdapter((context, request), iface, pageletName)
-
-
- at interface.implementer(IPagelet)
- at component.adapter(interface.Interface, interface.Interface)
-def queryDefaultView(context, request):
-    name = queryDefaultViewName(context, request, None)
-    if name:
-        view = queryMultiAdapter((context, request), name=name)
-        if IPagelet.providedBy(view):
-            return view
-
-
-class BrowserPagelet(BrowserPage):
-    interface.implements(IPagelet)
-
-    template = None
-    layoutname = u''
-    isRedirected = False
-
-    def __init__(self, context, *args):
-        request = args[-1]
-        super(BrowserPagelet, self).__init__(context, request)
-
-        args = args[:-1]
-        self.contexts = args
-
-        for idx in range(len(args)):
-            setattr(self, 'context%s'%idx, args[idx])
-
-        self.__parent__ = context
-
-    def update(self):
-        pass
-
-    def render(self):
-        if self.template is not None:
-            return self.template()
-        else:
-            template = queryMultiAdapter((self, self.request), IPagelet)
-            if template is not None:
-                template.update()
-                return template.render()
-            raise LookupError("Can't find IPagelet for this pagelet.")
-
-    def updateAndRender(self):
-        self.update()
-        if self.isRedirected or not self.isAvailable():
-            return u''
-
-        return self.render()
-
-    def isAvailable(self):
-        return True
-
-    def redirect(self, url=''):
-        if url:
-            self.request.response.redirect(url)
-
-        self.isRedirected = True
-
-    def __call__(self, *args, **kw):
-        self.update()
-
-        if self.isRedirected or self.request.response.getStatus() in (302, 303):
-            return u''
-
-        layout = queryLayout(
-            self, self.request, self.__parent__, name=self.layoutname)
-        if layout is None:
-            return self.render()
-        else:
-            return layout()
-
-
-class PageletPublisher(object):
-    interface.implements(IBrowserPublisher)
-    component.adapts(interface.Interface, interface.Interface)
-
-    render = True
-
-    def __init__(self, context, request):
-        self.context = context
-        self.request = request
-
-    def publishTraverse(self, request, name):
-        try:
-            return self[name]
-        except KeyError:
-            pass
-
-        raise NotFound(self.context, name, request)
-
-    def __call__(self, name=''):
-        try:
-            return self[name]
-        except KeyError:
-            pass
-
-        return u''
-
-    def __getitem__(self, name):
-        view = queryPagelet(self.context, self.request, name)
-
-        if view is not None:
-            try:
-                if __debug__:
-                    dt = datetime.now()
-                    rendered = view.updateAndRender()
-
-                    td = datetime.now() - dt
-                    secs = (td.days*86400+td.seconds)+(0.000001*td.microseconds)
-                    print >>sys.stderr, 'pagelet:      ', secs, name
-                    return rendered
-                else:
-                    return view.updateAndRender()
-            except Exception, err:
-                log = logging.getLogger('z3ext.layout')
-                log.exception(err)
-
-        raise KeyError(name)
-
-    def browserDefault(self, request):
-        return self.context, ('',)
-
-
-class PageletObjectPublisher(PageletPublisher):
-
-    def __getitem__(self, name):
-        view = queryPagelet(self.context, self.request, name)
-
-        if view is not None:
-            try:
-                view.update()
-                return view
-            except Exception, err:
-                log = logging.getLogger('z3ext.layout')
-                log.exception(err)
-
-        raise KeyError(name)

Copied: z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py (from rev 101886, z3ext.layout/trunk/src/z3ext/layout/pagelet.py)
===================================================================
--- z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py	                        (rev 0)
+++ z3ext.layout/tags/2.2.0/src/z3ext/layout/pagelet.py	2009-07-14 10:07:09 UTC (rev 101887)
@@ -0,0 +1,209 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation 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$
+"""
+import logging, sys
+from zope import interface, component
+from zope.component import queryUtility, queryAdapter, queryMultiAdapter
+from zope.publisher.browser import BrowserPage
+from zope.publisher.interfaces import NotFound
+from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.tales.expressions import SimpleModuleImporter
+from zope.app.publisher.browser import queryDefaultViewName
+
+from interfaces import ILayout, IPagelet, IPageletType, IPageletContext
+
+
+def queryLayout(view, request, context=None, iface=ILayout, name=''):
+    if context is None:
+        context = view.context
+
+    while context is not None:
+        layout = queryMultiAdapter((view, context, request), iface, name)
+        if layout is not None:
+            return layout
+
+        context = getattr(context, '__parent__', None)
+
+    return None
+
+
+def queryPagelet(context, request, name, modules=SimpleModuleImporter()):
+    pageletName = u''
+
+    if name:
+        splited = name.split(u'+', 1)
+        if len(splited) > 1:
+            name, pageletName = splited
+
+        if name:
+            iface = queryUtility(IPageletType, name)
+        else:
+            iface = IPagelet
+
+        if iface is None:
+            try:
+                iface, iname = name.rsplit('.', 1)
+                iface = getattr(modules[iface], iname)
+            except:
+                raise KeyError(name)
+    else:
+        iface = IPagelet
+
+    if iface.providedBy(context):
+        return context
+
+    contexts = queryAdapter(context, IPageletContext, name)
+    if contexts is not None:
+        required = [context]
+        if type(contexts) in (list, tuple):
+            required.extend(contexts)
+        else:
+            required.append(contexts)
+        required.append(request)
+        return queryMultiAdapter(required, iface, pageletName)
+    else:
+        return queryMultiAdapter((context, request), iface, pageletName)
+
+
+ at interface.implementer(IPagelet)
+ at component.adapter(interface.Interface, interface.Interface)
+def queryDefaultView(context, request):
+    name = queryDefaultViewName(context, request, None)
+    if name:
+        view = queryMultiAdapter((context, request), name=name)
+        if IPagelet.providedBy(view):
+            return view
+
+
+class BrowserPagelet(BrowserPage):
+    interface.implements(IPagelet)
+
+    template = None
+    layoutname = u''
+    isRedirected = False
+
+    def __init__(self, context, *args):
+        request = args[-1]
+        super(BrowserPagelet, self).__init__(context, request)
+
+        args = args[:-1]
+        self.contexts = args
+
+        for idx in range(len(args)):
+            setattr(self, 'context%s'%idx, args[idx])
+
+        self.__parent__ = context
+
+    def update(self):
+        pass
+
+    def render(self):
+        if self.template is not None:
+            return self.template()
+        else:
+            template = queryMultiAdapter((self, self.request), IPagelet)
+            if template is not None:
+                template.update()
+                return template.render()
+            raise LookupError("Can't find IPagelet for this pagelet.")
+
+    def updateAndRender(self):
+        self.update()
+        if self.isRedirected or not self.isAvailable():
+            return u''
+
+        return self.render()
+
+    def isAvailable(self):
+        return True
+
+    def redirect(self, url=''):
+        if url:
+            self.request.response.redirect(url)
+
+        self.isRedirected = True
+
+    def __call__(self, *args, **kw):
+        self.update()
+
+        if self.isRedirected or self.request.response.getStatus() in (302, 303):
+            return u''
+
+        layout = queryLayout(
+            self, self.request, self.__parent__, name=self.layoutname)
+        if layout is None:
+            return self.render()
+        else:
+            return layout()
+
+
+class PageletPublisher(object):
+    interface.implements(IBrowserPublisher)
+    component.adapts(interface.Interface, interface.Interface)
+
+    render = True
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+    def publishTraverse(self, request, name):
+        try:
+            return self[name]
+        except KeyError:
+            pass
+
+        raise NotFound(self.context, name, request)
+
+    def __call__(self, name=''):
+        try:
+            return self[name]
+        except KeyError:
+            pass
+
+        return u''
+
+    def __getitem__(self, name):
+        view = queryPagelet(self.context, self.request, name)
+
+        if view is not None:
+            try:
+                return view.updateAndRender()
+            except Exception, err:
+                log = logging.getLogger('z3ext.layout')
+                log.exception(err)
+
+        raise KeyError(name)
+
+    def browserDefault(self, request):
+        return self.context, ('',)
+
+
+class PageletObjectPublisher(PageletPublisher):
+
+    def __getitem__(self, name):
+        view = queryPagelet(self.context, self.request, name)
+
+        if view is not None:
+            try:
+                view.update()
+                return view
+            except Exception, err:
+                log = logging.getLogger('z3ext.layout')
+                log.exception(err)
+
+        raise KeyError(name)

Deleted: z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tales.py	2009-07-13 21:41:48 UTC (rev 101878)
+++ z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py	2009-07-14 10:07:09 UTC (rev 101887)
@@ -1,60 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2008 Zope Corporation 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.
-#
-##############################################################################
-""" 'pagelet' tales expression registrations
-
-$Id: tales.py 2720 2008-08-25 11:15:10Z fafhrd91 $
-"""
-from datetime import datetime
-import logging, sys
-from zope.tales.expressions import StringExpr, SimpleModuleImporter
-from zope.component import queryUtility, queryAdapter, queryMultiAdapter
-
-from pagelet import queryPagelet
-from interfaces import IPagelet, IPageletType, IPageletContext
-
-
-class PageletExpression(object):
-
-    def render(self, context, request, view, name):
-        try:
-            pagelet = queryPagelet(context, request, name)
-            if pagelet is not None:
-                if __debug__:
-                    dt = datetime.now()
-                    rendered = pagelet.updateAndRender()
-
-                    td = datetime.now() - dt
-                    secs = (td.days*86400+td.seconds)+(0.000001*td.microseconds)
-                    print >>sys.stderr, 'pagelet:      ', secs, name
-  
-                    return rendered
-                else:
-                    return pagelet.updateAndRender()
-        except Exception, err:
-            log = logging.getLogger('z3ext.layout')
-            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)

Copied: z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py (from rev 101886, z3ext.layout/trunk/src/z3ext/layout/tales.py)
===================================================================
--- z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py	                        (rev 0)
+++ z3ext.layout/tags/2.2.0/src/z3ext/layout/tales.py	2009-07-14 10:07:09 UTC (rev 101887)
@@ -0,0 +1,49 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation 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.
+#
+##############################################################################
+""" 'pagelet' tales expression registrations
+
+$Id: tales.py 2720 2008-08-25 11:15:10Z fafhrd91 $
+"""
+import logging, sys
+from zope.tales.expressions import StringExpr, SimpleModuleImporter
+from zope.component import queryUtility, queryAdapter, queryMultiAdapter
+
+from pagelet import queryPagelet
+from interfaces import IPagelet, IPageletType, IPageletContext
+
+
+class PageletExpression(object):
+
+    def render(self, context, request, view, name):
+        try:
+            pagelet = queryPagelet(context, request, name)
+            if pagelet is not None:
+                return pagelet.updateAndRender()
+        except Exception, err:
+            log = logging.getLogger('z3ext.layout')
+            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)



More information about the Checkins mailing list