[Checkins] SVN: zope.contentprovider/trunk/ Add very simple, but useful base class for implementing content providers.
Dan Korostelev
nadako at gmail.com
Mon Mar 16 18:47:55 EDT 2009
Log message for revision 98173:
Add very simple, but useful base class for implementing content providers.
Changed:
U zope.contentprovider/trunk/CHANGES.txt
U zope.contentprovider/trunk/src/zope/contentprovider/README.txt
A zope.contentprovider/trunk/src/zope/contentprovider/provider.py
-=-
Modified: zope.contentprovider/trunk/CHANGES.txt
===================================================================
--- zope.contentprovider/trunk/CHANGES.txt 2009-03-16 22:34:11 UTC (rev 98172)
+++ zope.contentprovider/trunk/CHANGES.txt 2009-03-16 22:47:55 UTC (rev 98173)
@@ -5,6 +5,9 @@
3.4.1 (unreleased)
------------------
+- Add very simple, but useful base class for implementing content
+ providers, see ``zope.contentprovider.provider.ContentProviderBase``.
+
- Remove unneeded testing dependencies. We only need zope.testing and
zope.app.pagetemplate.
@@ -12,9 +15,9 @@
- Added setuptools dependency to setup.py.
-- Changed mailing list address to zope-dev at zope.org instead of retired one.
+- Change mailing list address to zope-dev at zope.org instead of retired one.
-- Changed ``cheeseshop`` to ``pypi`` in the package url.
+- Change ``cheeseshop`` to ``pypi`` in the package url.
3.4.0 (2007-10-02)
------------------
Modified: zope.contentprovider/trunk/src/zope/contentprovider/README.txt
===================================================================
--- zope.contentprovider/trunk/src/zope/contentprovider/README.txt 2009-03-16 22:34:11 UTC (rev 98172)
+++ zope.contentprovider/trunk/src/zope/contentprovider/README.txt 2009-03-16 22:47:55 UTC (rev 98173)
@@ -527,6 +527,41 @@
</html>
+Base class
+----------
+
+The ``zope.contentprovider.provider`` module provides an useful base
+class for implementing content providers. It has all boilerplate code
+and it's only required to override the ``render`` method to make it
+work:
+
+ >>> from zope.contentprovider.provider import ContentProviderBase
+ >>> class MyProvider(ContentProviderBase):
+ ... def render(self, *args, **kwargs):
+ ... return 'Hi there'
+
+ >>> provider = MyProvider(None, None, None)
+ >>> interfaces.IContentProvider.providedBy(provider)
+ True
+
+ >>> provider.update()
+ >>> print provider.render()
+ Hi there
+
+Note, that it can't be used as is, without providing the ``render`` method:
+
+ >>> bad = ContentProviderBase(None, None, None)
+ >>> bad.update()
+ >>> print bad.render()
+ Traceback (most recent call last):
+ ...
+ NotImplementedError: ``render`` method must be implemented by subclass
+
+You can add the update logic into the ``update`` method as with any content
+provider and you can implement more complex rendering patterns, based on
+templates, using this ContentProviderBase class as a base.
+
+
You might also want to look at the ``zope.viewlet`` package for a more
featureful API.
Added: zope.contentprovider/trunk/src/zope/contentprovider/provider.py
===================================================================
--- zope.contentprovider/trunk/src/zope/contentprovider/provider.py (rev 0)
+++ zope.contentprovider/trunk/src/zope/contentprovider/provider.py 2009-03-16 22:47:55 UTC (rev 98173)
@@ -0,0 +1,40 @@
+##############################################################################
+#
+# Copyright (c) 2009 Zope Foundation 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.
+#
+##############################################################################
+"""Simple base class for implementing content providers
+
+$Id$
+"""
+from zope.component import adapts
+from zope.interface import Interface, implements
+from zope.publisher.browser import BrowserView
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+from zope.contentprovider.interfaces import IContentProvider
+
+class ContentProviderBase(BrowserView):
+ """Base class for content providers"""
+
+ implements(IContentProvider)
+ adapts(Interface, IBrowserRequest, Interface)
+
+ def __init__(self, context, request, view):
+ super(ContentProviderBase, self).__init__(context, request)
+ self.__parent__ = view
+
+ def update(self):
+ pass
+
+ def render(self, *args, **kwargs):
+ raise NotImplementedError(
+ '``render`` method must be implemented by subclass')
Property changes on: zope.contentprovider/trunk/src/zope/contentprovider/provider.py
___________________________________________________________________
Added: svn:keywords
+ Id
More information about the Checkins
mailing list