Skip to main content

Pagelet layer setup for Zope3

Project description

This package provides a pagelet based layer setup for Zope3.


Detailed Documentation
**********************

==============================
Pagelet-based Layer for Zope 3
==============================

This package contains the pagelet layer. This layer supports a correct set of
component registration and can be used for inheritation in custom skins.

Right now the default implementation in Zope3 has different restriction in the
traversal concept and use to much registration on the default layer.

Important
---------

This layer ia based on the pagelet pattern. This means every page e.g. the
error page is based on the pagelet concept.


``IPageletBrowserLayer`` Layer
------------------------------

The pagelet layer is useful for build custom presentation skins without access
to ZMI menus like ``zmi_views`` etc. This means there is no menu item
registred if you use this layer.

This layer is *NOT* derived from ``IDefaultBrowserLayer`` layer. Therefore it
provides only a minimal set of the most important public views such as
``@@absolute_url``. The following packages are accounted:

- ``zope.app.http.exception``
- ``zope.app.publication``
- ``zope.app.publisher.browser``
- ``zope.app.traversing``
- ``zope.app.traversing.browser``


Testing
-------

For testing the ``IPageletBrowserLayer`` layer we use the testing skin defined
in the tests package which uses the ``IPageletBrowserLayer`` layer as the only
base layer. This means, that our testing skin provides only the views defined
in the minimal package and it's testing views defined in tests.

Login as manager first:

>>> from zope.testbrowser.testing import Browser
>>> manager = Browser()
>>> manager.addHeader('Authorization', 'Basic mgr:mgrpw')

Check if we can access the ``page.html`` view which is registered in the
``ftesting.zcml`` file with our skin:

>>> manager = Browser()
>>> manager.addHeader('Authorization', 'Basic mgr:mgrpw')
>>> skinURL = 'http://localhost/++skin++PageletTestSkin'
>>> manager.open(skinURL + '/page.html')
>>> manager.url
'http://localhost/++skin++PageletTestSkin/page.html'

>>> print manager.contents
<!DOCTYPE...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>PageletTestLayout</title>
</head>
<body>
test page
<BLANKLINE>
</body>
</html>
<BLANKLINE>

Now check the not found page which is a exception view on the exception
``zope.publisher.interfaces.INotFound``:

>>> manager.open(skinURL + '/foobar.html')
Traceback (most recent call last):
...
httperror_seek_wrapper: HTTP Error 404: Not Found

>>> print manager.contents
<!DOCTYPE...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>PageletTestLayout</title>
</head>
<body>
<div>
<br />
<br />
<h3>
The page you are trying to access is not available
</h3>
<br />
<b>
Please try the following:
</b>
<br />
<ol>
<li>
Make sure that the Web site address is spelled correctly.
</li>
<li>
<a href="javascript:history.back(1);">
Go back and try another URL.
</a>
</li>
</ol>
</div>
<BLANKLINE>
</body>
</html>
<BLANKLINE>

And check the user error page which is a view registred for
``zope.exceptions.interfaces.IUserError`` exceptions:

>>> manager.open(skinURL + '/@@usererror.html')
>>> print manager.contents
<!DOCTYPE ...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>PageletTestLayout</title>
</head>
<body>
<div>
<div>simply user error</div>
</div>
<BLANKLINE>
</body>
</html>
<BLANKLINE>

And check error view registred for
``zope.interface.common.interfaces.IException``:

>>> manager.open(skinURL + '/@@systemerror.html')
>>> print manager.contents
<!DOCTYPE...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>PageletTestLayout</title>
</head>
<body>
<div>
<br />
<br />
<h3>A system error occurred</h3>
<br />
<b>Please contact the administrator.</b>
<a href="javascript:history.back(1);">
Go back and try another URL.
</a>
</div>
<BLANKLINE>
</body>
</html>
<BLANKLINE>

And check the ``zope.security.interfaces.IUnauthorized`` view, use a new
unregistred user (test browser) for this:

>>> unauthorized = Browser()
>>> unauthorized.open(skinURL + '/@@forbidden.html')
Traceback (most recent call last):
...
httperror_seek_wrapper: HTTP Error 403: Forbidden

>>> print unauthorized.contents
<!DOCTYPE ...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>PageletTestLayout</title>
</head>
<body>
<div>
<br />
<br />
<h3>Unauthorized</h3>
<br />
<b>You are not authorized.</b>
</div>
<BLANKLINE>
</body>
</html>
<BLANKLINE>


=======
CHANGES
=======

1.0.2 (2009-04-03)
---------------------

- **Security issue:** The traverser defined for
``IPageletBrowserLayer`` was a trusted adapter, so the security
proxy got removed from each traversed object. Thus all sub-objects
were publically accessable, too.

Making this change might BREAK your application!
That means if security is not well declared.

- Bugfix: use IContentTemplate instead of IPageTemplate which avoids to get the
layout template if no IPageTemplate is registered


1.0.1 (2008-01-24)
------------------

- Bug: Update meta data.


1.0.0 (2008-01-21)
------------------

- Restructure: Move ``z3c.layer.pagelet`` package to it's own top level
package form ``zope.layer`` to ``z3c.layer.pagelet``.

- Restructure: Removed ``zope.app.form`` support from pagelet layer.

- Restructure: Moved implementation from ``z3c.layer`` to
``z3c.layer.pagelet``.


0.2.3 (2007-11-07)
------------------

- Forward-Bug: Due to a bug in mechanize, the testbrowser throws
``httperror_seek_wrapper`` instead of ``HTTPError`` errors. Thanks to RE
normalizers, the code will now work whether the bug is fixed or not in
mechanize.


0.2.2 (2007-10-31)
------------------

- Bug: Fixed package meta-data.

- Bug: Fixed test failures due to depency updates.

- Restructure: Fixed deprecation warning for ``ZopeSecurityPolicy``.


0.2.1 (2007-??-??)
------------------

- Changes unknown.


0.2.0 (2007-??-??)
------------------

- Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

z3c.layer.pagelet-1.0.2.zip (26.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page