summaryrefslogtreecommitdiff
path: root/repoze/bfg/zcml.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-17 20:42:01 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-17 20:42:01 +0000
commit7df825dcb19d03608ded3c5c84d1552d1232647c (patch)
tree1313d3e4e6896b50e2bd36bf27b12041a64f265b /repoze/bfg/zcml.py
parent750ce41f217cd7b638ad5b69fcb9df1b49841b58 (diff)
downloadpyramid-7df825dcb19d03608ded3c5c84d1552d1232647c.tar.gz
pyramid-7df825dcb19d03608ded3c5c84d1552d1232647c.tar.bz2
pyramid-7df825dcb19d03608ded3c5c84d1552d1232647c.zip
Move view-related helper functions from zcml.py to view.py.
Diffstat (limited to 'repoze/bfg/zcml.py')
-rw-r--r--repoze/bfg/zcml.py116
1 files changed, 1 insertions, 115 deletions
diff --git a/repoze/bfg/zcml.py b/repoze/bfg/zcml.py
index 8ad0c3ec9..bbfc8164e 100644
--- a/repoze/bfg/zcml.py
+++ b/repoze/bfg/zcml.py
@@ -35,7 +35,6 @@ from repoze.bfg.interfaces import IAuthorizationPolicy
from repoze.bfg.interfaces import ISecuredView
from repoze.bfg.interfaces import IMultiView
from repoze.bfg.interfaces import IView
-from repoze.bfg.interfaces import ILogger
from repoze.bfg.interfaces import IPackageOverrides
from repoze.bfg.interfaces import IRequest
from repoze.bfg.interfaces import IRouteRequest
@@ -47,32 +46,16 @@ from repoze.bfg.resource import PackageOverrides
from repoze.bfg.request import create_route_request_factory
-from repoze.bfg.security import Unauthorized
-
-from repoze.bfg.settings import get_settings
-
from repoze.bfg.static import StaticRootFactory
from repoze.bfg.traversal import find_interface
from repoze.bfg.view import static as static_view
-from repoze.bfg.view import NotFound
from repoze.bfg.view import MultiView
-from repoze.bfg.view import map_view
-from repoze.bfg.view import decorate_view
-from repoze.bfg.view import render_view_to_response
+from repoze.bfg.view import derive_view
import martian
-try:
- all = all
-except NameError: # pragma: no cover
- def all(iterable):
- for element in iterable:
- if not element:
- return False
- return True
-
def view(
_context,
permission=None,
@@ -253,103 +236,6 @@ def notfound(_context, view):
def forbidden(_context, view):
view_utility(_context, view, IForbiddenView)
-def derive_view(original_view, permission=None, predicates=(), attr=None,
- renderer=None, wrapper_viewname=None, viewname=None):
- mapped_view = map_view(original_view, attr, renderer)
- owrapped_view = owrap_view(mapped_view, viewname, wrapper_viewname)
- secured_view = secure_view(owrapped_view, permission)
- debug_view = authdebug_view(secured_view, permission)
- derived_view = predicate_wrap(debug_view, predicates)
- return derived_view
-
-def owrap_view(view, viewname, wrapper_viewname):
- if not wrapper_viewname:
- return view
- def _owrapped_view(context, request):
- response = view(context, request)
- request.wrapped_response = response
- request.wrapped_body = response.body
- request.wrapped_view = view
- wrapped_response = render_view_to_response(context, request,
- wrapper_viewname)
- if wrapped_response is None:
- raise ValueError(
- 'No wrapper view named %r found when executing view named %r' %
- (wrapper_viewname, viewname))
- return wrapped_response
- decorate_view(_owrapped_view, view)
- return _owrapped_view
-
-def predicate_wrap(view, predicates):
- if not predicates:
- return view
- def _wrapped(context, request):
- if all((predicate(context, request) for predicate in predicates)):
- return view(context, request)
- raise NotFound('predicate mismatch for view %s' % view)
- def checker(context, request):
- return all((predicate(context, request) for predicate in predicates))
- _wrapped.__predicated__ = checker
- decorate_view(_wrapped, view)
- return _wrapped
-
-def secure_view(view, permission):
- wrapped_view = view
- authn_policy = queryUtility(IAuthenticationPolicy)
- authz_policy = queryUtility(IAuthorizationPolicy)
- if authn_policy and authz_policy and (permission is not None):
- def _secured_view(context, request):
- principals = authn_policy.effective_principals(request)
- if authz_policy.permits(context, principals, permission):
- return view(context, request)
- msg = getattr(request, 'authdebug_message',
- 'Unauthorized: %s failed permission check' % view)
- raise Unauthorized(msg)
- _secured_view.__call_permissive__ = view
- def _permitted(context, request):
- principals = authn_policy.effective_principals(request)
- return authz_policy.permits(context, principals, permission)
- _secured_view.__permitted__ = _permitted
- wrapped_view = _secured_view
- decorate_view(wrapped_view, view)
-
- return wrapped_view
-
-def authdebug_view(view, permission):
- wrapped_view = view
- authn_policy = queryUtility(IAuthenticationPolicy)
- authz_policy = queryUtility(IAuthorizationPolicy)
- settings = get_settings()
- debug_authorization = getattr(settings, 'debug_authorization', False)
- if debug_authorization:
- def _authdebug_view(context, request):
- view_name = getattr(request, 'view_name', None)
-
- if authn_policy and authz_policy:
- if permission is None:
- msg = 'Allowed (no permission registered)'
- else:
- principals = authn_policy.effective_principals(request)
- msg = str(authz_policy.permits(context, principals,
- permission))
- else:
- msg = 'Allowed (no authorization policy in use)'
-
- view_name = getattr(request, 'view_name', None)
- url = getattr(request, 'url', None)
- msg = ('debug_authorization of url %s (view name %r against '
- 'context %r): %s' % (url, view_name, context, msg))
- logger = getUtility(ILogger, 'repoze.bfg.debug')
- logger and logger.debug(msg)
- if request is not None:
- request.authdebug_message = msg
- return view(context, request)
-
- wrapped_view = _authdebug_view
- decorate_view(wrapped_view, view)
-
- return wrapped_view
-
def scan(_context, package, martian=martian):
# martian overrideable only for unit tests
module_grokker = martian.ModuleGrokker()