This package provides support to write and register Zope Viewlets
directly in Python (without ZCML). It's designed to be used with
`grokcore.view`_ which let you write and register Zope Views.
.. contents::
Setting up ``grokcore.viewlet``
===============================
This package is set up like the `grokcore.component`_
package. Please refer to its documentation for more details. The
additional ZCML lines you will need are::
<include package="grokcore.viewlet" file="meta.zcml" />
<include package="grokcore.viewlet" />
Put the first line somewhere near the top of your root ZCML file.
Examples
========
First we need a view to call our viewlet manager::
from grokcore import viewlet
class Index(viewlet.View):
pass
index = viewlet.Page Template("""
<html>
<head>Test</head>
<body>
<div tail:content="structure provider:content">
</div>
</body>
</html>
""")
After that we could define only a manager which display something::
class Content(viewlet.ViewletManager):
viewlet.View(Index)
def render(self):
return u'<h1>Hello World</h1>'
Or a completely different example::
class AdvancedContent(viewlet.ViewletManager):
viewlet.name('content')
viewlet.view(Index)
And some viewlets for that one::
class StaticData(viewlet.Viewlet):
viewlet.view(Index)
viewlet.viewletmanager(AdvancedContent)
def render(self):
return f'<p> Data from {self.context.id}</p>'
Or::
class SecretData(viewlet.Viewlet):
viewlet.view(Index)
viewlet.viewletmanager(AdvancedContent)
viewlet.require('agent.secret')
secretdata = viewlet.PageTemplate("""
<p>Nothing to see here.</p>
""")
The way templates are bound to components works exactly the way as
in `grokcore.view`_, for more information refer to its
documentation.
API Overview
============
Base classes
------------
``ViewletManager``
Define a new viewlet manager. You can either provide a render
method, a template, which can or not use registered viewlets.
If you define a template, ``view`` is added as a reference to the
current view for which the manager is rendering in the template's
namespace. It is available as well as an attribute on the manager
object.
``Viewlet``
Define a new viewlet. You can either provide a template or a render
method on it. Like in views, you can define an update method to
process needed data.
Like for manager, ``view`` is added to the template namespace if
used. ``viewletmanager`` is defined as well as a reference to the
manager in the template's namespace and as an attribute on the
viewlet object.
Directives
----------
You can use directives from `grokcore.view`_ to register your
viewlet or viewlet manager: ``name``, ``context``, ``layer`` and
``require`` (for security on a viewlet).
To that is added:
``view``
Select for which view is registered a viewlet or a viewlet manager.
``viewletmanager``
Select for which viewlet manager is registered a viewlet.
``order``
Define a rendering order for viewlets in a viewlet manager. This
should be a number, the smaller order render first, bigger last.
Additionally, the ``grokcore.viewlet`` package exposes the
`grokcore.component`_, `grokcore.security`_ and `grokcore.view`_ APIs.
.. _grokcore.component: https://pypi.org/project/grokcore.component
.. _grokcore.viewlet: https://pypi.org/project/grokcore.viewlet
.. _grokcore.security: https://pypi.org/project/grokcore.security
.. _grokcore.view: https://pypi.org/project/grokcore.view
Changes
=======
4.0 (2023-08-28)
----------------
* Add support for Python 3.7, 3.8, 3.9, 3.10, 3.11.
* Drop support for Python 2.7, 3.4, 3.5, 3.6.
3.1.0 (2018-02-05)
------------------
* viewletmanager.viewlets should be a list so we can iterate over it several
times in consumer code instead of having to remember it's an iterable we can
only list once.
3.0.1 (2018-01-12)
------------------
* Rearrange tests such that Travis CI can pick up all functional tests too.
3.0.0 (2018-01-04)
------------------
* Python 3 compatibility.
1.11 (2012-09-04)
-----------------
* Make the ``has_render()`` and ``has_no_render()`` symmetrical to those
in grokcore.view, grokcore.layout and grokcore.formlib, where a
``render.base_method`` attribute is checked.
1.10.1 (2012-05-02)
-------------------
* Do not require the role extra from grokcore.security.
1.10 (2012-05-02)
-----------------
* Use the component registration api from grokcore.component.
* Update how the static resources are found on a ``ViewletManager``
and a ``Viewlet``, following the new name ``__static_name__`` set by
the template association.
1.9 (2011-06-28)
----------------
* Introduce the `available()` method on viewlet component. The viewlet
manager will filter out unavailable viewlet by calling this method. The
`available()` method is called *after* the viewlet's `update()` is called,
but *before* the `render()` is called.
1.8 (2010-12-16)
----------------
* Update to use TemplateGrokker from grokcore.view to associate
viewlet and viewletmanager templates.
1.7 (2010-11-03)
----------------
* The computed default value for the viewletmanager directive is now defined
in the directiv itself, not as a separate function that needs to be passed
along.
1.6 (2010-11-01)
----------------
* Upped version requirements for martian, grokcore.component, and grokcore.view.
* Move the order directive to grokcore.component.
* Move the view directive to grokcore.view.
1.5 (2010-10-18)
----------------
* Make package comply to zope.org repository policy.
* Update functional tests to use Browser implementation of zope.app.wsgi
instead of zope.app.testing.
* Reduce dependencies (zope.app.pagetemplate no longer necessary).
1.4.1 (2010-02-28)
------------------
* Dropped the dependency on ``zope.app.zcmlfiles``.
* Cleaned the code to remove unused imports and ensure the pep8 syntax.
* Updated tests to have a return value consistency. The
grokcore.viewlet viewlet manager implementation requires viewlets to
return unicode strings. Now, viewlets return unicode strings in the
test packages.
1.4 (2010-02-19)
----------------
* Define test requires.
1.3 (2009-09-17)
----------------
* Reverted the use of grokcore.view.CodeView. We now require
``grokcore.view`` 1.12.1 or newer. As of ``grokcore.view`` 1.12, the
CodeView/View separation has been undone.
1.2 (2009-09-16)
----------------
* Remove the reference to the grok.View permission that is no longer in
grokcore.security 1.2
* Use the grok.zope.org/releaseinfo information instead of our own
copy of ``versions.cfg``, for easier maintenance.
1.1 (2009-07-20)
----------------
* Adapted tests to new grokcore.view release: switched from View to CodeView.
* Add grok.View permissions to functional tests (requires grokcore.security
1.1)
1.0 (2008-11-15)
----------------
* Created ``grokcore.viewlet`` in November 2008 by factoring
``zope.viewlet``-based components, grokkers and directives out of
Grok.
Raw data
{
"_id": null,
"home_page": "https://github.com/zopefoundation/grokcore.viewlet",
"name": "grokcore.viewlet",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Grok Team",
"author_email": "grok-dev@zope.org",
"download_url": "https://files.pythonhosted.org/packages/d8/a5/e5043dfa84847fde2db39ccf7509bd1c78d6db52a526bc95ea0c4c0cc04b/grokcore.viewlet-4.0.tar.gz",
"platform": null,
"description": "This package provides support to write and register Zope Viewlets\ndirectly in Python (without ZCML). It's designed to be used with\n`grokcore.view`_ which let you write and register Zope Views.\n\n.. contents::\n\nSetting up ``grokcore.viewlet``\n===============================\n\nThis package is set up like the `grokcore.component`_\npackage. Please refer to its documentation for more details. The\nadditional ZCML lines you will need are::\n\n <include package=\"grokcore.viewlet\" file=\"meta.zcml\" />\n <include package=\"grokcore.viewlet\" />\n\nPut the first line somewhere near the top of your root ZCML file.\n\nExamples\n========\n\nFirst we need a view to call our viewlet manager::\n\n from grokcore import viewlet\n\n class Index(viewlet.View):\n pass\n\n index = viewlet.Page Template(\"\"\"\n <html>\n <head>Test</head>\n <body>\n <div tail:content=\"structure provider:content\">\n </div>\n </body>\n </html>\n \"\"\")\n\nAfter that we could define only a manager which display something::\n\n class Content(viewlet.ViewletManager):\n viewlet.View(Index)\n\n def render(self):\n return u'<h1>Hello World</h1>'\n\n\nOr a completely different example::\n\n class AdvancedContent(viewlet.ViewletManager):\n viewlet.name('content')\n viewlet.view(Index)\n\nAnd some viewlets for that one::\n\n class StaticData(viewlet.Viewlet):\n viewlet.view(Index)\n viewlet.viewletmanager(AdvancedContent)\n\n def render(self):\n return f'<p> Data from {self.context.id}</p>'\n\nOr::\n\n class SecretData(viewlet.Viewlet):\n viewlet.view(Index)\n viewlet.viewletmanager(AdvancedContent)\n viewlet.require('agent.secret')\n\n secretdata = viewlet.PageTemplate(\"\"\"\n <p>Nothing to see here.</p>\n \"\"\")\n\nThe way templates are bound to components works exactly the way as\nin `grokcore.view`_, for more information refer to its\ndocumentation.\n\nAPI Overview\n============\n\nBase classes\n------------\n\n``ViewletManager``\n Define a new viewlet manager. You can either provide a render\n method, a template, which can or not use registered viewlets.\n\n If you define a template, ``view`` is added as a reference to the\n current view for which the manager is rendering in the template's\n namespace. It is available as well as an attribute on the manager\n object.\n\n``Viewlet``\n Define a new viewlet. You can either provide a template or a render\n method on it. Like in views, you can define an update method to\n process needed data.\n\n Like for manager, ``view`` is added to the template namespace if\n used. ``viewletmanager`` is defined as well as a reference to the\n manager in the template's namespace and as an attribute on the\n viewlet object.\n\nDirectives\n----------\n\nYou can use directives from `grokcore.view`_ to register your\nviewlet or viewlet manager: ``name``, ``context``, ``layer`` and\n``require`` (for security on a viewlet).\n\nTo that is added:\n\n``view``\n Select for which view is registered a viewlet or a viewlet manager.\n\n``viewletmanager``\n Select for which viewlet manager is registered a viewlet.\n\n``order``\n Define a rendering order for viewlets in a viewlet manager. This\n should be a number, the smaller order render first, bigger last.\n\n\nAdditionally, the ``grokcore.viewlet`` package exposes the\n`grokcore.component`_, `grokcore.security`_ and `grokcore.view`_ APIs.\n\n.. _grokcore.component: https://pypi.org/project/grokcore.component\n.. _grokcore.viewlet: https://pypi.org/project/grokcore.viewlet\n.. _grokcore.security: https://pypi.org/project/grokcore.security\n.. _grokcore.view: https://pypi.org/project/grokcore.view\n\nChanges\n=======\n\n4.0 (2023-08-28)\n----------------\n\n* Add support for Python 3.7, 3.8, 3.9, 3.10, 3.11.\n\n* Drop support for Python 2.7, 3.4, 3.5, 3.6.\n\n\n3.1.0 (2018-02-05)\n------------------\n\n* viewletmanager.viewlets should be a list so we can iterate over it several\n times in consumer code instead of having to remember it's an iterable we can\n only list once.\n\n3.0.1 (2018-01-12)\n------------------\n\n* Rearrange tests such that Travis CI can pick up all functional tests too.\n\n3.0.0 (2018-01-04)\n------------------\n\n* Python 3 compatibility.\n\n1.11 (2012-09-04)\n-----------------\n\n* Make the ``has_render()`` and ``has_no_render()`` symmetrical to those\n in grokcore.view, grokcore.layout and grokcore.formlib, where a\n ``render.base_method`` attribute is checked.\n\n1.10.1 (2012-05-02)\n-------------------\n\n* Do not require the role extra from grokcore.security.\n\n1.10 (2012-05-02)\n-----------------\n\n* Use the component registration api from grokcore.component.\n\n* Update how the static resources are found on a ``ViewletManager``\n and a ``Viewlet``, following the new name ``__static_name__`` set by\n the template association.\n\n1.9 (2011-06-28)\n----------------\n\n* Introduce the `available()` method on viewlet component. The viewlet\n manager will filter out unavailable viewlet by calling this method. The\n `available()` method is called *after* the viewlet's `update()` is called,\n but *before* the `render()` is called.\n\n1.8 (2010-12-16)\n----------------\n\n* Update to use TemplateGrokker from grokcore.view to associate\n viewlet and viewletmanager templates.\n\n1.7 (2010-11-03)\n----------------\n\n* The computed default value for the viewletmanager directive is now defined\n in the directiv itself, not as a separate function that needs to be passed\n along.\n\n1.6 (2010-11-01)\n----------------\n\n* Upped version requirements for martian, grokcore.component, and grokcore.view.\n\n* Move the order directive to grokcore.component.\n\n* Move the view directive to grokcore.view.\n\n1.5 (2010-10-18)\n----------------\n\n* Make package comply to zope.org repository policy.\n\n* Update functional tests to use Browser implementation of zope.app.wsgi\n instead of zope.app.testing.\n\n* Reduce dependencies (zope.app.pagetemplate no longer necessary).\n\n1.4.1 (2010-02-28)\n------------------\n\n* Dropped the dependency on ``zope.app.zcmlfiles``.\n\n* Cleaned the code to remove unused imports and ensure the pep8 syntax.\n\n* Updated tests to have a return value consistency. The\n grokcore.viewlet viewlet manager implementation requires viewlets to\n return unicode strings. Now, viewlets return unicode strings in the\n test packages.\n\n1.4 (2010-02-19)\n----------------\n\n* Define test requires.\n\n1.3 (2009-09-17)\n----------------\n\n* Reverted the use of grokcore.view.CodeView. We now require\n ``grokcore.view`` 1.12.1 or newer. As of ``grokcore.view`` 1.12, the\n CodeView/View separation has been undone.\n\n1.2 (2009-09-16)\n----------------\n\n* Remove the reference to the grok.View permission that is no longer in\n grokcore.security 1.2\n\n* Use the grok.zope.org/releaseinfo information instead of our own\n copy of ``versions.cfg``, for easier maintenance.\n\n\n1.1 (2009-07-20)\n----------------\n\n* Adapted tests to new grokcore.view release: switched from View to CodeView.\n\n* Add grok.View permissions to functional tests (requires grokcore.security\n 1.1)\n\n1.0 (2008-11-15)\n----------------\n\n* Created ``grokcore.viewlet`` in November 2008 by factoring\n ``zope.viewlet``-based components, grokkers and directives out of\n Grok.\n",
"bugtrack_url": null,
"license": "ZPL",
"summary": "Grok-like configuration for zope viewlets",
"version": "4.0",
"project_urls": {
"Download": "https://pypi.org/project/grokcore.viewlet",
"Homepage": "https://github.com/zopefoundation/grokcore.viewlet"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "291ba9d25908055b08afc6794c0975909621035d2ea8705e55380748e59b3fa5",
"md5": "c16a34928331234cb307c8c27bad0dce",
"sha256": "38e60d2b24b380bf253eeca47d4bedeefd9ccf81d9709fc4c3b4be4237aa7dac"
},
"downloads": -1,
"filename": "grokcore.viewlet-4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c16a34928331234cb307c8c27bad0dce",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 36474,
"upload_time": "2023-08-28T09:28:04",
"upload_time_iso_8601": "2023-08-28T09:28:04.786100Z",
"url": "https://files.pythonhosted.org/packages/29/1b/a9d25908055b08afc6794c0975909621035d2ea8705e55380748e59b3fa5/grokcore.viewlet-4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d8a5e5043dfa84847fde2db39ccf7509bd1c78d6db52a526bc95ea0c4c0cc04b",
"md5": "a27c47251026cbef161ec19b128f8f83",
"sha256": "4876407511c9153a43c4fd621b419fb7e80f7fa09242c07d9bb1f41683b359f6"
},
"downloads": -1,
"filename": "grokcore.viewlet-4.0.tar.gz",
"has_sig": false,
"md5_digest": "a27c47251026cbef161ec19b128f8f83",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24437,
"upload_time": "2023-08-28T09:28:06",
"upload_time_iso_8601": "2023-08-28T09:28:06.752007Z",
"url": "https://files.pythonhosted.org/packages/d8/a5/e5043dfa84847fde2db39ccf7509bd1c78d6db52a526bc95ea0c4c0cc04b/grokcore.viewlet-4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-28 09:28:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "zopefoundation",
"github_project": "grokcore.viewlet",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "grokcore.viewlet"
}