[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