From 3603dd5c7b368ca5e0bc0c40cb156b43b7a169c8 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 18 Aug 2011 17:17:46 -0400 Subject: use __name__ unless it doesnt exist; then just use view --- pyramid/config/views.py | 9 ++-- pyramid/tests/test_config/test_views.py | 78 +++++++++++++++++++++++++++++++++ 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: 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 ') + 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 -- cgit v1.2.3