summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-08-22 22:00:29 -0400
committerChris McDonough <chrism@plope.com>2011-08-22 22:00:29 -0400
commitf67ba4a4880f1d155ba9bf39dbfcfb9165f1bdee (patch)
treecd79729dc53983f778a82606e3e2de2a024b8ea2
parent30d74ad4b0fb8484d0265f429b87c7a88bee4192 (diff)
downloadpyramid-f67ba4a4880f1d155ba9bf39dbfcfb9165f1bdee.tar.gz
pyramid-f67ba4a4880f1d155ba9bf39dbfcfb9165f1bdee.tar.bz2
pyramid-f67ba4a4880f1d155ba9bf39dbfcfb9165f1bdee.zip
fix security and setup_registry related tests
-rw-r--r--pyramid/config/__init__.py8
-rw-r--r--pyramid/config/security.py11
-rw-r--r--pyramid/tests/test_config/test_init.py8
-rw-r--r--pyramid/tests/test_config/test_security.py15
4 files changed, 30 insertions, 12 deletions
diff --git a/pyramid/config/__init__.py b/pyramid/config/__init__.py
index baae824ac..fa607b18d 100644
--- a/pyramid/config/__init__.py
+++ b/pyramid/config/__init__.py
@@ -293,11 +293,6 @@ class Configurator(
registry.registerUtility(debug_logger, IDebugLogger)
- if renderers is None:
- for name, renderer in DEFAULT_RENDERERS:
- self.add_renderer(name, renderer)
- renderers = []
-
if exceptionresponse_view is not None:
exceptionresponse_view = self.maybe_dotted(exceptionresponse_view)
self.add_view(exceptionresponse_view, context=IExceptionResponse)
@@ -326,6 +321,9 @@ class Configurator(
if default_view_mapper is not None:
self.set_view_mapper(default_view_mapper)
+ if renderers is None:
+ renderers = DEFAULT_RENDERERS
+
for name, renderer in renderers:
self.add_renderer(name, renderer)
diff --git a/pyramid/config/security.py b/pyramid/config/security.py
index 96e2c1479..bdf9be5e6 100644
--- a/pyramid/config/security.py
+++ b/pyramid/config/security.py
@@ -3,6 +3,7 @@ from pyramid.interfaces import IAuthenticationPolicy
from pyramid.interfaces import IDefaultPermission
from pyramid.interfaces import PHASE1_CONFIG
from pyramid.interfaces import PHASE2_CONFIG
+from pyramid.interfaces import PHASE3_CONFIG
from pyramid.exceptions import ConfigurationError
from pyramid.config.util import action_method
@@ -47,9 +48,19 @@ class SecurityConfiguratorMixin(object):
"""
def register():
self._set_authorization_policy(policy)
+ def ensure():
+ if self.autocommit:
+ return
+ if self.registry.queryUtility(IAuthenticationPolicy) is None:
+ raise ConfigurationError(
+ 'Cannot configure an authorization policy without '
+ 'also configuring an authentication policy '
+ '(use the set_authorization_policy method)')
+
# authorization policy used by view config (phase 3) and
# authentication policy (phase 2)
self.action(IAuthorizationPolicy, register, order=PHASE1_CONFIG)
+ self.action(None, ensure, order=PHASE3_CONFIG)
def _set_authorization_policy(self, policy):
policy = self.maybe_dotted(policy)
diff --git a/pyramid/tests/test_config/test_init.py b/pyramid/tests/test_config/test_init.py
index 05feb93e9..e861e888e 100644
--- a/pyramid/tests/test_config/test_init.py
+++ b/pyramid/tests/test_config/test_init.py
@@ -211,6 +211,7 @@ class ConfiguratorTests(unittest.TestCase):
def test_ctor_default_permission(self):
from pyramid.interfaces import IDefaultPermission
config = self._makeOne(default_permission='view')
+ config.commit()
self.assertEqual(config.registry.getUtility(IDefaultPermission), 'view')
def test_ctor_session_factory(self):
@@ -463,6 +464,7 @@ class ConfiguratorTests(unittest.TestCase):
reg = Registry()
config = self._makeOne(reg)
config.setup_registry(authentication_policy=policy)
+ config.commit()
result = reg.getUtility(IAuthenticationPolicy)
self.assertEqual(policy, result)
@@ -472,6 +474,7 @@ class ConfiguratorTests(unittest.TestCase):
reg = Registry()
config = self._makeOne(reg)
config.setup_registry(authentication_policy='pyramid.tests')
+ config.commit()
result = reg.getUtility(IAuthenticationPolicy)
import pyramid.tests
self.assertEqual(result, pyramid.tests)
@@ -484,6 +487,7 @@ class ConfiguratorTests(unittest.TestCase):
dummy = object()
config.setup_registry(authentication_policy=dummy,
authorization_policy='pyramid.tests')
+ config.commit()
result = reg.getUtility(IAuthorizationPolicy)
import pyramid.tests
self.assertEqual(result, pyramid.tests)
@@ -607,6 +611,7 @@ class ConfiguratorTests(unittest.TestCase):
reg = Registry()
config = self._makeOne(reg)
config.setup_registry(renderers=[('yeah', renderer)])
+ config.commit()
self.assertEqual(reg.getUtility(IRendererFactory, 'yeah'),
renderer)
@@ -616,6 +621,7 @@ class ConfiguratorTests(unittest.TestCase):
reg = Registry()
config = self._makeOne(reg)
config.setup_registry(default_permission='view')
+ config.commit()
self.assertEqual(reg.getUtility(IDefaultPermission), 'view')
def test_setup_registry_includes(self):
@@ -2554,6 +2560,7 @@ pyramid.tests.test_config.dummy_include2""",
def __call__(self, *arg, **kw):
return 'moo'
config.add_renderer(None, moo)
+ config.commit()
def view(request):
return 'OK'
result = config.derive_view(view)
@@ -2572,6 +2579,7 @@ pyramid.tests.test_config.dummy_include2""",
config = self._makeOne()
config.add_renderer(None, moo)
config.add_renderer('foo', foo)
+ config.commit()
result = config.derive_view(view, renderer='foo')
self.assertFalse(result is view)
request = self._makeRequest(config)
diff --git a/pyramid/tests/test_config/test_security.py b/pyramid/tests/test_config/test_security.py
index 8c063ccd0..64ba895c6 100644
--- a/pyramid/tests/test_config/test_security.py
+++ b/pyramid/tests/test_config/test_security.py
@@ -14,12 +14,11 @@ class ConfiguratorSecurityMethodsTests(unittest.TestCase):
self.assertRaises(ConfigurationExecutionError, config.commit)
def test_set_authentication_policy_no_authz_policy_autocommit(self):
- from pyramid.interfaces import IAuthenticationPolicy
+ from pyramid.exceptions import ConfigurationError
config = self._makeOne(autocommit=True)
policy = object()
- config.set_authentication_policy(policy)
- self.assertEqual(
- config.registry.getUtility(IAuthenticationPolicy), policy)
+ self.assertRaises(ConfigurationError,
+ config.set_authentication_policy, policy)
def test_set_authentication_policy_with_authz_policy(self):
from pyramid.interfaces import IAuthenticationPolicy
@@ -53,11 +52,12 @@ class ConfiguratorSecurityMethodsTests(unittest.TestCase):
self.assertRaises(ConfigurationExecutionError, config.commit)
def test_set_authorization_policy_no_authn_policy_autocommit(self):
- from pyramid.exceptions import ConfigurationError
+ from pyramid.interfaces import IAuthorizationPolicy
config = self._makeOne(autocommit=True)
policy = object()
- self.assertRaises(ConfigurationError,
- config.set_authorization_policy, policy)
+ config.set_authorization_policy(policy)
+ self.assertEqual(
+ config.registry.getUtility(IAuthorizationPolicy), policy)
def test_set_authorization_policy_with_authn_policy(self):
from pyramid.interfaces import IAuthorizationPolicy
@@ -67,6 +67,7 @@ class ConfiguratorSecurityMethodsTests(unittest.TestCase):
authz_policy = object()
config.registry.registerUtility(authn_policy, IAuthenticationPolicy)
config.set_authorization_policy(authz_policy)
+ config.commit()
self.assertEqual(
config.registry.getUtility(IAuthorizationPolicy), authz_policy)