[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