[Checkins] SVN: grok/branches/jw-philipp-using-ndir-directives/src/grok/ Use the grok.require directive in the grokkers and replace a utility function with a custom getter.

Philipp von Weitershausen philikon at philikon.de
Sat May 3 09:34:48 EDT 2008


Log message for revision 86209:
  Use the grok.require directive in the grokkers and replace a utility function with a custom getter.

Changed:
  U   grok/branches/jw-philipp-using-ndir-directives/src/grok/directive.py
  U   grok/branches/jw-philipp-using-ndir-directives/src/grok/meta.py
  U   grok/branches/jw-philipp-using-ndir-directives/src/grok/util.py

-=-
Modified: grok/branches/jw-philipp-using-ndir-directives/src/grok/directive.py
===================================================================
--- grok/branches/jw-philipp-using-ndir-directives/src/grok/directive.py	2008-05-03 13:27:51 UTC (rev 86208)
+++ grok/branches/jw-philipp-using-ndir-directives/src/grok/directive.py	2008-05-03 13:34:48 UTC (rev 86209)
@@ -21,7 +21,7 @@
 
 import martian
 from martian import util
-from martian.error import GrokImportError
+from martian.error import GrokImportError, GrokError
 from martian.directive import StoreMultipleTimes
 from grok import components
 
@@ -61,6 +61,17 @@
 
 class RequireDirectiveStore(StoreMultipleTimes):
 
+    def get(self, directive, component, default):
+        permissions = super(RequireDirectiveStore, self).get(
+            directive, component, default)
+        if (permissions is default) or not permissions:
+            return default
+        if len(permissions) > 1:
+            raise GrokError('grok.require was called multiple times in '
+                            '%r. It may only be set once for a class.'
+                            % component, component)
+        return permissions[0]
+
     def pop(self, locals_, directive):
         return locals_[directive.dotted_name()].pop()
 
@@ -88,7 +99,7 @@
         # used as a directive.
         frame = sys._getframe(1)
         permission = self.store.pop(frame.f_locals, self)
-        self.set(func, permission)
+        self.set(func, [permission])
         return func
 
 class site(martian.Directive):

Modified: grok/branches/jw-philipp-using-ndir-directives/src/grok/meta.py
===================================================================
--- grok/branches/jw-philipp-using-ndir-directives/src/grok/meta.py	2008-05-03 13:27:51 UTC (rev 86208)
+++ grok/branches/jw-philipp-using-ndir-directives/src/grok/meta.py	2008-05-03 13:34:48 UTC (rev 86209)
@@ -49,7 +49,7 @@
 
 import grok
 from grok import components, formlib, templatereg
-from grok.util import check_permission, get_default_permission, make_checker
+from grok.util import check_permission, make_checker
 from grok.util import public_methods_from_class
 from grok.rest import RestPublisher
 from grok.interfaces import IRESTSkinType
@@ -84,9 +84,8 @@
         view_context = get_context(factory, module_info)
 
         methods = public_methods_from_class(factory)
+        default_permission = grok.require.get(factory)
 
-        default_permission = get_default_permission(factory)
-
         # make sure we issue an action to check whether this permission
         # exists. That's the only thing that action does
         if default_permission is not None:
@@ -134,8 +133,7 @@
         view_context = get_context(factory, module_info)
 
         methods = public_methods_from_class(factory)
-
-        default_permission = get_default_permission(factory)
+        default_permission = grok.require.get(factory)
         # make sure we issue an action to check whether this permission
         # exists. That's the only thing that action does
         if default_permission is not None:
@@ -237,7 +235,7 @@
             args=(factory, adapts, interface.Interface, view_name),
             )
 
-        permission = get_default_permission(factory)
+        permission = grok.require.get(factory)
         config.action(
             discriminator=('protectName', factory, '__call__'),
             callable=make_checker,
@@ -263,8 +261,7 @@
         view_context = get_context(factory, module_info)
 
         methods = public_methods_from_class(factory)
-
-        default_permission = get_default_permission(factory)
+        default_permission = grok.require.get(factory)
         # make sure we issue an action to check whether this permission
         # exists. That's the only thing that action does
         if default_permission is not None:
@@ -868,7 +865,7 @@
                     viewletmanager), IViewlet, viewlet_name)
             )
 
-        permission = get_default_permission(factory)
+        permission = grok.require.get(factory)
         config.action(
             discriminator=('protectName', factory, '__call__'),
             callable=make_checker,

Modified: grok/branches/jw-philipp-using-ndir-directives/src/grok/util.py
===================================================================
--- grok/branches/jw-philipp-using-ndir-directives/src/grok/util.py	2008-05-03 13:27:51 UTC (rev 86208)
+++ grok/branches/jw-philipp-using-ndir-directives/src/grok/util.py	2008-05-03 13:34:48 UTC (rev 86209)
@@ -65,22 +65,6 @@
                        'grok.Permission first.'
                        % (permission, factory), factory)
 
-def get_default_permission(factory):
-    """Determine the default permission for a view.
-
-    There can be only 0 or 1 default permission.
-    """
-    permissions = class_annotation(factory, 'grok.require', [])
-    if not permissions:
-        return None
-    if len(permissions) > 1:
-        raise GrokError('grok.require was called multiple times in '
-                        '%r. It may only be set once for a class.'
-                        % factory, factory)
-
-    result = permissions[0]
-    return result
-
 def url(request, obj, name=None, data={}):
     url = component.getMultiAdapter((obj, request), IAbsoluteURL)()
     if name is not None:



More information about the Checkins mailing list