Skip to content

Commit

Permalink
split the grokkker from meta.py into meta/role.py and meta/permission.py
Browse files Browse the repository at this point in the history
  • Loading branch information
janwijbrand committed Apr 30, 2012
1 parent a4d5c76 commit 87f2f63
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 42 deletions.
8 changes: 5 additions & 3 deletions buildout.cfg
Expand Up @@ -10,11 +10,13 @@ grokcore.security =

[interpreter]
recipe = zc.recipe.egg
eggs = grokcore.security
eggs =
grokcore.security[role]
interpreter = python

[test]
recipe = zc.recipe.testrunner
eggs = grokcore.security
grokcore.security[test]
eggs =
grokcore.security
grokcore.security[test]
defaults = ['--tests-pattern', '^f?tests$', '-v']
9 changes: 7 additions & 2 deletions setup.py
Expand Up @@ -14,6 +14,7 @@ def read(*rnames):
'grokcore.view[test]',
'zope.app.wsgi',
'zope.configuration',
'zope.securitypolicy',
'zope.testing',
]

Expand Down Expand Up @@ -45,8 +46,12 @@ def read(*rnames):
'zope.component',
'zope.interface',
'zope.security',
'zope.securitypolicy',
],
tests_require=tests_require,
extras_require={'test': tests_require},
extras_require={
'role': [
'zope.securitypolicy',
],
'test': tests_require
},
)
6 changes: 6 additions & 0 deletions src/grokcore/security/meta-minimal.zcml
@@ -0,0 +1,6 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:grok="http://namespaces.zope.org/grok">
<include package="grokcore.component" file="meta.zcml" />
<grok:grok package=".meta.permission" />
</configure>
6 changes: 2 additions & 4 deletions src/grokcore/security/meta.zcml
@@ -1,9 +1,7 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:grok="http://namespaces.zope.org/grok">

<!-- Load the grokkers -->
<include package="grokcore.component" file="meta.zcml" />
<grok:grok package=".meta" />

<grok:grok package=".meta.permission" />
<grok:grok package=".meta.role" />
</configure>
Empty file.
52 changes: 52 additions & 0 deletions src/grokcore/security/meta/permission.py
@@ -0,0 +1,52 @@
#############################################################################
#
# Copyright (c) 2006-2007 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Grokkers for security-related components."""

import martian
import grokcore.component
import grokcore.component.util
import grokcore.security

from zope.security.interfaces import IPermission
from martian.error import GrokError


def default_fallback_to_name(factory, module, name, **data):
return name

class PermissionGrokker(martian.ClassGrokker):
martian.component(grokcore.security.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=grokcore.component.util.provideUtility,
args=(permission, IPermission, name),
order=-1 # need to do this early in the process
)
return True
Expand Up @@ -18,46 +18,16 @@
import grokcore.component.util
import grokcore.security

from zope.security.interfaces import IPermission
from martian.error import GrokError


def default_fallback_to_name(factory, module, name, **data):
return name

class PermissionGrokker(martian.ClassGrokker):
martian.component(grokcore.security.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=grokcore.component.util.provideUtility,
args=(permission, IPermission, name),
order=-1 # need to do this early in the process
)
return True


from zope.i18nmessageid import Message
from zope.securitypolicy.rolepermission import rolePermissionManager
from zope.securitypolicy.interfaces import IRole

from grokcore.security.directive import permissions
from grokcore.security.components import Role
from grokcore.security.meta.permission import PermissionGrokker
from grokcore.security.meta.permission import default_fallback_to_name


class RoleGrokker(martian.ClassGrokker):
Expand Down Expand Up @@ -102,4 +72,4 @@ def execute(self, factory, config, name, title, description,
callable=rolePermissionManager.grantPermissionToRole,
args=(permission, name),
)
return True
return True

0 comments on commit 87f2f63

Please sign in to comment.