Metadata-Version: 2.1
Name: gocept.pagelet
Version: 2.0
Summary: Easier z3c.pagelet handling
Home-page: https://github.com/gocept/gocept.pagelet
Author: Christian Zagrodnick
Author-email: mail@gocept.com
License: ZPL 2.1
Keywords: easy z3c.pagelet zope3 pagelet zope
Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Zope3
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved
Classifier: License :: OSI Approved :: Zope Public License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.7
License-File: LICENSE.txt
Requires-Dist: setuptools
Requires-Dist: zope.interface
Requires-Dist: zope.component
Requires-Dist: zope.publisher
Requires-Dist: zope.viewlet
Requires-Dist: z3c.template
Requires-Dist: z3c.pagelet
Requires-Dist: zope.browsermenu
Requires-Dist: zope.browserpage
Provides-Extra: test
Requires-Dist: zope.testing ; extra == 'test'

================
 gocept.pagelet
================

Easier z3c.pagelet handling

.. contents::


Copyright (c) 2007-2016 gocept gmbh & co. kg
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.


=========
 Changes
=========

2.0 (2023-07-18)
================

- Drop support for Python 2.7, 3.5, 3.6.

- Add support for Python 3.9, 3.10, 3.11.


1.1 (2019-06-10)
================

- Claim support of Python 3.5, 3.6, 3.7, 3.8, PyPy and PyPy3.

- Use tox for testing.


1.0 (2016-04-06)
================

- Update `bootstrap.py` to a ``zc.buildout 2.3``.

- Use py.test as test runner.

- Declare the explicit support of Python 2.7.
  No other Python versions are currently supported.

0.4 (2013-03-28)
================

- When registering a pagelet using ZCML which only has template, the name of
  the template is rendered in the ``repr`` the generated class to have a
  clue what is the purpose of this class when debugging.

- Updated tests to use Python's `doctest` instead of deprecated
  `zope.testing.doctest`.


0.3 (2009-12-27)
================

- Using ``zope.browserpage`` and ``zope.browsermenu`` instead of
  ``zope.app.publisher``.


0.2 (2009-12-27)
================

- Allow arbitrary number of context elements for adaptation.

0.1 (2008-09-20)
================

- First public release.


==============
 Contributors
==============

- Michael Howitz <mh at gocept dot com>

- Christian Theune <ct at gocept dot com>


=============================
Easy z3c.pagelet registration
=============================

The `<gocept:pagelet>` directive allows easier registration of
z3c.pagelets. It behaves quite like `<browser:page>`.

Setup
=====

We need some zcml setup:

>>> import sys
>>> from zope.configuration import xmlconfig
>>> import gocept.pagelet
>>> context = xmlconfig.file('meta.zcml', gocept.pagelet)


Template only
=============

It is possible to just use a template as pagelet. A class is not required:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="index.html"
...       for="*"
...       permission="zope.Public"
...       template="test-template.pt"
...       />
... </configure>
... """, context)

We should now have a page:

>>> import zope.component
>>> from zope.publisher.browser import TestRequest
>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='index.html')
>>> pagelet
<gocept.pagelet.zcml.SimplePagelet from .../gocept/pagelet/test-template.pt object at 0x...>
>>> pagelet.__name__
u'index.html'

When we render the pagelet the test-template is used:

>>> pagelet.render()
u'Hello from the test template.\n'


Class only
==========

Of course it's also possible to register a class without a template. Create a
class and make it available in a module:


>>> from z3c.pagelet.browser import BrowserPagelet
>>> class MyPagelet(BrowserPagelet):
...     """Custom pagelet"""
...     def render(self):
...         return u"Hello from the custom pagelet."""

Make it available under the fake package ``custom``:

>>> sys.modules['custom'] = type(
...     'Module', (),
...     {'MyPagelet': MyPagelet})()


Make it available via ZCML:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="class.html"
...       for="*"
...       permission="zope.Public"
...       class="custom.MyPagelet"
...       />
... </configure>
... """, context)

Get the pagelet:

>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='class.html')
>>> pagelet
<gocept.pagelet.zcml.MyPagelet object at 0x...>
>>> pagelet.render()
u'Hello from the custom pagelet.'



Class and template
==================

It's for course also possible to specify both class and template. So create
another pagelet class and register it:

>>> class MyPagelet2(BrowserPagelet):
...     """Custom pagelet"""
...     i_am_very_custom = True
>>> sys.modules['custom'] = type(
...     'Module', (),
...     {'MyPagelet': MyPagelet2})()


Make it available via zcml:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="class-template.html"
...       for="*"
...       permission="zope.Public"
...       class="custom.MyPagelet"
...       template="test-template.pt"
...       />
... </configure>
... """, context)

>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='class-template.html')
>>> pagelet
<gocept.pagelet.zcml.MyPagelet2 object at 0x...>
>>> pagelet.render()
u'Hello from the test template.\n'
>>> pagelet.i_am_very_custom
True
