[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