[Checkins] SVN: megrok.menu/branches/fixes-for-grok0.14/ Branch to make megrok.menu, compatible with Grok 0.14.
Santiago Videla
santiago.videla at gmail.com
Fri Dec 12 15:27:22 EST 2008
Log message for revision 94004:
Branch to make megrok.menu, compatible with Grok 0.14.
Changes:
- MenuItemGrokker now inherits from ViewSecurityGrokker instead of ViewGrokker.
- excute method in MenuItemGrokker changed it's signature and use a diferent 'discriminator' on config.action call
- grok it's no longer a dependency, as we import from grokcore.* packages
Changed:
A megrok.menu/branches/fixes-for-grok0.14/
U megrok.menu/branches/fixes-for-grok0.14/setup.py
U megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/ftesting.zcml
D megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py
A megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py
-=-
Property changes on: megrok.menu/branches/fixes-for-grok0.14
___________________________________________________________________
Added: svn:ignore
+ bin
parts
eggs
develop-eggs
.installed.cfg
Added: svn:mergeinfo
+
Modified: megrok.menu/branches/fixes-for-grok0.14/setup.py
===================================================================
--- megrok.menu/trunk/setup.py 2008-12-11 23:53:32 UTC (rev 93923)
+++ megrok.menu/branches/fixes-for-grok0.14/setup.py 2008-12-12 20:27:21 UTC (rev 94004)
@@ -28,7 +28,8 @@
'setuptools',
'martian',
'grokcore.component',
- 'grok', # just for the ViewGrokker
+ 'grokcore.view',
+ 'grokcore.security',
],
entry_points="""
# -*- Entry points: -*-
Modified: megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/ftesting.zcml
===================================================================
--- megrok.menu/trunk/src/megrok/menu/ftesting.zcml 2008-12-11 23:53:32 UTC (rev 93923)
+++ megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/ftesting.zcml 2008-12-12 20:27:21 UTC (rev 94004)
@@ -1,6 +1,7 @@
<configure
xmlns="http://namespaces.zope.org/zope"
- xmlns:grok="http://namespaces.zope.org/grok">
+ xmlns:grok="http://namespaces.zope.org/grok"
+ i18n_domain="megrok.menu">
<include package="grok" />
<include package="megrok.menu" file="meta.zcml" />
Deleted: megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/grokker.py 2008-12-11 23:53:32 UTC (rev 93923)
+++ megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py 2008-12-12 20:27:21 UTC (rev 94004)
@@ -1,61 +0,0 @@
-import martian
-import grokcore.component
-import megrok.menu
-from martian.error import GrokError
-from grok.meta import ViewGrokker, default_view_name
-from zope.configuration.exceptions import ConfigurationError
-from zope.publisher.interfaces.browser import IBrowserPage
-from zope.app.publisher.browser.menumeta import menuDirective, menuItemDirective
-from zope.app.security.protectclass import protectName
-
-class MenuGrokker(martian.ClassGrokker):
- martian.component(megrok.menu.Menu)
- martian.priority(1500)
- martian.directive(grokcore.component.name, get_default=default_view_name)
- martian.directive(grokcore.component.title, default=u'')
- martian.directive(grokcore.component.description, default=u'')
-
- def execute(self, factory, config, name, title, description, **kw):
- menuDirective(config, id=name, class_=factory,
- title=title, description=description)
- return True
-
-class MenuItemGrokker(ViewGrokker):
- martian.directive(megrok.menu.menuitem)
- martian.directive(grokcore.component.title, default=u'')
- martian.directive(grokcore.component.description, default=u'')
-
- def execute(self, factory, config, context, layer, name, permission,
- menuitem, title, description, **kw):
- if menuitem is None:
- return False
- menu_id, icon, filter, order = menuitem
- try:
- menu = config.resolve('zope.app.menus.'+menu_id)
- except ConfigurationError, v:
- raise GrokError("The %r menu could not be found. Please use "
- "megrok.menu.Menu to register a menu first."
- % menu_id, factory)
- menuItemDirective(config, menu=menu, for_=context, action=name,
- title=title, description=description, icon=icon,
- filter=filter, permission=permission, layer=layer,
- order=order)
-
- # Menu items check whether the view that they refer to can be
- # traversed to. Unfortunately, views will end up being
- # security proxied during that fake traversal. For this to
- # work then, we must define a checker not only for __call__
- # but also for browserDefault and those other methods from
- # IBrowserPage:
- if permission is None:
- permission = 'zope.Public'
- for method_name in list(IBrowserPage):
- if method_name == '__call__':
- continue
- config.action(
- discriminator=('protectName', factory, method_name),
- callable=protectName,
- args=(factory, method_name, permission),
- )
-
- return True
Copied: megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py (from rev 93924, megrok.menu/trunk/src/megrok/menu/grokker.py)
===================================================================
--- megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py (rev 0)
+++ megrok.menu/branches/fixes-for-grok0.14/src/megrok/menu/grokker.py 2008-12-12 20:27:21 UTC (rev 94004)
@@ -0,0 +1,73 @@
+import martian
+from martian.error import GrokError
+
+import grokcore.component
+import grokcore.view
+from grokcore.security.util import protect_getattr
+from grokcore.view.meta.views import ViewSecurityGrokker, default_view_name
+
+from zope.configuration.exceptions import ConfigurationError
+from zope.app.publisher.browser.menumeta import menuDirective, menuItemDirective
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.publisher.interfaces.browser import IBrowserPage
+
+import megrok.menu
+
+class MenuGrokker(martian.ClassGrokker):
+ martian.component(megrok.menu.Menu)
+ martian.priority(1500)
+ martian.directive(grokcore.component.name, get_default=default_view_name)
+ martian.directive(grokcore.component.title, default=u'')
+ martian.directive(grokcore.component.description, default=u'')
+
+ def execute(self, factory, config, name, title, description, **kw):
+ menuDirective(config, id=name, class_=factory,
+ title=title, description=description)
+ return True
+
+class MenuItemGrokker(ViewSecurityGrokker):
+ martian.directive(megrok.menu.menuitem)
+ martian.directive(grokcore.component.context)
+ martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+ martian.directive(grokcore.component.name, get_default=default_view_name)
+ martian.directive(grokcore.component.title, default=u'')
+ martian.directive(grokcore.component.description, default=u'')
+
+ def execute(self, factory, config, permission, context=None, layer=None, \
+ name=u'', menuitem=None, description=u'', title=u''):
+
+ if menuitem is None:
+ return False
+ menu_id, icon, filter, order = menuitem
+ try:
+ menu = config.resolve('zope.app.menus.'+menu_id)
+ except ConfigurationError, v:
+ raise GrokError("The %r menu could not be found. Please use "
+ "megrok.menu.Menu to register a menu first."
+ % menu_id, factory)
+ menuItemDirective(config, menu=menu, for_=context, action=name,
+ title=title, description=description, icon=icon,
+ filter=filter, permission=permission, layer=layer,
+ order=order)
+
+ # Menu items check whether the view that they refer to can be
+ # traversed to. Unfortunately, views will end up being
+ # security proxied during that fake traversal. For this to
+ # work then, we must define a checker not only for __call__
+ # but also for browserDefault and those other methods from
+ # IBrowserPage:
+ ######
+ # This is no longer needed. protect_getattr function will take care.
+ #if permission is None:
+ # permission = 'zope.Public'
+
+ for method_name in IBrowserPage:
+ if method_name == '__call__':
+ continue
+ config.action(
+ discriminator=('protectMenuName', factory, method_name),
+ callable=protect_getattr,
+ args=(factory, method_name, permission),
+ )
+
+ return True
More information about the Checkins
mailing list