[Checkins] SVN: grokcore.view/trunk/src/grokcore/view/ Depend on grokcore.security

Philipp von Weitershausen philikon at philikon.de
Mon Jul 28 17:35:04 EDT 2008


Log message for revision 88917:
  Depend on grokcore.security
  

Changed:
  U   grokcore.view/trunk/src/grokcore/view/__init__.py
  U   grokcore.view/trunk/src/grokcore/view/components.py
  U   grokcore.view/trunk/src/grokcore/view/directive.py
  U   grokcore.view/trunk/src/grokcore/view/ftesting.zcml
  U   grokcore.view/trunk/src/grokcore/view/meta.py
  U   grokcore.view/trunk/src/grokcore/view/meta.zcml
  U   grokcore.view/trunk/src/grokcore/view/testing.py
  U   grokcore.view/trunk/src/grokcore/view/util.py

-=-
Modified: grokcore.view/trunk/src/grokcore/view/__init__.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/__init__.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/__init__.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -1,8 +1,9 @@
 from grokcore.component import *
+from grokcore.security import *
 
-from grokcore.view.directive import layer, view, require, template, templatedir
+from grokcore.view.directive import layer, view, template, templatedir
 from grokcore.view.util import url
-from grokcore.view.components import View, Permission, Public, GrokForm, Skin
+from grokcore.view.components import View, GrokForm, Skin
 from grokcore.view.components import PageTemplate, PageTemplateFile
 from grokcore.view.components import IGrokLayer
 

Modified: grokcore.view/trunk/src/grokcore/view/components.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/components.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/components.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -6,7 +6,6 @@
 from zope import interface
 from zope.publisher.publish import mapply
 from zope.publisher.browser import BrowserPage
-from zope.security.permission import Permission
 from zope.pagetemplate import pagetemplate, pagetemplatefile
 from zope.app.pagetemplate.engine import TrustedAppPT
 from zope.app.publisher.browser import directoryresource
@@ -17,13 +16,6 @@
 from grokcore.view import util, interfaces
 
 
-class Permission(Permission):
-    pass
-
-
-Public = 'zope.Public'
-
-
 class Skin(object):
     pass
 

Modified: grokcore.view/trunk/src/grokcore/view/directive.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/directive.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/directive.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -1,18 +1,7 @@
-import sys
-
+import martian
 from zope.publisher.interfaces.browser import IBrowserView
 
-import martian
-from martian import util
-from martian.directive import StoreMultipleTimes
-from martian.error import GrokError
-from martian.error import GrokImportError
 
-import grokcore.component
-
-from grokcore.view.components import Permission
-
-
 class template(martian.Directive):
     scope = martian.CLASS
     store = martian.ONCE
@@ -38,47 +27,3 @@
 
 class view(OneInterfaceOrClassOnClassOrModule):
     default = IBrowserView
