[Checkins] SVN: Sandbox/darrylcousins/mars. Working on tests
Darryl Cousins
darryl at darrylcousins.net.nz
Fri Jul 20 06:01:58 EDT 2007
Log message for revision 78219:
Working on tests
Changed:
U Sandbox/darrylcousins/mars.adapter/src/mars/adapter/adapter.txt
U Sandbox/darrylcousins/mars.macro/src/mars/macro/macro.txt
U Sandbox/darrylcousins/mars.view/src/mars/view/components.py
U Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/meta.py
U Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/viewlet.txt
-=-
Modified: Sandbox/darrylcousins/mars.adapter/src/mars/adapter/adapter.txt
===================================================================
--- Sandbox/darrylcousins/mars.adapter/src/mars/adapter/adapter.txt 2007-07-20 09:51:04 UTC (rev 78218)
+++ Sandbox/darrylcousins/mars.adapter/src/mars/adapter/adapter.txt 2007-07-20 10:01:57 UTC (rev 78219)
@@ -37,7 +37,7 @@
The Adapter
-----------
-First we define an adapter that we wish to look up for the `field` object. It is
+Here we define an adapter that we wish to look up for the `field` object. It is
a simple adapter that will take only the adapted object in its __init__ method.
>>> class ValueAdapter(object):
@@ -55,7 +55,7 @@
----------------
Then we can define the adapter factory that subclasses AdapterFactory and
-contains a single directive (which is required) that defined the adapter to be
+contains a single directive (which is required) that defines the factory to be
used.
>>> class UnNamedValueAdapter(mars.adapter.AdapterFactory):
Modified: Sandbox/darrylcousins/mars.macro/src/mars/macro/macro.txt
===================================================================
--- Sandbox/darrylcousins/mars.macro/src/mars/macro/macro.txt 2007-07-20 09:51:04 UTC (rev 78218)
+++ Sandbox/darrylcousins/mars.macro/src/mars/macro/macro.txt 2007-07-20 10:01:57 UTC (rev 78219)
@@ -29,7 +29,6 @@
>>> content = Content()
-
Macro Template
--------------
Modified: Sandbox/darrylcousins/mars.view/src/mars/view/components.py
===================================================================
--- Sandbox/darrylcousins/mars.view/src/mars/view/components.py 2007-07-20 09:51:04 UTC (rev 78218)
+++ Sandbox/darrylcousins/mars.view/src/mars/view/components.py 2007-07-20 10:01:57 UTC (rev 78219)
@@ -58,8 +58,7 @@
class LayoutView(LayoutViewBase, BrowserPage):
- def __init__(self, context, request):
- BrowserPage.__init__(self, context, request)
+ __init__ = BrowserPage.__init__
class PageletView(TemplateViewBase, LayoutViewBase, BrowserPage):
zope.interface.implements(IPagelet)
Modified: Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/meta.py
===================================================================
--- Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/meta.py 2007-07-20 09:51:04 UTC (rev 78218)
+++ Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/meta.py 2007-07-20 10:01:57 UTC (rev 78219)
@@ -14,10 +14,12 @@
def register(self, factory, module_info):
- #print '\nname:', self.view_name,'context:', self.view_context,'factory:', factory,\
- # 'layer:', self.view_layer, 'provides', self.provides, '\n'
+ view = util.class_annotation(factory, 'mars.viewlet.view',
+ None) or IBrowserView
+# print '\nname:', self.view_name,'context:', self.view_context,'factory:', factory,\
+# 'layer:', self.view_layer, 'provides', self.provides, 'view', view, '\n'
zope.component.provideAdapter(factory,
- adapts=(self.view_context, self.view_layer, IBrowserView),
+ adapts=(self.view_context, self.view_layer, view),
provides=self.provides,
name=self.view_name)
Modified: Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/viewlet.txt
===================================================================
--- Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/viewlet.txt 2007-07-20 09:51:04 UTC (rev 78218)
+++ Sandbox/darrylcousins/mars.viewlet/src/mars/viewlet/viewlet.txt 2007-07-20 10:01:57 UTC (rev 78219)
@@ -20,6 +20,7 @@
>>> import zope.interface
>>> import zope.component
>>> import grok
+ >>> import mars.view
>>> import mars.viewlet
>>> import mars.template
@@ -55,7 +56,7 @@
handles the viewlets registered for it:
>>> class MyManager(mars.viewlet.ViewletManager):
- ... pass
+ ... pass
>>> manager = MyManager(content, request, view)
@@ -115,7 +116,6 @@
And we create the template itself for the viewlet.
>>> class ViewTemplate(mars.template.TemplateFactory):
- ... """This is a template"""
... grok.template(viewTemplate)
... grok.context(SecondViewlet)
@@ -136,3 +136,68 @@
<div>Second viewlet content</div>
<div>First viewlet content</div>
+Tal Expression
+--------------
+
+Usually though we do not directly call on the manager but rather we insert the
+manager into a template using the ``provider`` expression. Here is a template
+file that does just that.
+
+ >>> layout = os.path.join(temp_dir, 'layout.pt')
+ >>> open(layout, 'w').write('''
+ ... <html>
+ ... <body>
+ ... <div tal:content="structure provider: mymanager">
+ ... here render my manager
+ ... </div>
+ ... </body>
+ ... </html>
+ ... ''')
+
+We need a view and a template to use this template.
+
+ >>> class TestView(mars.view.LayoutView):
+ ... grok.context(zope.interface.Interface)
+
+ >>> class ViewLayout(mars.template.LayoutFactory):
+ ... grok.template(layout)
+ ... grok.context(TestView)
+
+We need to manually ``grok`` these classes in the doctest. Usually this happens
+at start up.
+
+ >>> from mars.view.meta import LayoutViewGrokker
+ >>> LayoutViewGrokker().grok('', TestView, None, module_info, None)
+ True
+
+ >>> from mars.template.meta import LayoutFactoryGrokker
+ >>> LayoutFactoryGrokker().grok('', ViewLayout, None, module_info, None)
+ True
+
+We can now look up the view and expect the template to be rendered.
+
+ >>> testview = zope.component.getMultiAdapter((content, request),
+ ... name='testview')
+ >>> print testview()
+ Traceback (most recent call last):
+ ...
+ ContentProviderLookupError: mymanager
+
+OK. What happened here is that we have yet ``grokked`` the viewlet manager. Lets
+do that.
+
+ >>> from mars.viewlet.meta import ViewletManagerGrokker
+ >>> ViewletManagerGrokker().grok('', MyManager, zope.interface.Interface,
+ ... module_info, None)
+ True
+
+And we try the view again.
+
+ >>> from zope.contentprovider.interfaces import IContentProvider
+ >>> from zope.viewlet.interfaces import IViewletManager
+ >>> from zope.publisher.interfaces.browser import IBrowserView
+ >>> print zope.component.queryMultiAdapter((content, request, testview),
+ ... IContentProvider, 'myanager')
+ <MyManager ...>
+ >>> print content, request, testview
+ >>> print testview()
More information about the Checkins
mailing list