[Checkins] SVN: grokcore.view/trunk/src/grokcore/view/ Add an interface for a CodeView, and test that View and CodeView respect correctly theirs interfaces.
Sylvain Viollon
sylvain at infrae.com
Tue Sep 15 11:43:17 EDT 2009
Log message for revision 104101:
Add an interface for a CodeView, and test that View and CodeView respect correctly theirs interfaces.
Changed:
U grokcore.view/trunk/src/grokcore/view/components.py
U grokcore.view/trunk/src/grokcore/view/interfaces.py
U grokcore.view/trunk/src/grokcore/view/tests/view/codeview.py
U grokcore.view/trunk/src/grokcore/view/tests/view/view.py
A grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/
A grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/cavepainting.pt
A grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/meal.pt
-=-
Modified: grokcore.view/trunk/src/grokcore/view/components.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/components.py 2009-09-15 15:15:23 UTC (rev 104100)
+++ grokcore.view/trunk/src/grokcore/view/components.py 2009-09-15 15:43:16 UTC (rev 104101)
@@ -32,13 +32,13 @@
class BaseView(BrowserPage):
- interface.implements(interfaces.IGrokView)
+ interface.implements(interfaces.IGrokBaseView)
def __init__(self, context, request):
super(BaseView, self).__init__(context, request)
self.__name__ = getattr(self, '__view_name__', None)
- def update(self):
+ def update(self, **kwargs):
pass
def redirect(self, url):
@@ -78,10 +78,12 @@
class CodeView(BaseView):
+ interface.implements(interfaces.IGrokCodeView)
+
def __init__(self, context, request):
super(CodeView, self).__init__(context, request)
- def __call__(self):
+ def __call__(self, *args, **kwargs):
mapply(self.update, (), self.request)
if self.request.response.getStatus() in (302, 303):
# A redirect was triggered somewhere in update(). Don't
@@ -93,6 +95,8 @@
class View(BaseView):
+ interface.implements(interfaces.IGrokView)
+
def __init__(self, context, request):
super(View, self).__init__(context, request)
@@ -105,7 +109,7 @@
else:
self.static = None
- def __call__(self):
+ def __call__(self, *args, **kwargs):
mapply(self.update, (), self.request)
if self.request.response.getStatus() in (302, 303):
# A redirect was triggered somewhere in update(). Don't
@@ -236,6 +240,7 @@
factory.macros = property(_get_macros)
def render(self, view):
+ assert interfaces.IGrokView.providedBy(view)
namespace = self.getNamespace(view)
template = self._template
namespace.update(template.pt_getContext())
Modified: grokcore.view/trunk/src/grokcore/view/interfaces.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/interfaces.py 2009-09-15 15:15:23 UTC (rev 104100)
+++ grokcore.view/trunk/src/grokcore/view/interfaces.py 2009-09-15 15:43:16 UTC (rev 104101)
@@ -74,7 +74,7 @@
IDefaultBrowserLayer = Attribute('Default layer for browser views.')
-class IGrokView(IBrowserPage, IBrowserView):
+class IGrokBaseView(IBrowserPage, IBrowserView):
"""Grok views all provide this interface."""
context = Attribute('context', "Object that the view presents.")
@@ -84,9 +84,6 @@
response = Attribute('response', "Response object that is "
"associated with the current request.")
- static = Attribute('static', "Directory resource containing "
- "the static files of the view's package.")
-
def redirect(url):
"""Redirect to given URL"""
@@ -107,22 +104,6 @@
as a cgi query string.
"""
- def default_namespace():
- """Returns a dictionary of namespaces that the template
- implementation expects to always be available.
-
- This method is *not* intended to be overridden by application
- developers.
- """
-
- def namespace():
- """Returns a dictionary that is injected in the template
- namespace in addition to the default namespace.
-
- This method *is* intended to be overridden by the application
- developer.
- """
-
def update(**kw):
"""This method is meant to be implemented by grok.View
subclasses. It will be called *before* the view's associated
@@ -133,6 +114,9 @@
filled in from the request (in that case they *must* be
present in the request)."""
+
+class IGrokCodeView(IGrokBaseView):
+
def render(**kw):
"""A view can either be rendered by an associated template, or
it can implement this method to render itself from Python.
@@ -144,6 +128,29 @@
present in the request)."""
+class IGrokView(IGrokBaseView):
+
+ static = Attribute('static', "Directory resource containing "
+ "the static files of the view's package.")
+
+ def default_namespace():
+ """Returns a dictionary of namespaces that the template
+ implementation expects to always be available.
+
+ This method is *not* intended to be overridden by application
+ developers.
+ """
+
+ def namespace():
+ """Returns a dictionary that is injected in the template
+ namespace in addition to the default namespace.
+
+ This method *is* intended to be overridden by the application
+ developer.
+ """
+
+
+
class ITemplateFileFactory(Interface):
"""Utility that generates templates from files in template directories.
"""
Modified: grokcore.view/trunk/src/grokcore/view/tests/view/codeview.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/codeview.py 2009-09-15 15:15:23 UTC (rev 104100)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/codeview.py 2009-09-15 15:43:16 UTC (rev 104101)
@@ -3,7 +3,9 @@
>>> grok.testing.grok(__name__)
>>> from zope.publisher.browser import TestRequest
+ >>> from zope.interface.verify import verifyObject
>>> from zope.component import getMultiAdapter
+ >>> from grokcore.view.interfaces import IGrokCodeView
>>> mammoth = Mammoth()
@@ -11,6 +13,9 @@
>>> print code_view()
A cave painting of a mammoth
+ >>> verifyObject(IGrokCodeView, code_view)
+ True
+
"""
import grokcore.view as grok
@@ -20,5 +25,5 @@
class CavePainting(grok.CodeView):
- def render(self):
+ def render(self, **kwargs):
return 'A cave painting of a mammoth'
Modified: grokcore.view/trunk/src/grokcore/view/tests/view/view.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/view.py 2009-09-15 15:15:23 UTC (rev 104100)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/view.py 2009-09-15 15:43:16 UTC (rev 104101)
@@ -2,6 +2,9 @@
>>> grok.testing.grok(__name__)
+ >>> from zope.interface.verify import verifyObject
+ >>> from grokcore.view.interfaces import IGrokView
+
We should find the ``cavepainting`` view for a mammoth:
>>> manfred = Mammoth()
@@ -9,19 +12,23 @@
>>> request = TestRequest()
>>> from zope import component
>>> view = component.getMultiAdapter((manfred, request), name='cavepainting')
- >>> view()
- 'A cave painting of a mammoth'
+ >>> print view()
+ A cave painting of a mammoth
>>> view.context is manfred
True
>>> view.request is request
True
+ >>> verifyObject(IGrokView, view)
+ True
Look up a view with a name explicitly set with ``grok.name``:
>>> view = component.getMultiAdapter((manfred, request), name='meal')
- >>> view()
- 'Mammoth burger'
+ >>> print view()
+ Mammoth burger
+ >>> verifyObject(IGrokView, view)
+ True
There's no view 'food':
@@ -37,14 +44,11 @@
class Mammoth(grok.Context):
pass
-class CavePainting(grok.CodeView):
+class CavePainting(grok.View):
+ pass
- def render(self):
- return 'A cave painting of a mammoth'
-
-class Food(grok.CodeView):
+class Food(grok.View):
"""Grok says: ME NO SEE MAMMOTH, ME SEE MEAL!"""
grok.name('meal')
+ grok.template('meal')
- def render(self):
- return 'Mammoth burger'
Added: grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/cavepainting.pt
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/cavepainting.pt (rev 0)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/cavepainting.pt 2009-09-15 15:43:16 UTC (rev 104101)
@@ -0,0 +1 @@
+<tal:cave>A cave painting of a mammoth</tal:cave>
Added: grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/meal.pt
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/meal.pt (rev 0)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/view_templates/meal.pt 2009-09-15 15:43:16 UTC (rev 104101)
@@ -0,0 +1 @@
+<tal:meal>Mammoth burger</tal:meal>
More information about the checkins
mailing list