-
-
-class RequireDirectiveStore(StoreMultipleTimes):
-
-    def get(self, directive, component, default):
-        permissions = getattr(component, directive.dotted_name(), 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()
-
-
-class require(martian.Directive):
-    scope = martian.CLASS
-    store = RequireDirectiveStore()
-
-    def validate(self, value):
-        if util.check_subclass(value, Permission):
-            return
-        if util.not_unicode_or_ascii(value):
-            raise GrokImportError(
-                "You can only pass unicode, ASCII, or a subclass "
-                "of grok.Permission to the '%s' directive." % self.name)
-
-    def factory(self, value):
-        if util.check_subclass(value, Permission):
-            return grokcore.component.name.bind().get(value)
-        return value
-
-    def __call__(self, func):
-        # grok.require can be used both as a class-level directive and
-        # as a decorator for methods.  Therefore we return a decorator
-        # here, which may be used for methods, or simply ignored when
-        # used as a directive.
-        frame = sys._getframe(1)
-        permission = self.store.pop(frame.f_locals, self)
-        self.set(func, [permission])
-        return func

Modified: grokcore.view/trunk/src/grokcore/view/ftesting.zcml
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftesting.zcml	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/ftesting.zcml	2008-07-28 21:35:04 UTC (rev 88917)
@@ -14,7 +14,6 @@
 
   <include package="zope.app.zcmlfiles" file="meta.zcml" />
   <include package="zope.securitypolicy" file="meta.zcml" />
-  <include package="grokcore.component" file="meta.zcml" />
   <include package="grokcore.view" file="meta.zcml" />
 
   <!--include package="zope.app.security" />

Modified: grokcore.view/trunk/src/grokcore/view/meta.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/meta.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/meta.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -5,7 +5,6 @@
 from zope.publisher.interfaces.browser import IBrowserPage
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.publisher.interfaces.browser import IBrowserSkinType
-from zope.security.interfaces import IPermission
 from zope.security.checker import NamesChecker
 
 import martian
@@ -13,13 +12,13 @@
 from martian.error import GrokError
 
 import grokcore.component
+import grokcore.security
 
 from grokcore.view import components
 from grokcore.view import formlib
 from grokcore.view import templatereg
 from grokcore.view.util import default_view_name
-from grokcore.view.util import default_fallback_to_name
-from grokcore.view.util import protect_name
+from grokcore.security.util import protect_name
 
 
 class SkinGrokker(martian.ClassGrokker):
@@ -62,7 +61,7 @@
         # @grok.require on any of the view's methods.
         methods = util.methods_from_class(factory)
         for method in methods:
-            if grokcore.view.require.bind().get(method) is not None:
+            if grokcore.security.require.bind().get(method) is not None:
                 raise GrokError('The @grok.require decorator is used for '
                                 'method %r in view %r. It may only be used '
                                 'for XML-RPC methods.'
@@ -94,7 +93,7 @@
 
 class ViewSecurityGrokker(martian.ClassGrokker):
     martian.component(grokcore.view.View)
-    martian.directive(grokcore.view.require, name='permission')
+    martian.directive(grokcore.security.require, name='permission')
 
     def execute(self, factory, config, permission, **kw):
         for method_name in list(IBrowserPage):
@@ -125,32 +124,6 @@
         return True
 
 
-class PermissionGrokker(martian.ClassGrokker):
-    martian.component(grokcore.view.Permission)
-    martian.priority(1500)
-    martian.directive(grokcore.component.name)
-    martian.directive(grokcore.component.title,
-        get_default=default_fallback_to_name)
-    martian.directive(grokcore.component.description)
-
-    def execute(self, factory, config, name, title, description, **kw):
-        if not name:
-            raise GrokError(
-                "A permission needs to have a dotted name for its id. Use "
-                "grok.name to specify one.", factory)
-        # We can safely convert to unicode, since the directives make sure
-        # it is either unicode already or ASCII.
-        permission = factory(unicode(name), unicode(title),
-                             unicode(description))
-
-        config.action(
-            discriminator=('utility', IPermission, name),
-            callable=component.provideUtility,
-            args=(permission, IPermission, name),
-            order=-1) # need to do this early in the process
-        return True
-
-
 class TemplateGrokker(martian.GlobalGrokker):
     # this needs to happen before any other grokkers execute that use
     # the template registry

Modified: grokcore.view/trunk/src/grokcore/view/meta.zcml
===================================================================
--- grokcore.view/trunk/src/grokcore/view/meta.zcml	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/meta.zcml	2008-07-28 21:35:04 UTC (rev 88917)
@@ -1,8 +1,10 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
-    xmlns:browser="http://namespaces.zope.org/browser"
     xmlns:grok="http://namespaces.zope.org/grok">
 
+  <include package="grokcore.component" file="meta.zcml" />
+  <include package="grokcore.security" file="meta.zcml" />
+
   <grok:grok package=".meta" />
   <!-- ZPT support -->
   <grok:grok package=".templatereg" />

Modified: grokcore.view/trunk/src/grokcore/view/testing.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/testing.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/testing.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -1,13 +1,12 @@
 import sys
-
 from zope.configuration.config import ConfigurationMachine
-
 from grokcore.component import zcml
 
 
 def grok(module_name):
     config = ConfigurationMachine()
     zcml.do_grok('grokcore.component.meta', config)
+    zcml.do_grok('grokcore.security.meta', config)
     zcml.do_grok('grokcore.view.meta', config)
     zcml.do_grok('grokcore.view.templatereg', config)
     zcml.do_grok(module_name, config)

Modified: grokcore.view/trunk/src/grokcore/view/util.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/util.py	2008-07-28 21:29:19 UTC (rev 88916)
+++ grokcore.view/trunk/src/grokcore/view/util.py	2008-07-28 21:35:04 UTC (rev 88917)
@@ -3,12 +3,8 @@
 from zope import component
 from zope.traversing.browser.interfaces import IAbsoluteURL
 from zope.traversing.browser.absoluteurl import _safe as SAFE_URL_CHARACTERS
-from zope.security.interfaces import IPermission
-from zope.app.security.protectclass import protectName
 
-from martian.error import GrokError
 
-
 def url(request, obj, name=None, data={}):
     url = component.getMultiAdapter((obj, request), IAbsoluteURL)()
     if name is not None:
@@ -30,25 +26,3 @@
 
 def default_fallback_to_name(factory, module, name, **data):
     return name
-
-def protect_name(class_, name, permission=None):
-    # Define an attribute checker using zope.app.security's
-    # protectName that defaults to the 'zope.Public' permission when
-    # it's not been given and makes sure the permission has actually
-    # been defined when it has.
-    if permission is None:
-        permission = 'zope.Public'
-    else:
-        check_permission(class_, permission)
-    protectName(class_, name, permission)
-
-def check_permission(factory, permission):
-    """Check whether a permission is defined.
-
-    If not, raise error for factory.
-    """
-    if component.queryUtility(IPermission,
-                              name=permission) is None:
-        raise GrokError('Undefined permission %r in %r. Use '
-                        'grok.Permission first.'
-                        % (permission, factory), factory)



More information about the Checkins mailing list