[Checkins] SVN: z3ext.layout/tags/1.5.0/ release tag
Nikolay Kim
fafhrd at datacom.kz
Sun Oct 5 15:16:54 EDT 2008
Log message for revision 91784:
release tag
Changed:
A z3ext.layout/tags/1.5.0/
D z3ext.layout/tags/1.5.0/CHANGES.txt
A z3ext.layout/tags/1.5.0/CHANGES.txt
D z3ext.layout/tags/1.5.0/setup.py
A z3ext.layout/tags/1.5.0/setup.py
D z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml
A z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml
D z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py
A z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py
D z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py
A z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py
D z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt
A z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt
D z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py
A z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py
-=-
Copied: z3ext.layout/tags/1.5.0 (from rev 91713, z3ext.layout/trunk)
Deleted: z3ext.layout/tags/1.5.0/CHANGES.txt
===================================================================
--- z3ext.layout/trunk/CHANGES.txt 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/CHANGES.txt 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,117 +0,0 @@
-=======
-CHANGES
-=======
-
-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/1.5.0/CHANGES.txt (from rev 91783, z3ext.layout/trunk/CHANGES.txt)
===================================================================
--- z3ext.layout/tags/1.5.0/CHANGES.txt (rev 0)
+++ z3ext.layout/tags/1.5.0/CHANGES.txt 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,123 @@
+=======
+CHANGES
+=======
+
+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
Deleted: z3ext.layout/tags/1.5.0/setup.py
===================================================================
--- z3ext.layout/trunk/setup.py 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/setup.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,75 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 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.
-#
-##############################################################################
-"""Setup for z3ext.layout package
-
-$Id$
-"""
-import sys, os
-from setuptools import setup, find_packages
-
-def read(*rnames):
- return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-
-version='1.4.7dev'
-
-
-setup(name='z3ext.layout',
- version=version,
- description="A package implementing advanced Page Template patterns.",
- long_description=(
- 'Detailed Documentation\n' +
- '======================\n'
- + '\n\n' +
- read('src', 'z3ext', 'layout', 'README.txt')
- + '\n\n' +
- read('CHANGES.txt')
- ),
- classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Environment :: Web Environment',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: Zope Public License',
- 'Programming Language :: Python',
- 'Natural Language :: English',
- 'Operating System :: OS Independent',
- 'Topic :: Internet :: WWW/HTTP',
- 'Framework :: Zope3'],
- author='Nikolay Kim',
- author_email='fafhrd91 at gmail.com',
- url='http://z3ext.net/',
- license='ZPL 2.1',
- packages=find_packages('src'),
- package_dir = {'':'src'},
- namespace_packages=['z3ext'],
- install_requires = ['setuptools',
- 'zope.event',
- 'zope.schema',
- 'zope.component',
- 'zope.interface',
- 'zope.security',
- 'zope.publisher',
- 'zope.configuration',
- 'zope.pagetemplate',
- 'zope.app.component',
- 'zope.app.publisher',
- 'zope.app.pagetemplate',
- 'z3c.autoinclude',
- ],
- extras_require = dict(test=['zope.app.container',
- 'zope.app.testing',
- 'zope.testing',
- ]),
- include_package_data = True,
- zip_safe = False
- )
Copied: z3ext.layout/tags/1.5.0/setup.py (from rev 91783, z3ext.layout/trunk/setup.py)
===================================================================
--- z3ext.layout/tags/1.5.0/setup.py (rev 0)
+++ z3ext.layout/tags/1.5.0/setup.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,75 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Setup for z3ext.layout package
+
+$Id$
+"""
+import sys, os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+version='1.5.0'
+
+
+setup(name='z3ext.layout',
+ version=version,
+ description="A package implementing advanced Page Template patterns.",
+ long_description=(
+ 'Detailed Documentation\n' +
+ '======================\n'
+ + '\n\n' +
+ read('src', 'z3ext', 'layout', 'README.txt')
+ + '\n\n' +
+ read('CHANGES.txt')
+ ),
+ classifiers=[
+ 'Development Status :: 5 - Production/Stable',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Zope Public License',
+ 'Programming Language :: Python',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Framework :: Zope3'],
+ author='Nikolay Kim',
+ author_email='fafhrd91 at gmail.com',
+ url='http://z3ext.net/',
+ license='ZPL 2.1',
+ packages=find_packages('src'),
+ package_dir = {'':'src'},
+ namespace_packages=['z3ext'],
+ install_requires = ['setuptools',
+ 'zope.event',
+ 'zope.schema',
+ 'zope.component',
+ 'zope.interface',
+ 'zope.security',
+ 'zope.publisher',
+ 'zope.configuration',
+ 'zope.pagetemplate',
+ 'zope.app.component',
+ 'zope.app.publisher',
+ 'zope.app.pagetemplate',
+ 'z3c.autoinclude',
+ ],
+ extras_require = dict(test=['zope.app.container',
+ 'zope.app.testing',
+ 'zope.testing',
+ ]),
+ include_package_data = True,
+ zip_safe = False
+ )
Deleted: z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/configure.zcml 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,56 +0,0 @@
-<configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:zcml="http://namespaces.zope.org/zcml"
- xmlns:z3ext="http://namespaces.zope.org/z3ext"
- i18n_domain="z3ext">
-
- <includeDependencies package="z3ext.layout" />
-
- <!-- adapter provides IPagelet for (context, request) -->
- <adapter factory=".pagelet.queryPagelet" />
-
- <!-- default layouts -->
- <z3ext:layout
- layout="viewspace"
- for="zope.app.component.interfaces.ISite"
- title="Default layout (z3ext.layout)"
- description="Default layout, registered for IDefaultBrowserLayer."
- template="layoutcontent.pt" />
-
- <z3ext:layout
- name="viewspace"
- layout="workspace"
- title="Viewspace layout (z3ext.layout)"
- description="Default viewpsace layout, registered for IDefaultBrowserLayer."
- for="zope.app.component.interfaces.ISite"
- template="layoutviewspace.pt" />
-
- <z3ext:layout
- name="workspace"
- layout="portal"
- title="Workspace layout (z3ext.layout)"
- description="Default workspace layout, registered for IDefaultBrowserLayer."
- for="zope.app.component.interfaces.ISite"
- template="layoutworkspace.pt" />
-
- <z3ext:layout
- name="portal"
- title="Portal layout (z3ext.layout)"
- description="Default portal layout, registered for IDefaultBrowserLayer"
- for="zope.app.component.interfaces.ISite"
- template="layoutportal.pt" />
-
- <!-- Registering documentation with API doc -->
- <configure
- xmlns:zcml="http://namespaces.zope.org/zcml"
- xmlns:apidoc="http://namespaces.zope.org/apidoc"
- zcml:condition="have apidoc">
-
- <apidoc:bookchapter
- id="z3ext-layout"
- title="z3ext.layout - Template Layouts"
- doc_path="README.txt"
- parent="z3ext" />
- </configure>
-
-</configure>
Copied: z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml (from rev 91783, z3ext.layout/trunk/src/z3ext/layout/configure.zcml)
===================================================================
--- z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml (rev 0)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/configure.zcml 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,67 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:zcml="http://namespaces.zope.org/zcml"
+ xmlns:z3ext="http://namespaces.zope.org/z3ext"
+ i18n_domain="z3ext">
+
+ <includeDependencies package="z3ext.layout" />
+
+ <!-- adapter provides IPagelet for (context, request) -->
+ <adapter factory=".pagelet.queryPagelet" />
+
+ <!-- @@pagelet view -->
+ <adapter
+ name="pagelet"
+ factory=".pagelet.PageletPublisher" />
+
+ <class class=".pagelet.PageletPublisher">
+ <allow
+ attributes="__getitem__"
+ interface="zope.publisher.interfaces.browser.IBrowserPublisher" />
+ </class>
+
+ <!-- default layouts -->
+ <z3ext:layout
+ layout="viewspace"
+ for="zope.app.component.interfaces.ISite"
+ title="Default layout (z3ext.layout)"
+ description="Default layout, registered for IDefaultBrowserLayer."
+ template="layoutcontent.pt" />
+
+ <z3ext:layout
+ name="viewspace"
+ layout="workspace"
+ title="Viewspace layout (z3ext.layout)"
+ description="Default viewpsace layout, registered for IDefaultBrowserLayer."
+ for="zope.app.component.interfaces.ISite"
+ template="layoutviewspace.pt" />
+
+ <z3ext:layout
+ name="workspace"
+ layout="portal"
+ title="Workspace layout (z3ext.layout)"
+ description="Default workspace layout, registered for IDefaultBrowserLayer."
+ for="zope.app.component.interfaces.ISite"
+ template="layoutworkspace.pt" />
+
+ <z3ext:layout
+ name="portal"
+ title="Portal layout (z3ext.layout)"
+ description="Default portal layout, registered for IDefaultBrowserLayer"
+ for="zope.app.component.interfaces.ISite"
+ template="layoutportal.pt" />
+
+ <!-- Registering documentation with API doc -->
+ <configure
+ xmlns:zcml="http://namespaces.zope.org/zcml"
+ xmlns:apidoc="http://namespaces.zope.org/apidoc"
+ zcml:condition="have apidoc">
+
+ <apidoc:bookchapter
+ id="z3ext-layout"
+ title="z3ext.layout - Template Layouts"
+ doc_path="README.txt"
+ parent="z3ext" />
+ </configure>
+
+</configure>
Deleted: z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/layout.py 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,122 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 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 zope import interface
-from zope.publisher import browser
-from zope.component import getMultiAdapter
-
-from zope.app.pagetemplate.engine import TrustedAppPT
-from zope.pagetemplate.pagetemplatefile import PageTemplateFile
-
-from z3ext.layout.pagelet import queryLayout
-from z3ext.layout.interfaces import LayoutNotFound, ILayout, 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):
- 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):
- 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['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)
-
- mainview = None
- maincontext = None
-
- def __init__(self, view, context, request):
- self.view = view
- self.context = context
- self.request = request
-
- self.__parent__ = view.context
-
- def update(self):
- pass
-
- def render(self):
- return self.template(self)
-
- def __call__(self, layout=None, view=None, *args, **kw):
- if view is None:
- view = self.view
- self.mainview = view
- self.maincontext = view.context
-
- layoutview = self.view
- if layout is not None:
- self.view = layout
-
- self.update()
-
- if self.layout is None:
- return self.render()
-
- if self.__name__ != self.layout:
- layout = queryLayout(view, self.request, name=self.layout)
- if layout is not None:
- return layout(layout=self, view=view, *args, **kw)
- else:
- if layoutview.context is not self.context.__parent__:
- context = self.context.__parent__
- else:
- context = getattr(self.context.__parent__, '__parent__')
-
- layout = queryLayout(self, self.request, context, name=self.layout)
- if layout is not None:
- return layout(view=view, *args, **kw)
-
- layout = queryLayout(self.view, self.context, self.request, name=self.layout)
- if layout is not None:
- return layout(*args, **kw)
-
- raise LayoutNotFound(self.layout)
Copied: z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py (from rev 91783, z3ext.layout/trunk/src/z3ext/layout/layout.py)
===================================================================
--- z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py (rev 0)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/layout.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,121 @@
+##############################################################################
+#
+# Copyright (c) 2007 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 zope import interface
+from zope.publisher import browser
+from zope.component import getMultiAdapter
+from zope.app.pagetemplate.engine import TrustedAppPT
+from zope.pagetemplate.pagetemplatefile import PageTemplateFile
+
+from z3ext.layout.pagelet import queryLayout
+from z3ext.layout.interfaces import LayoutNotFound, ILayout, 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):
+ 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):
+ 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['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)
+
+ mainview = None
+ maincontext = None
+
+ def __init__(self, view, context, request):
+ self.view = view
+ self.context = context
+ self.request = request
+
+ self.__parent__ = view.context
+
+ def update(self):
+ pass
+
+ def render(self):
+ return self.template(self)
+
+ def __call__(self, layout=None, view=None, *args, **kw):
+ if view is None:
+ view = self.view
+ self.mainview = view
+ self.maincontext = view.context
+
+ layoutview = self.view
+ if layout is not None:
+ self.view = layout
+
+ self.update()
+
+ if self.layout is None:
+ return self.render()
+
+ if self.__name__ != self.layout:
+ layout = queryLayout(view, self.request, name=self.layout)
+ if layout is not None:
+ return layout(layout=self, view=view, *args, **kw)
+ else:
+ if layoutview.context is not self.context.__parent__:
+ context = self.context.__parent__
+ else:
+ context = getattr(self.context.__parent__, '__parent__')
+
+ layout = queryLayout(self, self.request, context, name=self.layout)
+ if layout is not None:
+ return layout(view=view, *args, **kw)
+
+ layout = queryLayout(self.view, self.context, self.request, name=self.layout)
+ if layout is not None:
+ return layout(*args, **kw)
+
+ raise LayoutNotFound(self.layout)
Deleted: z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.py 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,91 +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 zope import interface, component
-from zope.component import queryMultiAdapter
-from zope.publisher.browser import BrowserPage
-from zope.pagetemplate.interfaces import IPageTemplate
-from zope.app.publisher.browser import queryDefaultViewName
-
-from z3ext.layout.interfaces import IPagelet, ILayout
-
-
- at interface.implementer(IPagelet)
- at component.adapter(interface.Interface, interface.Interface)
-def queryPagelet(context, request):
- name = queryDefaultViewName(context, request, 'index.html')
- if name:
- view = queryMultiAdapter((context, request), name=name)
- if IPagelet.providedBy(view):
- return view
-
-
-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
-
-
-class BrowserPagelet(BrowserPage):
- interface.implements(IPagelet)
-
- layoutname = u''
-
- index = None
- template = None
-
- def update(self):
- pass
-
- def render(self):
- template = queryMultiAdapter((self, self.request), IPageTemplate)
-
- if template is None:
- template = self.template or self.index
- if template is None:
- raise LookupError("Can't find IPageTemplate for pagelet.")
- return template()
-
- return template(self)
-
- def __call__(self):
- self.update()
-
- if self.isRedirected:
- return u''
-
- layout = queryLayout(self, self.request, name=self.layoutname)
- if layout is None:
- return self.render()
- else:
- return layout()
-
- isRedirected = False
-
- def redirect(self, url=''):
- if url:
- self.request.response.redirect(url)
-
- self.isRedirected = True
Copied: z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py (from rev 91783, z3ext.layout/trunk/src/z3ext/layout/pagelet.py)
===================================================================
--- z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py (rev 0)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,128 @@
+##############################################################################
+#
+# 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 zope import interface, component
+from zope.component import queryMultiAdapter
+from zope.publisher.browser import BrowserPage
+from zope.publisher.interfaces.browser import IBrowserPublisher
+from zope.tales.expressions import SimpleModuleImporter
+from zope.pagetemplate.interfaces import IPageTemplate
+from zope.app.publisher.browser import queryDefaultViewName
+
+from z3ext.layout.interfaces import IPagelet, ILayout
+
+
+ at interface.implementer(IPagelet)
+ at component.adapter(interface.Interface, interface.Interface)
+def queryPagelet(context, request):
+ name = queryDefaultViewName(context, request, 'index.html')
+ if name:
+ view = queryMultiAdapter((context, request), name=name)
+ if IPagelet.providedBy(view):
+ return view
+
+
+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
+
+
+class BrowserPagelet(BrowserPage):
+ interface.implements(IPagelet)
+
+ layoutname = u''
+
+ index = None
+ template = None
+
+ def update(self):
+ pass
+
+ def render(self):
+ template = queryMultiAdapter((self, self.request), IPageTemplate)
+
+ if template is None:
+ template = self.template or self.index
+ if template is None:
+ raise LookupError("Can't find IPageTemplate for pagelet.")
+ return template()
+
+ return template(self)
+
+ def __call__(self):
+ self.update()
+
+ if self.isRedirected:
+ return u''
+
+ layout = queryLayout(self, self.request, name=self.layoutname)
+ if layout is None:
+ return self.render()
+ else:
+ return layout()
+
+ isRedirected = False
+
+ def redirect(self, url=''):
+ if url:
+ self.request.response.redirect(url)
+
+ self.isRedirected = True
+
+
+class PageletPublisher(object):
+ interface.implements(IBrowserPublisher)
+ component.adapts(interface.Interface, interface.Interface)
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+ self.modules = SimpleModuleImporter()
+
+ def publishTraverse(self, request, name):
+ try:
+ return self[name]
+ except KeyError:
+ pass
+
+ raise NotFound(self.context, name, request)
+
+ def __getitem__(self, name):
+ if name:
+ iface, name = name.rsplit('.', 1)
+ iface = getattr(self.modules[iface], name)
+ else:
+ iface = IPagelet
+
+ view = queryMultiAdapter((self.context, self.request), iface)
+ if view is not None:
+ view.update()
+ return view.render()
+
+ raise KeyError(name)
+
+ def browserDefault(self, request):
+ return self.context, ('',)
Deleted: z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/pagelet.txt 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,260 +0,0 @@
-=================
-Pagelet directive
-=================
-
-Show how we can use the pagelet directive. Register the meta configuration for
-the directive.
-
- >>> import os, tempfile
- >>> from zope import interface, component
- >>> from zope.configuration import xmlconfig
- >>> import z3ext.layout
- >>> context = xmlconfig.file('meta.zcml', z3ext.layout)
-
-We need also a custom pagelet class:
-
- >>> from z3ext.layout.pagelet import BrowserPagelet
- >>> class MyPagelet(BrowserPagelet):
- ... """Custom pagelet"""
-
-Register a pagelet within the directive with minimal attributes:
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="index.html"
- ... class="z3ext.layout.TESTS.MyPagelet"
- ... permission="zope.Public"
- ... />
- ... </configure>
- ... """, context)
-
-Let's get the pagelet
-
- >>> from zope.publisher.browser import TestRequest
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='index.html')
-
-and check them:
-
- >>> pagelet
- <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.MyPagelet'> ...>
-
- >>> pagelet.context
- <object object at ...>
-
-Register the pagelet with a different name and more attributes provided from
-the directive. We also use a custom attribute called label here.
-Also we don't use BrowserPagelet as parent class, pagelet directive automaticly
-adds BrowserPagetlet to bases classes. Let's define some more components...
-
- >>> class SecondPagelet(object):
- ... label = u''
-
- >>> import zope.interface
- >>> class IContent(zope.interface.Interface):
- ... """Content interface."""
-
- >>> class Content(object):
- ... zope.interface.implements(IContent)
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="custom.html"
- ... class="z3ext.layout.TESTS.SecondPagelet"
- ... for="z3ext.layout.TESTS.IContent"
- ... permission="zope.Public"
- ... label="my Label" />
- ... </configure>
- ... """, context)
-
-Get the pagelet for the new content object
-
- >>> import zope.component
- >>> pagelet = zope.component.queryMultiAdapter((Content(), TestRequest()),
- ... name='custom.html')
-
-and check them:
-
- >>> pagelet
- <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.SecondPagelet'> ...>
-
- >>> pagelet.label
- u'my Label'
-
-We also can provide another interface then the IPagelet within the directive.
-Such a interface must be inherited from IPagelet.
-
- >>> class NewPagelet(BrowserPagelet):
- ... """New pagelet"""
-
-Now register the pagelet within a interface.
-
- >>> class INewPagelet(interface.Interface):
- ... """New pagelet interface."""
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="new.html"
- ... class="z3ext.layout.TESTS.NewPagelet"
- ... permission="zope.Public"
- ... provides="z3ext.layout.TESTS.INewPagelet" />
- ... </configure>
- ... """, context)
-
-And if we get the pagelet, we can see that the object provides the new
-pagelet interface:
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='new.html')
- >>> pagelet
- <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.NewPagelet'> ...>
-
- >>> INewPagelet.providedBy(pagelet)
- True
-
-We can create pagelet without specific class
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="noclass.html"
- ... permission="zope.Public" />
- ... </configure>
- ... """, context)
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='noclass.html')
- >>> pagelet
- <z3ext.layout.zcml.PageletClass from None ...>
-
-
-We can create pagelet with template:
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="unknown.html"
- ... template="unknown.pt"
- ... permission="zope.Public" />
- ... </configure>
- ... """, context)
- Traceback (most recent call last):
- ...
- ZopeXMLConfigurationError: File "<string>", line 3.2-6.33
- ConfigurationError: ('No such file', ...unknown.pt')
-
- >>> temp_dir = tempfile.mkdtemp()
- >>> template = os.path.join(temp_dir, 'pagelet.pt')
- >>> open(template, 'w').write('''<div>My pagelet</div>''')
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... name="template.html"
- ... template="%s"
- ... permission="zope.Public" />
- ... </configure>
- ... """%template, context)
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='template.html')
- >>> pagelet
- <z3ext.layout.zcml.PageletClass from None ...>
-
- >>> pagelet.template
- <BoundPageTemplateFile of <z3ext.layout.zcml.PageletClass from None ...>>
-
-Pagelet rendering
-
- >>> print pagelet.render()
- <div>My pagelet</div>
- <BLANKLINE>
-
-We should use page template as template for pagelet or we should
-provide IPageTemplate adapter for pagelet
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='noclass.html')
- >>> pagelet.render()
- Traceback (most recent call last):
- ...
- LookupError: Can't find IPageTemplate for pagelet.
-
- >>> from zope.pagetemplate.interfaces import IPageTemplate
- >>> from zope.app.pagetemplate import ViewPageTemplateFile
- >>> pt = ViewPageTemplateFile(template)
- >>> def getPT(context, request):
- ... return pt
- >>> component.getSiteManager().registerAdapter(
- ... getPT, (pagelet.__class__, interface.Interface), IPageTemplate, '')
-
- >>> print pagelet()
- <div>My pagelet</div>
- <BLANKLINE>
-
-We can redirect during pagelet rendering, in this case render method
-doesn't call.
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
- ... name='noclass.html')
- >>> pagelet.redirect('/')
- >>> pagelet.isRedirected
- True
- >>> pagelet()
- u''
-
-We can get default pagelet view for content. First register default view
-
- >>> from zope.component.interfaces import IDefaultViewName
- >>> component.getSiteManager().registerAdapter(
- ... 'index.html', (interface.Interface, interface.Interface),
- ... IDefaultViewName)
-
- >>> view = component.getMultiAdapter(
- ... (object(), TestRequest()), z3ext.layout.interfaces.IPagelet)
-
- >>> view
- <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.MyPagelet'> ...>
-
- >>> view.__name__
- u'index.html'
-
-
-Pagelet without name
-
- >>> class IMyPagelet1(interface.Interface):
- ... pass
-
- >>> class IMyPagelet2(interface.Interface):
- ... pass
-
- >>> template2 = os.path.join(temp_dir, 'pagelet2.pt')
- >>> open(template2, 'w').write('''<div>My pagelet2</div>''')
-
- >>> context = xmlconfig.string("""
- ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
- ... <z3ext:pagelet
- ... template="%s"
- ... provides="z3ext.layout.TESTS.IMyPagelet1"
- ... permission="zope.Public" />
- ... <z3ext:pagelet
- ... template="%s"
- ... provides="z3ext.layout.TESTS.IMyPagelet2"
- ... permission="zope.Public" />
- ... </configure>
- ... """%(template, template2), context)
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()), IMyPagelet1)
- >>> IMyPagelet1.providedBy(pagelet)
- True
- >>> pagelet.render()
- u'<div>My pagelet</div>'
-
- >>> pagelet = component.queryMultiAdapter((object(), TestRequest()), IMyPagelet2)
- >>> IMyPagelet2.providedBy(pagelet)
- True
- >>> pagelet.render()
- u'<div>My pagelet2</div>'
\ No newline at end of file
Copied: z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt (from rev 91783, z3ext.layout/trunk/src/z3ext/layout/pagelet.txt)
===================================================================
--- z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt (rev 0)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/pagelet.txt 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,273 @@
+=================
+Pagelet directive
+=================
+
+Show how we can use the pagelet directive. Register the meta configuration for
+the directive.
+
+ >>> import os, tempfile
+ >>> from zope import interface, component
+ >>> from zope.configuration import xmlconfig
+ >>> import z3ext.layout
+ >>> context = xmlconfig.file('meta.zcml', z3ext.layout)
+
+We need also a custom pagelet class:
+
+ >>> from z3ext.layout.pagelet import BrowserPagelet
+ >>> class MyPagelet(BrowserPagelet):
+ ... """Custom pagelet"""
+
+Register a pagelet within the directive with minimal attributes:
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="index.html"
+ ... class="z3ext.layout.TESTS.MyPagelet"
+ ... permission="zope.Public"
+ ... />
+ ... </configure>
+ ... """, context)
+
+Let's get the pagelet
+
+ >>> from zope.publisher.browser import TestRequest
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='index.html')
+
+and check them:
+
+ >>> pagelet
+ <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.MyPagelet'> ...>
+
+ >>> pagelet.context
+ <object object at ...>
+
+Register the pagelet with a different name and more attributes provided from
+the directive. We also use a custom attribute called label here.
+Also we don't use BrowserPagelet as parent class, pagelet directive automaticly
+adds BrowserPagetlet to bases classes. Let's define some more components...
+
+ >>> class SecondPagelet(object):
+ ... label = u''
+
+ >>> import zope.interface
+ >>> class IContent(zope.interface.Interface):
+ ... """Content interface."""
+
+ >>> class Content(object):
+ ... zope.interface.implements(IContent)
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="custom.html"
+ ... class="z3ext.layout.TESTS.SecondPagelet"
+ ... for="z3ext.layout.TESTS.IContent"
+ ... permission="zope.Public"
+ ... label="my Label" />
+ ... </configure>
+ ... """, context)
+
+Get the pagelet for the new content object
+
+ >>> import zope.component
+ >>> pagelet = zope.component.queryMultiAdapter((Content(), TestRequest()),
+ ... name='custom.html')
+
+and check them:
+
+ >>> pagelet
+ <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.SecondPagelet'> ...>
+
+ >>> pagelet.label
+ u'my Label'
+
+We also can provide another interface then the IPagelet within the directive.
+Such a interface must be inherited from IPagelet.
+
+ >>> class NewPagelet(BrowserPagelet):
+ ... """New pagelet"""
+
+Now register the pagelet within a interface.
+
+ >>> class INewPagelet(interface.Interface):
+ ... """New pagelet interface."""
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="new.html"
+ ... class="z3ext.layout.TESTS.NewPagelet"
+ ... permission="zope.Public"
+ ... provides="z3ext.layout.TESTS.INewPagelet" />
+ ... </configure>
+ ... """, context)
+
+And if we get the pagelet, we can see that the object provides the new
+pagelet interface:
+
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='new.html')
+ >>> pagelet
+ <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.NewPagelet'> ...>
+
+ >>> INewPagelet.providedBy(pagelet)
+ True
+
+We can create pagelet without specific class
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="noclass.html"
+ ... permission="zope.Public" />
+ ... </configure>
+ ... """, context)
+
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='noclass.html')
+ >>> pagelet
+ <z3ext.layout.zcml.PageletClass from None ...>
+
+
+We can create pagelet with template:
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="unknown.html"
+ ... template="unknown.pt"
+ ... permission="zope.Public" />
+ ... </configure>
+ ... """, context)
+ Traceback (most recent call last):
+ ...
+ ZopeXMLConfigurationError: File "<string>", line 3.2-6.33
+ ConfigurationError: ('No such file', ...unknown.pt')
+
+ >>> temp_dir = tempfile.mkdtemp()
+ >>> template = os.path.join(temp_dir, 'pagelet.pt')
+ >>> open(template, 'w').write('''<div>My pagelet</div>''')
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... name="template.html"
+ ... template="%s"
+ ... permission="zope.Public" />
+ ... </configure>
+ ... """%template, context)
+
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='template.html')
+ >>> pagelet
+ <z3ext.layout.zcml.PageletClass from None ...>
+
+ >>> pagelet.template
+ <BoundPageTemplateFile of <z3ext.layout.zcml.PageletClass from None ...>>
+
+Pagelet rendering
+
+ >>> print pagelet.render()
+ <div>My pagelet</div>
+ <BLANKLINE>
+
+We should use page template as template for pagelet or we should
+provide IPageTemplate adapter for pagelet
+
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='noclass.html')
+ >>> pagelet.render()
+ Traceback (most recent call last):
+ ...
+ LookupError: Can't find IPageTemplate for pagelet.
+
+ >>> from zope.pagetemplate.interfaces import IPageTemplate
+ >>> from zope.app.pagetemplate import ViewPageTemplateFile
+ >>> pt = ViewPageTemplateFile(template)
+ >>> def getPT(context, request):
+ ... return pt
+ >>> component.getSiteManager().registerAdapter(
+ ... getPT, (pagelet.__class__, interface.Interface), IPageTemplate, '')
+
+ >>> print pagelet()
+ <div>My pagelet</div>
+ <BLANKLINE>
+
+We can redirect during pagelet rendering, in this case render method
+doesn't call.
+
+ >>> pagelet = component.queryMultiAdapter((object(), TestRequest()),
+ ... name='noclass.html')
+ >>> pagelet.redirect('/')
+ >>> pagelet.isRedirected
+ True
+ >>> pagelet()
+ u''
+
+We can get default pagelet view for content. First register default view
+
+ >>> from zope.component.interfaces import IDefaultViewName
+ >>> component.getSiteManager().registerAdapter(
+ ... 'index.html', (interface.Interface, interface.Interface),
+ ... IDefaultViewName)
+
+ >>> view = component.getMultiAdapter(
+ ... (object(), TestRequest()), z3ext.layout.interfaces.IPagelet)
+
+ >>> view
+ <z3ext.layout.zcml.PageletClass from <class 'z3ext.layout.TESTS.MyPagelet'> ...>
+
+ >>> view.__name__
+ u'index.html'
+
+
+Pagelet without name
+
+ >>> class IMyPagelet1(interface.Interface):
+ ... pass
+
+ >>> class IMyPagelet2(interface.Interface):
+ ... pass
+
+ >>> template2 = os.path.join(temp_dir, 'pagelet2.pt')
+ >>> open(template2, 'w').write('''<div>My pagelet2</div>''')
+
+ >>> from z3ext.layout.tests import ITestPagelet
+
+ >>> context = xmlconfig.string("""
+ ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
+ ... <z3ext:pagelet
+ ... template="%s"
+ ... provides="z3ext.layout.tests.ITestPagelet"
+ ... permission="zope.Public" />
+ ... <z3ext:pagelet
+ ... template="%s"
+ ... provides="z3ext.layout.TESTS.IMyPagelet2"
+ ... permission="zope.Public" />
+ ... </configure>
+ ... """%(template, template2), context)
+
+ >>> pagelet = component.queryMultiAdapter(
+ ... (object(), TestRequest()), ITestPagelet)
+
+ >>> ITestPagelet.providedBy(pagelet)
+ True
+ >>> pagelet.render()
+ u'<div>My pagelet</div>'
+
+ >>> request = TestRequest()
+ >>> pagelet = component.queryMultiAdapter((object(), request), IMyPagelet2)
+ >>> IMyPagelet2.providedBy(pagelet)
+ True
+ >>> pagelet.render()
+ u'<div>My pagelet2</div>'
+
+Access nameless pagelet from view
+
+ >>> pagelet = component.getMultiAdapter((object(), request), name='pagelet')
+
+ >>> print pagelet.publishTraverse(
+ ... request, 'z3ext.layout.tests.ITestPagelet')
+ <div>My pagelet</div>
Deleted: z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py
===================================================================
--- z3ext.layout/trunk/src/z3ext/layout/tests.py 2008-10-03 16:36:33 UTC (rev 91713)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -1,76 +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$
-"""
-import unittest, doctest
-from zope import interface, component
-from zope.testing.doctestunit import DocFileSuite
-from zope.app.testing import setup
-from zope.app.container.sample import SampleContainer
-
-from z3ext.layout import pagelet
-
-
-class IFolder1(interface.Interface):
- pass
-
-class IFolder1_1(interface.Interface):
- pass
-
-class IFolder1_1_1(interface.Interface):
- pass
-
-
-class Folder(SampleContainer):
- pass
-
-
-class MyLayout(object):
-
- title = u'My layout'
-
-
-def setUp(test):
- root = setup.placefulSetUp(site=True)
- root.__name__ = 'root'
- test.globs['root'] = root
- component.provideAdapter(pagelet.queryPagelet)
- setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
-
-
-def tearDown(test):
- setup.placefulTearDown()
- setup.tearDownTestAsModule(test)
-
-
-def test_suite():
- return unittest.TestSuite((
- doctest.DocFileSuite(
- 'README.txt',
- setUp=setUp, tearDown=tearDown,
- optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
- ),
- doctest.DocFileSuite(
- 'pagelet.txt',
- setUp=setUp, tearDown=tearDown,
- optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
- ),
- doctest.DocFileSuite(
- 'zcml.txt',
- setUp=setUp, tearDown=tearDown,
- optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
- ),
- ))
Copied: z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py (from rev 91783, z3ext.layout/trunk/src/z3ext/layout/tests.py)
===================================================================
--- z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py (rev 0)
+++ z3ext.layout/tags/1.5.0/src/z3ext/layout/tests.py 2008-10-05 19:16:53 UTC (rev 91784)
@@ -0,0 +1,80 @@
+##############################################################################
+#
+# 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 unittest, doctest
+from zope import interface, component
+from zope.testing.doctestunit import DocFileSuite
+from zope.app.testing import setup
+from zope.app.container.sample import SampleContainer
+
+from z3ext.layout import pagelet
+
+
+class IFolder1(interface.Interface):
+ pass
+
+class IFolder1_1(interface.Interface):
+ pass
+
+class IFolder1_1_1(interface.Interface):
+ pass
+
+class ITestPagelet(interface.Interface):
+ pass
+
+
+class Folder(SampleContainer):
+ pass
+
+
+class MyLayout(object):
+
+ title = u'My layout'
+
+
+def setUp(test):
+ root = setup.placefulSetUp(site=True)
+ root.__name__ = 'root'
+ test.globs['root'] = root
+ component.provideAdapter(pagelet.queryPagelet)
+ component.provideAdapter(pagelet.PageletPublisher, name='pagelet')
+ setup.setUpTestAsModule(test, 'z3ext.layout.TESTS')
+
+
+def tearDown(test):
+ setup.placefulTearDown()
+ setup.tearDownTestAsModule(test)
+
+
+def test_suite():
+ return unittest.TestSuite((
+ doctest.DocFileSuite(
+ 'README.txt',
+ setUp=setUp, tearDown=tearDown,
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ),
+ doctest.DocFileSuite(
+ 'pagelet.txt',
+ setUp=setUp, tearDown=tearDown,
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ),
+ doctest.DocFileSuite(
+ 'zcml.txt',
+ setUp=setUp, tearDown=tearDown,
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ),
+ ))
More information about the Checkins
mailing list