[Checkins] SVN: grok/branches/snowsprint-viewlets2/src/grok/ Add
new test for context association, and make it work.
Martijn Faassen
faassen at infrae.com
Thu Jan 24 10:12:20 EST 2008
Log message for revision 83169:
Add new test for context association, and make it work.
Changed:
A grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context.py
A grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context2.py
U grok/branches/snowsprint-viewlets2/src/grok/meta.py
-=-
Added: grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context.py
===================================================================
--- grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context.py (rev 0)
+++ grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context.py 2008-01-24 15:12:19 UTC (rev 83169)
@@ -0,0 +1,72 @@
+"""
+Viewlets and viewlet managers auto-associate with the context object that
+may be in a module.
+
+Set up the model object to view::
+
+ >>> root = getRootFolder()
+ >>> root['cave'] = cave = Cave()
+
+We also set up another model that the viewlet manager and viewlets should
+not be associated with::
+
+ >>> from viewlet_context2 import Club
+ >>> root['club'] = club = Club()
+
+Let's get a viewletmanager associated with ``cave``::
+
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+ >>> view = component.getMultiAdapter((cave, request), name='index')
+ >>> from zope.contentprovider.interfaces import IContentProvider
+ >>> mgr = component.getMultiAdapter((cave, request, view), IContentProvider,
+ ... 'manage.cavemen')
+
+We cannot get this viewletmanager for ``club``, as there is no viewlet
+manager associated with that as a context::
+
+ >>> component.queryMultiAdapter((club, request, view), IContentProvider,
+ ... 'manage.caveman') is None
+ True
+
+We can get the viewlet for ``cave``::
+
+ >>> mgr['fredviewlet']
+ <grok.ftests.viewlet.viewlet_context.FredViewlet object at ...>
+
+We can also directly look it up using a manual lookup::
+
+ >>> from zope.viewlet.interfaces import IViewlet
+ >>> viewlet = component.getMultiAdapter((cave, request, view, mgr),
+ ... IViewlet, name='fredviewlet')
+
+We cannot get the viewlet for the ``club`` however, as it is not associated
+with the same context::
+
+ >>> viewlet = component.getMultiAdapter((club, request, view, mgr),
+ ... IViewlet, name='fredviewlet')
+ Traceback (most recent call last):
+ ...
+ ComponentLookupError: ...
+
+"""
+
+import grok
+from zope.interface import Interface
+
+class CavemenViewletManager(grok.ViewletManager):
+ grok.name('manage.cavemen')
+
+class FredViewlet(grok.Viewlet):
+ grok.viewletmanager(CavemenViewletManager)
+
+ def render(self):
+ return 'Me Fred'
+
+class Cave(grok.Model):
+ pass
+
+class Index(grok.View):
+ def render(self):
+ return "hoi"
Added: grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context2.py
===================================================================
--- grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context2.py (rev 0)
+++ grok/branches/snowsprint-viewlets2/src/grok/ftests/viewlet/viewlet_context2.py 2008-01-24 15:12:19 UTC (rev 83169)
@@ -0,0 +1,10 @@
+"""
+This file is used by viewlet_context. It defines a model that the viewlets
+and viewlet manager should *not* be associating with.
+"""
+
+import grok
+
+class Club(grok.Model):
+ pass
+
Modified: grok/branches/snowsprint-viewlets2/src/grok/meta.py
===================================================================
--- grok/branches/snowsprint-viewlets2/src/grok/meta.py 2008-01-24 13:53:19 UTC (rev 83168)
+++ grok/branches/snowsprint-viewlets2/src/grok/meta.py 2008-01-24 15:12:19 UTC (rev 83169)
@@ -903,10 +903,11 @@
component_class = grok.Viewlet
def grok(self, name, factory, module_info, config, **kw):
+ viewlet_name = get_name_classname(factory)
+ view_context = get_context(module_info, factory)
+
factory.module_info = module_info # to make /static available
- view_context = get_context(module_info, factory)
-
# find templates
templates = module_info.getAnnotation('grok.templates', None)
if templates is not None:
@@ -928,10 +929,10 @@
config.action(
discriminator = ('viewlet', view_context, view_layer,
- view, viewletmanager, name),
+ view, viewletmanager, viewlet_name),
callable = component.provideAdapter,
args = (factory, (view_context, view_layer, view,
- viewletmanager), IViewlet, name)
+ viewletmanager), IViewlet, viewlet_name)
)
permission = get_default_permission(factory)
More information about the Checkins
mailing list