[Checkins] SVN: grok/branches/snowsprint-viewlets/src/grok/ Added a
grok.view() directive for use with viewlets and viewlet managers.
Tim TerlegÃÂ¥rd
tim.terlegard at valentinewebsystems.se
Tue Jan 22 12:00:25 EST 2008
Log message for revision 83094:
Added a grok.view() directive for use with viewlets and viewlet managers.
Changed:
U grok/branches/snowsprint-viewlets/src/grok/__init__.py
U grok/branches/snowsprint-viewlets/src/grok/directive.py
U grok/branches/snowsprint-viewlets/src/grok/ftests/viewlet/viewlet_security.py
U grok/branches/snowsprint-viewlets/src/grok/meta.py
-=-
Modified: grok/branches/snowsprint-viewlets/src/grok/__init__.py
===================================================================
--- grok/branches/snowsprint-viewlets/src/grok/__init__.py 2008-01-22 16:35:08 UTC (rev 83093)
+++ grok/branches/snowsprint-viewlets/src/grok/__init__.py 2008-01-22 17:00:25 UTC (rev 83094)
@@ -44,7 +44,8 @@
from grok.directive import (context, name, title, template, templatedir,
provides, baseclass, global_utility, local_utility,
- permissions, require, site, layer, direct, viewletmanager)
+ permissions, require, site, layer, direct, viewletmanager,
+ view)
from grok.decorators import subscribe, adapter, implementer
from martian.error import GrokError, GrokImportError
Modified: grok/branches/snowsprint-viewlets/src/grok/directive.py
===================================================================
--- grok/branches/snowsprint-viewlets/src/grok/directive.py 2008-01-22 16:35:08 UTC (rev 83093)
+++ grok/branches/snowsprint-viewlets/src/grok/directive.py 2008-01-22 17:00:25 UTC (rev 83094)
@@ -127,3 +127,5 @@
direct = MarkerDirective('grok.direct', ClassDirectiveContext())
viewletmanager = InterfaceOrClassDirective('grok.viewletmanager',
ClassDirectiveContext())
+view = InterfaceOrClassDirective('grok.view',
+ ClassDirectiveContext())
Modified: grok/branches/snowsprint-viewlets/src/grok/ftests/viewlet/viewlet_security.py
===================================================================
--- grok/branches/snowsprint-viewlets/src/grok/ftests/viewlet/viewlet_security.py 2008-01-22 16:35:08 UTC (rev 83093)
+++ grok/branches/snowsprint-viewlets/src/grok/ftests/viewlet/viewlet_security.py 2008-01-22 17:00:25 UTC (rev 83094)
@@ -12,6 +12,7 @@
>>> root = getRootFolder()
>>> root['wilma'] = CaveWoman()
+ >>> root['fred'] = CaveMan()
Traverse to the view on the model object. We get the viewlets
registered for the default layer, with the anybody permission::
@@ -37,7 +38,8 @@
Gold Bone
T-Rex Bone
-Now we traverse to the view through a skin. Now we gain the viewlet registered for a particular layer, ``LayeredBone``::
+Now we traverse to the view through a skin. We gain the viewlet
+registered for a particular layer, ``LayeredBone``::
>>> browser.open('http://localhost/++skin++boneskin/wilma/@@caveview')
>>> print browser.contents
@@ -46,10 +48,34 @@
Layered Bone
T-Rex Bone
+Only viewlets registered for the CaveMan model, ``ManBone``, should up
+when traversing to fred::
+
+ >>> browser.open('http://localhost/fred/@@caveview')
+ >>> print browser.contents
+ Brack Bone
+ Gold Bone
+ Man Bone
+ T-Rex Bone
+
+
+Viewlets registered for a particular view, like ``LadyViewlet``,
+should only associate with that particular one::
+
+ >>> browser.open('http://localhost/fred/@@fireview')
+ >>> print browser.contents
+ Brack Bone
+ Gold Bone
+ Lady Viewlet
+ Man Bone
+ T-Rex Bone
+
+
"""
import grok
+from zope.interface import Interface
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
@@ -59,19 +85,29 @@
class CaveWoman(grok.Model):
pass
-class CaveView(grok.View):
+class CaveMan(grok.Model):
pass
+class CaveView(grok.View):
+ grok.context(Interface)
+
+class FireView(grok.View):
+ grok.context(Interface)
+ grok.template('caveview')
+
class Pot(grok.ViewletManager):
+ grok.context(Interface)
grok.name('pot')
class TRexBone(grok.Viewlet):
+ grok.context(Interface)
grok.viewletmanager(Pot)
def render(self):
return "T-Rex Bone"
class BrackerBone(grok.Viewlet):
+ grok.context(Interface)
grok.viewletmanager(Pot)
def render(self):
@@ -83,6 +119,7 @@
grok.permissions('bone.gold')
class GoldBone(grok.Viewlet):
+ grok.context(Interface)
grok.viewletmanager(Pot)
grok.require('bone.gold')
@@ -93,11 +130,27 @@
pass
class LayeredBone(grok.Viewlet):
+ grok.context(Interface)
grok.viewletmanager(Pot)
grok.layer(IBoneLayer)
def render(self):
return 'Layered Bone'
+class ManBone(grok.Viewlet):
+ grok.viewletmanager(Pot)
+ grok.context(CaveMan)
+
+ def render(self):
+ return "Man Bone"
+
+class LadyViewlet(grok.Viewlet):
+ grok.context(Interface)
+ grok.viewletmanager(Pot)
+ grok.view(FireView)
+
+ def render(self):
+ return 'Lady Viewlet'
+
class BoneSkin(grok.Skin):
grok.layer(IBoneLayer)
Modified: grok/branches/snowsprint-viewlets/src/grok/meta.py
===================================================================
--- grok/branches/snowsprint-viewlets/src/grok/meta.py 2008-01-22 16:35:08 UTC (rev 83093)
+++ grok/branches/snowsprint-viewlets/src/grok/meta.py 2008-01-22 17:00:25 UTC (rev 83094)
@@ -884,9 +884,13 @@
None) or module_info.getAnnotation('grok.layer',
None) or IDefaultBrowserLayer
- context = module_info.getAnnotation('grok.context', None)
+ context = module_info.getAnnotation('grok.context', interface.Interface)
view_context = util.determine_class_context(factory, context)
+ # content providers can be associated with a view as well
+ # we default to all views, or IBrowserView
+ view = grok.util.class_annotation(factory, 'grok.view', IBrowserView)
+
view_layer = determine_class_directive('grok.layer', factory,
module_info,
default=IDefaultBrowserLayer)
@@ -894,9 +898,9 @@
# TODO - manager is registered for IBrowserView instead of the real view
config.action(
discriminator = ('viewletManager', view_context, view_layer,
- IBrowserView, name),
+ view, name),
callable = component.provideAdapter,
- args = (factory, (interface.Interface, view_layer, IBrowserView),
+ args = (factory, (interface.Interface, view_layer, view),
IViewletManager, name)
)
@@ -957,9 +961,13 @@
raise GrokError("View %r has no associated template or "
"'render' method." % factory, factory)
- context = module_info.getAnnotation('grok.context', None)
+ context = module_info.getAnnotation('grok.context', interface.Interface)
view_context = util.determine_class_context(factory, context)
+ # content providers can be associated with a view as well
+ # we default to all views, or IBrowserView
+ view = grok.util.class_annotation(factory, 'grok.view', IBrowserView)
+
viewletmanager = grok.util.class_annotation(factory, 'grok.viewletmanager', [])
view_layer = util.class_annotation(factory, 'grok.layer',
None) or module_info.getAnnotation('grok.layer',
@@ -967,9 +975,9 @@
config.action(
discriminator = ('viewlet', view_context, view_layer,
- IBrowserView, viewletmanager, name),
+ view, viewletmanager, name),
callable = component.provideAdapter,
- args = (factory, (view_context, view_layer, IBrowserView,
+ args = (factory, (view_context, view_layer, view,
viewletmanager), IViewlet, name)
)
More information about the Checkins
mailing list