CHANGES.txt | ●●●●● patch | view | raw | blame | history | |
docs/api/config.rst | ●●●●● patch | view | raw | blame | history | |
pyramid/config/__init__.py | ●●●●● patch | view | raw | blame | history | |
pyramid/config/adapters.py | ●●●●● patch | view | raw | blame | history | |
pyramid/config/factories.py | ●●●●● patch | view | raw | blame | history | |
pyramid/tests/test_config/test_init.py | ●●●●● patch | view | raw | blame | history |
CHANGES.txt
@@ -64,6 +64,14 @@ ``set_authentication_policy`` and ``set_authorization_policy``. These are meant to be consumed mostly by add-on authors. - New Configurator method: ``set_root_factory``. - Pyramid no longer eagerly commits some default configuration statements at Configurator construction time, which permits values passed in as constructor arguments (e.g. ``authentication_policy`` and ``authorization_policy``) to override the same settings obtained via an "include". Internal -------- docs/api/config.rst
@@ -54,6 +54,8 @@ .. automethod:: add_view .. automethod:: add_tween .. automethod:: derive_view .. automethod:: make_wsgi_app() @@ -74,6 +76,8 @@ .. automethod:: set_request_factory .. automethod:: set_root_factory .. automethod:: set_renderer_globals_factory(factory) .. automethod:: set_view_mapper @@ -81,8 +85,6 @@ .. automethod:: set_authentication_policy .. automethod:: set_authorization_policy .. automethod:: add_tween .. automethod:: testing_securitypolicy pyramid/config/__init__.py
@@ -6,6 +6,9 @@ import venusian from webob.exc import WSGIHTTPException as WebobWSGIHTTPException from zope.configuration.config import GroupingContextDecorator from zope.configuration.config import ConfigurationMachine from zope.configuration.xmlconfig import registerCommonDirectives @@ -277,13 +280,10 @@ other settings using the configurator's current registry, as per the descriptions in the Configurator constructor.""" from webob.exc import WSGIHTTPException as WebobWSGIHTTPException registry = self.registry self._fix_registry() self._set_settings(settings) self._set_root_factory(root_factory) self._register_response_adapters() if isinstance(debug_logger, basestring): @@ -294,20 +294,39 @@ registry.registerUtility(debug_logger, IDebugLogger) if authentication_policy or authorization_policy: self._set_security_policies(authentication_policy, authorization_policy) for name, renderer in renderers: self.add_renderer(name, renderer) if exceptionresponse_view is not None: exceptionresponse_view = self.maybe_dotted(exceptionresponse_view) self.add_view(exceptionresponse_view, context=IExceptionResponse) self.add_view(exceptionresponse_view,context=WebobWSGIHTTPException) # commit before adding default_view_mapper, as the # exceptionresponse_view above requires the superdefault view # mapper self.commit() if default_view_mapper is not None: self.set_view_mapper(default_view_mapper) self.commit() # The following registrations should be treated as if the methods had # been called after configurator construction (commit should not be # called after this). Rationale: user-supplied implementations # should be preferred rather than add-on author implementations (as # per automatic conflict resolution). if authentication_policy: self.set_authentication_policy(authentication_policy) if authorization_policy: self.set_authorization_policy(authorization_policy) self.set_root_factory(root_factory) for name, renderer in renderers: self.add_renderer(name, renderer) if locale_negotiator: self._set_locale_negotiator(locale_negotiator) self.set_locale_negotiator(locale_negotiator) if request_factory: self.set_request_factory(request_factory) @@ -329,24 +348,14 @@ if session_factory is not None: self.set_session_factory(session_factory) self.commit() # commit before adding default_view_mapper, as the # exceptionresponse_view above requires the superdefault view # mapper if default_view_mapper is not None: self.set_view_mapper(default_view_mapper) self.commit() includes = aslist(registry.settings.get('pyramid.includes', [])) for inc in includes: self.include(inc) tweens = aslist(registry.settings.get('pyramid.tweens', [])) for factory in tweens: self._add_tween(factory, explicit=True) includes = aslist(registry.settings.get('pyramid.includes', [])) for inc in includes: self.include(inc) def _make_spec(self, path_or_spec): package, filename = resolve_asset_spec(path_or_spec, self.package_name) pyramid/config/adapters.py
@@ -57,5 +57,4 @@ def _register_response_adapters(self): # cope with WebOb response objects that aren't decorated with IResponse from webob import Response as WebobResponse # cope with WebOb exc objects not decoratored with IExceptionResponse self.registry.registerSelfAdapter((WebobResponse,), IResponse) pyramid/config/factories.py
@@ -9,7 +9,7 @@ class FactoriesConfiguratorMixin(object): @action_method def _set_root_factory(self, factory): def set_root_factory(self, factory): """ Add a :term:`root factory` to the current configuration state. If the ``factory`` argument is ``None`` a default root factory will be registered.""" @@ -21,6 +21,8 @@ self.registry.registerUtility(factory, IDefaultRootFactory) # b/c self.action(IRootFactory, register) _set_root_factory = set_root_factory # bw compat @action_method def set_session_factory(self, session_factory): """ pyramid/tests/test_config/test_init.py
@@ -189,14 +189,16 @@ self.assertEqual(policy, result) def test_ctor_authorization_policy_only(self): from pyramid.exceptions import ConfigurationError from zope.configuration.config import ConfigurationExecutionError policy = object() self.assertRaises(ConfigurationError, self._makeOne, authorization_policy=policy) config = self._makeOne(authorization_policy=policy) self.assertRaises(ConfigurationExecutionError, config.commit) def test_ctor_no_root_factory(self): from pyramid.interfaces import IRootFactory config = self._makeOne() self.assertEqual(config.registry.queryUtility(IRootFactory), None) config.commit() self.assertTrue(config.registry.getUtility(IRootFactory)) def test_ctor_alternate_renderers(self): @@ -214,6 +216,8 @@ def test_ctor_session_factory(self): from pyramid.interfaces import ISessionFactory config = self._makeOne(session_factory='factory') self.assertEqual(config.registry.queryUtility(ISessionFactory), None) config.commit() self.assertEqual(config.registry.getUtility(ISessionFactory), 'factory') def test_ctor_default_view_mapper(self): @@ -477,14 +481,13 @@ self.assertEqual(result, pyramid.tests) def test_setup_registry_authorization_policy_only(self): from zope.configuration.config import ConfigurationExecutionError from pyramid.registry import Registry from pyramid.exceptions import ConfigurationError policy = object() reg = Registry() config = self._makeOne(reg) config = self.assertRaises(ConfigurationError, config.setup_registry, authorization_policy=policy) config.setup_registry(authorization_policy=policy) config = self.assertRaises(ConfigurationExecutionError, config.commit) def test_setup_registry_default_root_factory(self): from pyramid.registry import Registry @@ -492,6 +495,8 @@ reg = Registry() config = self._makeOne(reg) config.setup_registry() self.assertEqual(reg.queryUtility(IRootFactory), None) config.commit() self.assertTrue(reg.getUtility(IRootFactory)) def test_setup_registry_dottedname_root_factory(self): @@ -501,6 +506,8 @@ config = self._makeOne(reg) import pyramid.tests config.setup_registry(root_factory='pyramid.tests') self.assertEqual(reg.queryUtility(IRootFactory), None) config.commit() self.assertEqual(reg.getUtility(IRootFactory), pyramid.tests) def test_setup_registry_locale_negotiator_dottedname(self): @@ -510,6 +517,8 @@ config = self._makeOne(reg) import pyramid.tests config.setup_registry(locale_negotiator='pyramid.tests') self.assertEqual(reg.queryUtility(ILocaleNegotiator), None) config.commit() utility = reg.getUtility(ILocaleNegotiator) self.assertEqual(utility, pyramid.tests) @@ -520,6 +529,8 @@ config = self._makeOne(reg) negotiator = object() config.setup_registry(locale_negotiator=negotiator) self.assertEqual(reg.queryUtility(ILocaleNegotiator), None) config.commit() utility = reg.getUtility(ILocaleNegotiator) self.assertEqual(utility, negotiator) @@ -530,6 +541,8 @@ config = self._makeOne(reg) factory = object() config.setup_registry(request_factory=factory) self.assertEqual(reg.queryUtility(IRequestFactory), None) config.commit() utility = reg.getUtility(IRequestFactory) self.assertEqual(utility, factory) @@ -540,6 +553,8 @@ config = self._makeOne(reg) import pyramid.tests config.setup_registry(request_factory='pyramid.tests') self.assertEqual(reg.queryUtility(IRequestFactory), None) config.commit() utility = reg.getUtility(IRequestFactory) self.assertEqual(utility, pyramid.tests) @@ -553,6 +568,8 @@ config = self._makeOne(reg) factory = object() config.setup_registry(renderer_globals_factory=factory) self.assertEqual(reg.queryUtility(IRendererGlobalsFactory), None) config.commit() utility = reg.getUtility(IRendererGlobalsFactory) self.assertEqual(utility, factory) finally: @@ -568,6 +585,8 @@ config = self._makeOne(reg) import pyramid.tests config.setup_registry(renderer_globals_factory='pyramid.tests') self.assertEqual(reg.queryUtility(IRendererGlobalsFactory), None) config.commit() utility = reg.getUtility(IRendererGlobalsFactory) self.assertEqual(utility, pyramid.tests) finally: @@ -3845,10 +3864,8 @@ self.assert_(hasattr(config, 'dummy_extend')) config.dummy_extend('discrim') context_after = config._ctx actions = context_after.actions self.assertEqual(len(actions), 1) self.assertEqual( context_after.actions[0][:3], context_after.actions[-1][:3], ('discrim', None, test_config), ) @@ -3860,10 +3877,8 @@ self.assert_(hasattr(config, 'dummy_extend')) config.dummy_extend('discrim') context_after = config._ctx actions = context_after.actions self.assertEqual(len(actions), 1) self.assertEqual( context_after.actions[0][:3], context_after.actions[-1][:3], ('discrim', None, test_config), ) @@ -3876,10 +3891,8 @@ self.assert_(hasattr(config, 'dummy_extend')) config.dummy_extend('discrim') context_after = config._ctx actions = context_after.actions self.assertEqual(len(actions), 1) self.assertEqual( context_after.actions[0][:3], context_after.actions[-1][:3], ('discrim', None, config.registry), )