summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-08-18 17:17:46 -0400
committerChris McDonough <chrism@plope.com>2011-08-18 17:17:46 -0400
commit3603dd5c7b368ca5e0bc0c40cb156b43b7a169c8 (patch)
treedb28e271914696adf70cd151d5a3ca8a34604bad
parent01cc79694e514819211294434bdbce5ac0dd58fc (diff)
downloadpyramid-3603dd5c7b368ca5e0bc0c40cb156b43b7a169c8.tar.gz
pyramid-3603dd5c7b368ca5e0bc0c40cb156b43b7a169c8.tar.bz2
pyramid-3603dd5c7b368ca5e0bc0c40cb156b43b7a169c8.zip
use __name__ unless it doesnt exist; then just use view
-rw-r--r--pyramid/config/views.py9
-rw-r--r--pyramid/tests/test_config/test_views.py78
2 files changed, 84 insertions, 3 deletions
diff --git a/pyramid/config/views.py b/pyramid/config/views.py
index 4a69d395f..5ec2f68a1 100644
--- a/pyramid/config/views.py
+++ b/pyramid/config/views.py
@@ -179,8 +179,10 @@ class ViewDeriver(object):
result = _permitted(context, request)
if result:
return view(context, request)
- msg = getattr(request, 'authdebug_message',
- 'Unauthorized: %s failed permission check' % view.__name__)
+ view_name = getattr(view, '__name__', view)
+ msg = getattr(
+ request, 'authdebug_message',
+ 'Unauthorized: %s failed permission check' % view_name)
raise HTTPForbidden(msg, result=result)
_secured_view.__call_permissive__ = view
_secured_view.__permitted__ = _permitted
@@ -230,8 +232,9 @@ class ViewDeriver(object):
def predicate_wrapper(context, request):
if all((predicate(context, request) for predicate in predicates)):
return view(context, request)
+ view_name = getattr(view, '__name__', view)
raise PredicateMismatch(
- 'predicate mismatch for view %s' % view.__name__)
+ 'predicate mismatch for view %s' % view_name)
def checker(context, request):
return all((predicate(context, request) for predicate in
predicates))
diff --git a/pyramid/tests/test_config/test_views.py b/pyramid/tests/test_config/test_views.py
index aa5b8d2d6..b1cf8e72f 100644
--- a/pyramid/tests/test_config/test_views.py
+++ b/pyramid/tests/test_config/test_views.py
@@ -929,6 +929,84 @@ class TestViewDeriver(unittest.TestCase):
request.url = 'url'
self.assertEqual(result(None, request), response)
+ def test_secured_view_raises_forbidden_no_name(self):
+ from pyramid.interfaces import IAuthenticationPolicy
+ from pyramid.interfaces import IAuthorizationPolicy
+ from pyramid.httpexceptions import HTTPForbidden
+ response = DummyResponse()
+ view = lambda *arg: response
+ self.config.registry.settings = {}
+ policy = DummySecurityPolicy(False)
+ self.config.registry.registerUtility(policy, IAuthenticationPolicy)
+ self.config.registry.registerUtility(policy, IAuthorizationPolicy)
+ deriver = self._makeOne(permission='view')
+ result = deriver(view)
+ request = self._makeRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ try:
+ result(None, request)
+ except HTTPForbidden, e:
+ self.assertEqual(e.message,
+ 'Unauthorized: <lambda> failed permission check')
+ else:
+ raise AssertionError
+
+ def test_secured_view_raises_forbidden_with_name(self):
+ from pyramid.interfaces import IAuthenticationPolicy
+ from pyramid.interfaces import IAuthorizationPolicy
+ from pyramid.httpexceptions import HTTPForbidden
+ def myview(request): pass
+ self.config.registry.settings = {}
+ policy = DummySecurityPolicy(False)
+ self.config.registry.registerUtility(policy, IAuthenticationPolicy)
+ self.config.registry.registerUtility(policy, IAuthorizationPolicy)
+ deriver = self._makeOne(permission='view')
+ result = deriver(myview)
+ request = self._makeRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ try:
+ result(None, request)
+ except HTTPForbidden, e:
+ self.assertEqual(e.message,
+ 'Unauthorized: myview failed permission check')
+ else:
+ raise AssertionError
+
+ def test_predicate_mismatch_view_has_no_name(self):
+ from pyramid.exceptions import PredicateMismatch
+ response = DummyResponse()
+ view = lambda *arg: response
+ def predicate1(context, request):
+ return False
+ deriver = self._makeOne(predicates=[predicate1])
+ result = deriver(view)
+ request = self._makeRequest()
+ request.method = 'POST'
+ try:
+ result(None, None)
+ except PredicateMismatch, e:
+ self.assertEqual(e.detail, 'predicate mismatch for view <lambda>')
+ else:
+ raise AssertionError
+
+ def test_predicate_mismatch_view_has_name(self):
+ from pyramid.exceptions import PredicateMismatch
+ def myview(request): pass
+ def predicate1(context, request):
+ return False
+ deriver = self._makeOne(predicates=[predicate1])
+ result = deriver(myview)
+ request = self._makeRequest()
+ request.method = 'POST'
+ try:
+ result(None, None)
+ except PredicateMismatch, e:
+ self.assertEqual(e.detail, 'predicate mismatch for view myview')
+ else:
+ raise AssertionError
+
def test_with_predicates_all(self):
response = DummyResponse()
view = lambda *arg: response