From c0d4a18a2e408af56b6d5611cca694ad944f1dfc Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 2 Dec 2010 22:03:10 -0500 Subject: make most tests pass (all but default permission bug integration test) --- pyramid/configuration.py | 66 +++----- pyramid/registry.py | 1 - pyramid/testing.py | 27 +++- pyramid/tests/test_configuration.py | 161 ++++++++++++++++++- pyramid/tests/test_integration.py | 2 + pyramid/tests/test_testing.py | 6 +- pyramid/tests/test_zcml.py | 311 ++++++++++++++++++++---------------- pyramid/zcml.py | 29 ++-- 8 files changed, 396 insertions(+), 207 deletions(-) diff --git a/pyramid/configuration.py b/pyramid/configuration.py index 5122b5964..bdf2e562c 100644 --- a/pyramid/configuration.py +++ b/pyramid/configuration.py @@ -9,7 +9,6 @@ import venusian from translationstring import ChameleonTranslate from zope.configuration import xmlconfig -from zope.configuration.config import ConfigurationMachine from zope.interface import Interface from zope.interface import implementedBy @@ -235,7 +234,6 @@ class Configurator(object): renderer_globals_factory=None, default_permission=None, session_factory=None, - autocommit = True, ): if package is None: package = caller_package() @@ -259,7 +257,6 @@ class Configurator(object): renderer_globals_factory=renderer_globals_factory, default_permission=default_permission, session_factory=session_factory, - autocommit=autocommit, ) def _set_settings(self, mapping): @@ -267,7 +264,7 @@ class Configurator(object): self.registry.settings = settings return settings - @config_method + #@config_method 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 @@ -280,7 +277,7 @@ class Configurator(object): self.registry.registerUtility(factory, IDefaultRootFactory) # b/c self.action(IRootFactory, register) - @config_method + #@config_method def _set_authentication_policy(self, policy): """ Add a :app:`Pyramid` :term:`authentication policy` to the current configuration.""" @@ -290,7 +287,7 @@ class Configurator(object): info=_info) self.action(IAuthenticationPolicy, None) - @config_method + #@config_method def _set_authorization_policy(self, policy): """ Add a :app:`Pyramid` :term:`authorization policy` to the current configuration state (also accepts a :term:`dotted @@ -419,8 +416,7 @@ class Configurator(object): locale_negotiator=None, request_factory=None, renderer_globals_factory=None, default_permission=None, - session_factory=None, - autocommit=True): + session_factory=None): """ When you pass a non-``None`` ``registry`` argument to the :term:`Configurator` constructor, no initial 'setup' is performed against the registry. This is because the registry @@ -440,7 +436,6 @@ class Configurator(object): configurator's current registry, as per the descriptions in the Configurator constructor.""" registry = self.registry - registry.autocommit = autocommit self._fix_registry() self._set_settings(settings) self._set_root_factory(root_factory) @@ -469,6 +464,7 @@ class Configurator(object): self.set_default_permission(default_permission) if session_factory is not None: self.set_session_factory(session_factory) + self.commit() # getSiteManager is a unit testing dep injection def hook_zca(self, getSiteManager=None): @@ -600,7 +596,7 @@ class Configurator(object): def ctx_info(self): return getattr(self.registry.ctx, 'info', '') - @config_method + #@config_method def add_subscriber(self, subscriber, iface=None): """Add an event :term:`subscriber` for the event stream implied by the supplied ``iface`` interface. The @@ -675,6 +671,7 @@ class Configurator(object): the current configuration state and sends a :class:`pyramid.events.ApplicationCreated` event to all listeners.""" + self.commit() from pyramid.router import Router # avoid circdep app = Router(self.registry) # We push the registry on to the stack here in case any code @@ -704,15 +701,12 @@ class Configurator(object): registry = self.registry self.manager.push({'registry':registry, 'request':None}) context = registry.ctx - autocommit = registry.autocommit try: - registry.autocommit = False context.package = package xmlconfig.file(filename, package, context=context, execute=True) finally: lock.release() self.manager.pop() - registry.autocommit = autocommit return registry def add_handler(self, route_name, pattern, handler, action=None, **kw): @@ -828,7 +822,7 @@ class Configurator(object): return route - @config_method + #@config_method def add_view(self, view=None, name="", for_=None, permission=None, request_type=None, route_name=None, request_method=None, request_param=None, containment=None, attr=None, @@ -1258,7 +1252,7 @@ class Configurator(object): discriminator = tuple(discriminator) self.action(discriminator, register) - @config_method + #@config_method def add_route(self, name, pattern=None, @@ -1652,15 +1646,9 @@ class Configurator(object): package = caller_package() scanner = self.venusian.Scanner(config=self) - autocommit = self.registry.autocommit - try: - self.registry.autocommit = False - scanner.scan(package, categories=categories) - finally: - self.registry.autocommit = autocommit - self.commit() + scanner.scan(package, categories=categories) - @config_method + #@config_method def add_renderer(self, name, factory): """ Add a :app:`Pyramid` :term:`renderer` factory to the @@ -1689,11 +1677,10 @@ class Configurator(object): name = '' self.registry.registerUtility( factory, IRendererFactory, name=name, info=self.ctx_info()) - self.action(('renderer', name), None) + self.action((IRendererFactory, name), None) - @config_method - def override_resource(self, to_override, override_with, - _override=None,): + #@config_method + def override_resource(self, to_override, override_with, _override=None): """ Add a :app:`Pyramid` resource override to the current configuration state. @@ -1731,14 +1718,13 @@ class Configurator(object): 'A file cannot be overridden with a directory (put a ' 'slash at the end of to_override if necessary)') - __import__(package) - __import__(override_package) - package = sys.modules[package] - override_package = sys.modules[override_package] - override = _override or self._override # test jig def register(): - override(package, path, override_package, override_prefix) + __import__(package) + __import__(override_package) + from_package = sys.modules[package] + to_package = sys.modules[override_package] + override(from_package, path, to_package, override_prefix) self.action(None, register) def set_forbidden_view(self, view=None, attr=None, renderer=None, @@ -1815,7 +1801,7 @@ class Configurator(object): return view(context, request) return self.add_view(bwcompat_view, context=NotFound, wrapper=wrapper) - @config_method + #@config_method def set_request_factory(self, factory): """ The object passed as ``factory`` should be an object (or a :term:`dotted Python name` which refers to an object) which @@ -1834,7 +1820,7 @@ class Configurator(object): self.registry.registerUtility(factory, IRequestFactory) self.action(IRequestFactory, register) - @config_method + #@config_method def set_renderer_globals_factory(self, factory): """ The object passed as ``factory`` should be an callable (or a :term:`dotted Python name` which refers to an callable) that @@ -1858,7 +1844,7 @@ class Configurator(object): self.registry.registerUtility(factory, IRendererGlobalsFactory) self.action(IRendererGlobalsFactory, register) - @config_method + #@config_method def set_locale_negotiator(self, negotiator): """ Set the :term:`locale negotiator` for this application. The @@ -1882,7 +1868,7 @@ class Configurator(object): self.registry.registerUtility(negotiator, ILocaleNegotiator) self.action(ILocaleNegotiator, register) - @config_method + #@config_method def set_default_permission(self, permission): """ Set the default permission to be used by all subsequent @@ -1913,7 +1899,7 @@ class Configurator(object): self.registry.registerUtility(permission, IDefaultPermission) self.action(IDefaultPermission, None) - @config_method + #@config_method def set_session_factory(self, session_factory): """ Configure the application with a :term:`session factory`. If @@ -1924,7 +1910,7 @@ class Configurator(object): self.registry.registerUtility(session_factory, ISessionFactory) self.action(ISessionFactory, register) - @config_method + #@config_method def add_translation_dirs(self, *specs): """ Add one or more :term:`translation directory` paths to the current configuration state. The ``specs`` argument is a @@ -1959,7 +1945,7 @@ class Configurator(object): self.registry.registerUtility(tdirs, ITranslationDirectories) tdirs.insert(0, directory) - self.action(('tdir', directory), None) + # XXX no action? if specs: diff --git a/pyramid/registry.py b/pyramid/registry.py index bad7eb603..062befc2e 100644 --- a/pyramid/registry.py +++ b/pyramid/registry.py @@ -25,7 +25,6 @@ class Registry(Components, dict): # to notify them has_listeners = False _settings = None - autocommit = False _ctx = None def registerSubscriptionAdapter(self, *arg, **kw): diff --git a/pyramid/testing.py b/pyramid/testing.py index cc0ee5c5b..8f4d777db 100644 --- a/pyramid/testing.py +++ b/pyramid/testing.py @@ -57,8 +57,10 @@ def registerDummySecurityPolicy(userid=None, groupids=(), permissive=True): """ registry = get_current_registry() config = Configurator(registry=registry) - return config.testing_securitypolicy(userid=userid, groupids=groupids, - permissive=permissive) + result = config.testing_securitypolicy(userid=userid, groupids=groupids, + permissive=permissive) + config.commit() + return result def registerModels(models): """ Registers a dictionary of :term:`model` objects that can be @@ -79,7 +81,9 @@ def registerModels(models): """ registry = get_current_registry() config = Configurator(registry=registry) - return config.testing_models(models) + result = config.testing_models(models) + config.commit() + return result def registerEventListener(event_iface=None): """ Registers an :term:`event` listener (aka :term:`subscriber`) @@ -105,7 +109,9 @@ def registerEventListener(event_iface=None): """ registry = get_current_registry() config = Configurator(registry=registry) - return config.testing_add_subscriber(event_iface) + result = config.testing_add_subscriber(event_iface) + config.commit() + return result def registerTemplateRenderer(path, renderer=None): """ Register a template renderer at ``path`` (usually a relative @@ -125,7 +131,9 @@ def registerTemplateRenderer(path, renderer=None): """ registry = get_current_registry() config = Configurator(registry=registry) - return config.testing_add_template(path, renderer) + result = config.testing_add_template(path, renderer) + config.commit() + return result # registerDummyRenderer is a deprecated alias that should never be removed # (too much usage in the wild) @@ -249,7 +257,9 @@ def registerSubscriber(subscriber, iface=Interface): """ registry = get_current_registry() config = Configurator(registry) - return config.add_subscriber(subscriber, iface=iface) + result = config.add_subscriber(subscriber, iface=iface) + config.commit() + return result def registerRoute(pattern, name, factory=None): """ Register a new :term:`route` using a pattern @@ -270,7 +280,9 @@ def registerRoute(pattern, name, factory=None): """ reg = get_current_registry() config = Configurator(registry=reg) - return config.add_route(name, pattern, factory=factory) + result = config.add_route(name, pattern, factory=factory) + config.commit() + return result def registerSettings(dictarg=None, **kw): """Register one or more 'setting' key/value pairs. A setting is @@ -637,6 +649,7 @@ def setUp(registry=None, request=None, hook_zca=True): # ``render_template`` and friends went behind the back of # any existing renderer factory lookup system. config.add_renderer(name, renderer) + config.commit() hook_zca and config.hook_zca() config.begin(request=request) return config diff --git a/pyramid/tests/test_configuration.py b/pyramid/tests/test_configuration.py index 3fce18591..9d6d98b0e 100644 --- a/pyramid/tests/test_configuration.py +++ b/pyramid/tests/test_configuration.py @@ -294,6 +294,7 @@ class ConfiguratorTests(unittest.TestCase): def myview(context, request): return 'OK' config.add_view(myview, context=NotFound) + config.commit() request = self._makeRequest(config) view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), request_iface=IRequest) @@ -522,6 +523,7 @@ class ConfiguratorTests(unittest.TestCase): L.append(event) config = self._makeOne() config.add_subscriber(subscriber) + config.commit() event = Event() config.registry.notify(event) self.assertEqual(len(L), 1) @@ -541,6 +543,7 @@ class ConfiguratorTests(unittest.TestCase): L.append(event) config = self._makeOne() config.add_subscriber(subscriber, IEvent) + config.commit() event = Event() config.registry.notify(event) self.assertEqual(len(L), 1) @@ -554,6 +557,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_subscriber('pyramid.tests', 'pyramid.interfaces.INewRequest') + config.commit() handlers = list(config.registry.registeredHandlers()) self.assertEqual(len(handlers), 1) handler = handlers[0] @@ -574,6 +578,7 @@ class ConfiguratorTests(unittest.TestCase): L.append(event) config = self._makeOne() config.add_subscriber(subscriber, (Interface, IEvent)) + config.commit() config.registry.subscribers((event.object, event), None) self.assertEqual(len(L), 1) self.assertEqual(L[0], event) @@ -599,6 +604,7 @@ class ConfiguratorTests(unittest.TestCase): import pyramid.tests.fixtureapp config = self._makeOne(package=pyramid.tests.fixtureapp) registry = config.load_zcml() + config.commit() from pyramid.tests.fixtureapp.models import IFixture self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml @@ -606,18 +612,21 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.interfaces import IRoutesMapper config = self._makeOne() config.load_zcml('pyramid.tests.routesapp:configure.zcml') + config.commit() self.failUnless(config.registry.getUtility(IRoutesMapper)) def test_load_zcml_fixtureapp(self): from pyramid.tests.fixtureapp.models import IFixture config = self._makeOne() config.load_zcml('pyramid.tests.fixtureapp:configure.zcml') + config.commit() self.failUnless(config.registry.queryUtility(IFixture)) # only in c.zcml def test_load_zcml_as_relative_filename(self): import pyramid.tests.fixtureapp config = self._makeOne(package=pyramid.tests.fixtureapp) registry = config.load_zcml('configure.zcml') + config.commit() from pyramid.tests.fixtureapp.models import IFixture self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml @@ -628,6 +637,7 @@ class ConfiguratorTests(unittest.TestCase): dn = os.path.dirname(pyramid.tests.fixtureapp.__file__) c_z = os.path.join(dn, 'configure.zcml') registry = config.load_zcml(c_z) + config.commit() from pyramid.tests.fixtureapp.models import IFixture self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml @@ -637,6 +647,7 @@ class ConfiguratorTests(unittest.TestCase): config.load_zcml( 'pyramid.tests.fixtureapp:configure.zcml', lock=dummylock) + config.commit() self.assertEqual(dummylock.acquired, True) self.assertEqual(dummylock.released, True) @@ -659,6 +670,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_view(view=view, request_type='pyramid.interfaces.IRequest') + config.commit() wrapper = self._getViewCallable(config) request = DummyRequest() self._assertNotFound(wrapper, None, request) @@ -670,6 +682,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() self._registerRenderer(config, name='dummy') config.add_view(renderer='dummy') + config.commit() view = self._getViewCallable(config) self.failUnless('Hello!' in view(None, None).body) @@ -678,6 +691,7 @@ class ConfiguratorTests(unittest.TestCase): """ """ config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) self.assertEqual(wrapper.__module__, view.__module__) self.assertEqual(wrapper.__name__, view.__name__) @@ -686,6 +700,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_view_view_callable_dottedname(self): config = self._makeOne() config.add_view(view='pyramid.tests.test_configuration.dummy_view') + config.commit() wrapper = self._getViewCallable(config) self.assertEqual(wrapper(None, None), 'OK') @@ -693,6 +708,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -702,6 +718,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK' config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -714,6 +731,7 @@ class ConfiguratorTests(unittest.TestCase): view = AView() config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -726,6 +744,7 @@ class ConfiguratorTests(unittest.TestCase): view = AView() config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -740,6 +759,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK' config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -753,6 +773,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK' config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) result = wrapper(None, None) self.assertEqual(result, 'OK') @@ -764,6 +785,7 @@ class ConfiguratorTests(unittest.TestCase): pass config = self._makeOne() config.add_view(context=Foo, view=view) + config.commit() foo = implementedBy(Foo) wrapper = self._getViewCallable(config, foo) self.assertEqual(wrapper, view) @@ -772,6 +794,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(context=IDummy, view=view) + config.commit() wrapper = self._getViewCallable(config, IDummy) self.assertEqual(wrapper, view) @@ -780,6 +803,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_view(context='pyramid.tests.test_configuration.IDummy', view=view) + config.commit() wrapper = self._getViewCallable(config, IDummy) self.assertEqual(wrapper, view) @@ -788,6 +812,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_view(for_='pyramid.tests.test_configuration.IDummy', view=view) + config.commit() wrapper = self._getViewCallable(config, IDummy) self.assertEqual(wrapper, view) @@ -799,6 +824,7 @@ class ConfiguratorTests(unittest.TestCase): pass config = self._makeOne() config.add_view(for_=Foo, view=view) + config.commit() foo = implementedBy(Foo) wrapper = self._getViewCallable(config, foo) self.assertEqual(wrapper, view) @@ -808,6 +834,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(for_=IDummy, view=view) + config.commit() wrapper = self._getViewCallable(config, IDummy) self.assertEqual(wrapper, view) @@ -818,6 +845,7 @@ class ConfiguratorTests(unittest.TestCase): class Foo: pass config.add_view(context=IDummy, for_=Foo, view=view) + config.commit() wrapper = self._getViewCallable(config, IDummy) self.assertEqual(wrapper, view) @@ -830,6 +858,7 @@ class ConfiguratorTests(unittest.TestCase): view.__call_permissive__ = view config = self._makeOne() config.add_view(view=view) + config.commit() wrapper = config.registry.adapters.lookup( (IViewClassifier, IRequest, Interface), ISecuredView, name='', default=None) @@ -844,6 +873,7 @@ class ConfiguratorTests(unittest.TestCase): view.__call_permissive__ = view config = self._makeOne() config.add_view(view=view, context=RuntimeError) + config.commit() wrapper = config.registry.adapters.lookup( (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), IView, name='', default=None) @@ -866,6 +896,7 @@ class ConfiguratorTests(unittest.TestCase): def newview(context, request): return 'OK' config.add_view(view=newview, xhr=True) + config.commit() wrapper = self._getViewCallable(config) self.failIf(IMultiView.providedBy(wrapper)) request = DummyRequest() @@ -892,6 +923,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK' config.add_view(view=newview, xhr=True, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failIf(IMultiView.providedBy(wrapper)) @@ -912,6 +944,7 @@ class ConfiguratorTests(unittest.TestCase): def newview(context, request): return 'OK' config.add_view(view=newview) + config.commit() wrapper = self._getViewCallable(config) self.failIf(IMultiView.providedBy(wrapper)) request = DummyRequest() @@ -933,6 +966,7 @@ class ConfiguratorTests(unittest.TestCase): def newview(context, request): return 'OK' config.add_view(view=newview, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failIf(IMultiView.providedBy(wrapper)) @@ -955,6 +989,7 @@ class ConfiguratorTests(unittest.TestCase): def newview(context, request): return 'OK' config.add_view(view=newview) + config.commit() wrapper = self._getViewCallable(config) self.failIf(IMultiView.providedBy(wrapper)) request = DummyRequest() @@ -978,6 +1013,7 @@ class ConfiguratorTests(unittest.TestCase): def newview(context, request): return 'OK' config.add_view(view=newview, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failIf(IMultiView.providedBy(wrapper)) @@ -997,6 +1033,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerAdapter( view, (IViewClassifier, IRequest, Interface), IView, name='') config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) self.assertEqual(wrapper(None, None), 'OK') @@ -1020,6 +1057,7 @@ class ConfiguratorTests(unittest.TestCase): (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), IView, name='') config.add_view(view=view, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failUnless(IMultiView.providedBy(wrapper)) @@ -1038,6 +1076,7 @@ class ConfiguratorTests(unittest.TestCase): view, (IViewClassifier, IRequest, Interface), ISecuredView, name='') config.add_view(view=view) + config.commit() wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) self.assertEqual(wrapper(None, None), 'OK') @@ -1061,6 +1100,7 @@ class ConfiguratorTests(unittest.TestCase): (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), ISecuredView, name='') config.add_view(view=view, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failUnless(IMultiView.providedBy(wrapper)) @@ -1080,6 +1120,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerAdapter( view, (IViewClassifier, IRequest, Interface), IView, name='') config.add_view(view=view2, accept='text/html') + config.commit() wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) self.assertEqual(len(wrapper.views), 1) @@ -1110,6 +1151,7 @@ class ConfiguratorTests(unittest.TestCase): (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), IView, name='') config.add_view(view=view2, accept='text/html', context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failUnless(IMultiView.providedBy(wrapper)) @@ -1136,6 +1178,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerAdapter( view, (IViewClassifier, IRequest, Interface), IView, name='') config.add_view(view=view2) + config.commit() wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) self.assertEqual(len(wrapper.views), 1) @@ -1168,6 +1211,7 @@ class ConfiguratorTests(unittest.TestCase): (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), IView, name='') config.add_view(view=view2, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failUnless(IMultiView.providedBy(wrapper)) @@ -1190,6 +1234,7 @@ class ConfiguratorTests(unittest.TestCase): IMultiView, name='') view2 = lambda *arg: 'OK2' config.add_view(view=view2) + config.commit() wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) self.assertEqual([x[:2] for x in wrapper.views], [(view2, None)]) @@ -1213,6 +1258,7 @@ class ConfiguratorTests(unittest.TestCase): IMultiView, name='') view2 = lambda *arg: 'OK2' config.add_view(view=view2, context=RuntimeError) + config.commit() wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), exception_view=True) self.failUnless(IMultiView.providedBy(wrapper)) @@ -1235,6 +1281,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerAdapter( view, (IViewClassifier, IRequest, ISuper), IView, name='') config.add_view(view=view2, for_=ISub) + config.commit() wrapper = self._getViewCallable(config, ISuper, IRequest) self.failIf(IMultiView.providedBy(wrapper)) self.assertEqual(wrapper(None, None), 'OK') @@ -1261,6 +1308,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerAdapter( view, (IExceptionViewClassifier, IRequest, Super), IView, name='') config.add_view(view=view2, for_=Sub) + config.commit() wrapper = self._getViewCallable( config, implementedBy(Super), IRequest) wrapper_exc_view = self._getViewCallable( @@ -1297,6 +1345,8 @@ class ConfiguratorTests(unittest.TestCase): config.add_view(view=view8, request_method='POST',request_param='param', containment=IDummy) + config.commit() + wrapper = self._getViewCallable(config) ctx = DummyContext() @@ -1365,6 +1415,7 @@ class ConfiguratorTests(unittest.TestCase): renderer = self._registerRenderer(config) fixture = 'pyramid.tests:fixtures/minimal.txt' config.add_view(view=view, renderer=fixture) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) result = wrapper(None, request) @@ -1384,6 +1435,7 @@ class ConfiguratorTests(unittest.TestCase): renderer = self._registerRenderer(config) fixture = 'pyramid.tests:fixtures/minimal.txt' config.add_view(view=None, renderer=fixture) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) result = wrapper(None, request) @@ -1402,6 +1454,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK' config = self._makeOne() config.add_view(request_type=IDummy, view=view) + config.commit() wrapper = self._getViewCallable(config, None) request = self._makeRequest(config) directlyProvides(request, IDummy) @@ -1420,6 +1473,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, route_name='foo') + config.commit() self.assertEqual(len(config.registry.deferred_route_views), 1) infos = config.registry.deferred_route_views['foo'] self.assertEqual(len(infos), 1) @@ -1431,6 +1485,7 @@ class ConfiguratorTests(unittest.TestCase): wrapper = self._getViewCallable(config, None) self.assertEqual(wrapper, None) config.add_route('foo', '/a/b') + config.commit() request_iface = self._getRouteRequestIface(config, 'foo') self.failIfEqual(request_iface, None) wrapper = self._getViewCallable(config, request_iface=request_iface) @@ -1441,6 +1496,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, route_name='foo', custom_predicates=('123',)) + config.commit() self.assertEqual(len(config.registry.deferred_route_views), 1) infos = config.registry.deferred_route_views['foo'] self.assertEqual(len(infos), 1) @@ -1454,6 +1510,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, route_name='foo', context=RuntimeError) + config.commit() self.assertEqual(len(config.registry.deferred_route_views), 1) infos = config.registry.deferred_route_views['foo'] self.assertEqual(len(infos), 1) @@ -1467,6 +1524,7 @@ class ConfiguratorTests(unittest.TestCase): exception_view=True) self.assertEqual(wrapper_exc_view, None) config.add_route('foo', '/a/b') + config.commit() request_iface = self._getRouteRequestIface(config, 'foo') self.failIfEqual(request_iface, None) wrapper_exc_view = self._getViewCallable( @@ -1483,6 +1541,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_method='POST') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.method = 'POST' @@ -1492,6 +1551,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_method='POST') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.method = 'GET' @@ -1501,6 +1561,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_param='abc') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.params = {'abc':''} @@ -1510,6 +1571,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_param='abc') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.params = {} @@ -1519,6 +1581,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_param='abc=123') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.params = {'abc':'123'} @@ -1528,6 +1591,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, request_param='abc=123') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.params = {'abc':''} @@ -1537,6 +1601,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, xhr=True) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.is_xhr = True @@ -1546,6 +1611,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, xhr=True) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.is_xhr = False @@ -1562,6 +1628,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, header='Host') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.headers = {'Host':'whatever'} @@ -1571,6 +1638,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, header='Host') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.headers = {'NotHost':'whatever'} @@ -1580,6 +1648,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, header=r'Host:\d') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.headers = {'Host':'1'} @@ -1589,6 +1658,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, header=r'Host:\d') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.headers = {'Host':'abc'} @@ -1599,6 +1669,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, header=r'Host:\d') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.headers = {'NoHost':'1'} @@ -1608,6 +1679,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, accept='text/xml') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.accept = ['text/xml'] @@ -1617,6 +1689,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, accept='text/xml') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.accept = ['text/html'] @@ -1627,6 +1700,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, containment=IDummy) + config.commit() wrapper = self._getViewCallable(config) context = DummyContext() directlyProvides(context, IDummy) @@ -1636,6 +1710,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, containment=IDummy) + config.commit() wrapper = self._getViewCallable(config) context = DummyContext() self._assertNotFound(wrapper, context, None) @@ -1647,6 +1722,7 @@ class ConfiguratorTests(unittest.TestCase): config.add_view( view=view, containment='pyramid.tests.test_configuration.IDummy') + config.commit() wrapper = self._getViewCallable(config) context = DummyContext() directlyProvides(context, IDummy) @@ -1663,6 +1739,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, path_info='/foo') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.path_info = '/foo' @@ -1672,6 +1749,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, path_info='/foo') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.path_info = '/' @@ -1686,6 +1764,7 @@ class ConfiguratorTests(unittest.TestCase): return True predicates = (pred1, pred2) config.add_view(view=view, custom_predicates=predicates) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) self.assertEqual(wrapper(None, request), 'OK') @@ -1699,6 +1778,7 @@ class ConfiguratorTests(unittest.TestCase): return False predicates = (pred1, pred2) config.add_view(view=view, custom_predicates=predicates) + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) self._assertNotFound(wrapper, None, request) @@ -1711,6 +1791,7 @@ class ConfiguratorTests(unittest.TestCase): return True config.add_view(view=view, custom_predicates=(pred1,)) config.add_view(view=view2, request_method='GET') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.method = 'GET' @@ -1722,6 +1803,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_view(view=view, request_method='GET', xhr=True) config.add_view(view=view2, request_method='GET') + config.commit() wrapper = self._getViewCallable(config) request = self._makeRequest(config) request.method = 'GET' @@ -1729,14 +1811,13 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(wrapper(None, request), 'OK') def test_add_view_same_predicates(self): + from zope.configuration.config import ConfigurationConflictError view2 = lambda *arg: 'second' view1 = lambda *arg: 'first' config = self._makeOne() config.add_view(view=view1) config.add_view(view=view2) - view = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(view(None, request), 'second') + self.assertRaises(ConfigurationConflictError, config.commit) def test_add_view_with_permission(self): view1 = lambda *arg: 'OK' @@ -1754,6 +1835,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne(authorization_policy=policy, authentication_policy=policy) config.add_view(view=view1, permission='view') + config.commit() view = self._getViewCallable(config) request = self._makeRequest(config) self.assertEqual(view(None, request), 'OK') @@ -1775,6 +1857,7 @@ class ConfiguratorTests(unittest.TestCase): authentication_policy=policy, default_permission='view') config.add_view(view=view1) + config.commit() view = self._getViewCallable(config) request = self._makeRequest(config) self.assertEqual(view(None, request), 'OK') @@ -1786,6 +1869,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne(authorization_policy=policy, authentication_policy=policy) config.add_view(view=view1) + config.commit() view = self._getViewCallable(config) request = self._makeRequest(config) self.assertEqual(view(None, request), 'OK') @@ -1797,6 +1881,7 @@ class ConfiguratorTests(unittest.TestCase): views.append(kw) config.add_view = dummy_add_view config.add_handler('name', '/:action', DummyHandler) + config.commit() self._assertRoute(config, 'name', '/:action', 0) self.assertEqual(len(views), 2) @@ -1833,6 +1918,7 @@ class ConfiguratorTests(unittest.TestCase): class MyView(DummyHandler): __autoexpose__ = None config.add_handler('name', '/:action', MyView) + config.commit() self._assertRoute(config, 'name', '/:action', 0) self.assertEqual(len(views), 0) @@ -1869,6 +1955,7 @@ class ConfiguratorTests(unittest.TestCase): return 'response' action.__exposed__ = [{'custom_predicates':(1,)}] config.add_handler('name', '/:action', MyView) + config.commit() self._assertRoute(config, 'name', '/:action', 0) self.assertEqual(len(views), 1) view = views[0] @@ -1889,6 +1976,7 @@ class ConfiguratorTests(unittest.TestCase): return 'response' action.__exposed__ = [{'name':'action3000'}] config.add_handler('name', '/:action', MyView) + config.commit() self._assertRoute(config, 'name', '/:action', 0) self.assertEqual(len(views), 1) view = views[0] @@ -1915,6 +2003,7 @@ class ConfiguratorTests(unittest.TestCase): return 'response' action.__exposed__ = [{'name':'^action3000$'}] config.add_handler('name', '/:action', MyView) + config.commit() self._assertRoute(config, 'name', '/:action', 0) self.assertEqual(len(views), 1) view = views[0] @@ -1941,6 +2030,7 @@ class ConfiguratorTests(unittest.TestCase): return 'response' action.__exposed__ = exposed config.add_handler('name', '/{action}', MyView) + config.commit() self.assertEqual(exposed[0], {'name':'^action3000$'}) # not mutated def test_add_handler_with_action_and_action_in_path(self): @@ -1959,6 +2049,7 @@ class ConfiguratorTests(unittest.TestCase): views.append(kw) config.add_view = dummy_add_view config.add_handler('name', '/abc', DummyHandler, action='index') + config.commit() self.assertEqual(len(views), 1) view = views[0] self.assertEqual(view['a'], '1') @@ -1976,6 +2067,7 @@ class ConfiguratorTests(unittest.TestCase): views.append(kw) config.add_view = dummy_add_view config.add_handler('name', '/abc', DummyHandler) + config.commit() self.assertEqual(len(views), 1) view = views[0] self.assertEqual(view['a'], '1') @@ -1994,6 +2086,7 @@ class ConfiguratorTests(unittest.TestCase): views.append(kw) config.add_view = dummy_add_view config.add_handler('name', '/abc', DummyHandler, action='index') + config.commit() self.assertEqual(len(views), 2) view = views[0] self.assertEqual(view['attr'], 'create') @@ -2010,6 +2103,7 @@ class ConfiguratorTests(unittest.TestCase): views.append(kw) config.add_view = dummy_add_view config.add_handler('name', '/abc', 'pyramid') + config.commit() self.assertEqual(len(views), 1) view = views[0] self.assertEqual(view['view'], pyramid) @@ -2030,6 +2124,7 @@ class ConfiguratorTests(unittest.TestCase): config.add_view = dummy_add_view config.add_route = None # shouldn't be called config.add_handler('name', None, 'pyramid') + config.commit() self.assertEqual(len(views), 1) view = views[0] self.assertEqual(view['view'], pyramid) @@ -2062,6 +2157,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_defaults(self): config = self._makeOne() route = config.add_route('name', 'path') + config.commit() self._assertRoute(config, 'name', 'path') self.assertEqual(route.name, 'name') @@ -2069,6 +2165,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() factory = object() route = config.add_route('name', 'path', factory=factory) + config.commit() self.assertEqual(route.factory, factory) def test_add_route_with_factory_dottedname(self): @@ -2076,11 +2173,13 @@ class ConfiguratorTests(unittest.TestCase): route = config.add_route( 'name', 'path', factory='pyramid.tests.test_configuration.dummyfactory') + config.commit() self.assertEqual(route.factory, dummyfactory) def test_add_route_with_xhr(self): config = self._makeOne() config.add_route('name', 'path', xhr=True) + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2093,6 +2192,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_with_request_method(self): config = self._makeOne() config.add_route('name', 'path', request_method='GET') + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2105,6 +2205,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_with_path_info(self): config = self._makeOne() config.add_route('name', 'path', path_info='/foo') + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2117,6 +2218,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_with_request_param(self): config = self._makeOne() config.add_route('name', 'path', request_param='abc') + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2131,12 +2233,14 @@ class ConfiguratorTests(unittest.TestCase): def pred1(context, request): pass def pred2(context, request): pass config.add_route('name', 'path', custom_predicates=(pred1, pred2)) + config.commit() route = self._assertRoute(config, 'name', 'path', 2) self.assertEqual(route.predicates, [pred1, pred2]) def test_add_route_with_header(self): config = self._makeOne() config.add_route('name', 'path', header='Host') + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2149,6 +2253,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_with_accept(self): config = self._makeOne() config.add_route('name', 'path', accept='text/xml') + config.commit() route = self._assertRoute(config, 'name', 'path', 1) predicate = route.predicates[0] request = self._makeRequest(config) @@ -2162,6 +2267,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.add_route('name', 'path', view=view) + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self.assertEqual(wrapper(None, None), 'OK') @@ -2171,6 +2277,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, view_context=IDummy) + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, IDummy, request_type) self.assertEqual(wrapper(None, None), 'OK') @@ -2183,6 +2290,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, view_context=RuntimeError) + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable( config, ctx_iface=implementedBy(RuntimeError), @@ -2198,6 +2306,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, view_for=IDummy) + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, IDummy, request_type) self.assertEqual(wrapper(None, None), 'OK') @@ -2209,6 +2318,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, for_=IDummy) + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, IDummy, request_type) self.assertEqual(wrapper(None, None), 'OK') @@ -2222,6 +2332,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, view_renderer='fixtures/minimal.txt') + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self._assertRoute(config, 'name', 'path') @@ -2236,6 +2347,7 @@ class ConfiguratorTests(unittest.TestCase): def alt(self): return 'OK' config.add_route('name', 'path', view=View, view_attr='alt') + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self._assertRoute(config, 'name', 'path') @@ -2247,6 +2359,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, renderer='fixtures/minimal.txt') + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self._assertRoute(config, 'name', 'path') @@ -2261,6 +2374,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerUtility(policy, IAuthorizationPolicy) view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, view_permission='edit') + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self._assertRoute(config, 'name', 'path') @@ -2275,6 +2389,7 @@ class ConfiguratorTests(unittest.TestCase): config.registry.registerUtility(policy, IAuthorizationPolicy) view = lambda *arg: 'OK' config.add_route('name', 'path', view=view, permission='edit') + config.commit() request_type = self._getRouteRequestIface(config, 'name') wrapper = self._getViewCallable(config, None, request_type) self._assertRoute(config, 'name', 'path') @@ -2283,6 +2398,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_no_pattern_with_path(self): config = self._makeOne() route = config.add_route('name', path='path') + config.commit() self._assertRoute(config, 'name', 'path') self.assertEqual(route.name, 'name') @@ -2294,6 +2410,7 @@ class ConfiguratorTests(unittest.TestCase): def test_add_route_with_pregenerator(self): config = self._makeOne() route = config.add_route('name', 'pattern', pregenerator='123') + config.commit() self.assertEqual(route.pregenerator, '123') def test__override_not_yet_registered(self): @@ -2329,6 +2446,7 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.interfaces import IViewClassifier config = self._makeOne() config.add_static_view('static', 'fixtures/static') + config.commit() request_type = self._getRouteRequestIface(config, 'static/') route = self._assertRoute(config, 'static/', 'static/*subpath') self.assertEqual(route.factory.__class__, type(lambda x: x)) @@ -2344,6 +2462,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.registry.registerUtility(info, IStaticURLInfo) config.add_static_view('static', 'pyramid.tests:fixtures/static') + config.commit() self.assertEqual(info.added, [('static', 'pyramid.tests:fixtures/static', {})]) @@ -2353,6 +2472,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.registry.registerUtility(info, IStaticURLInfo) config.add_static_view('static', 'fixtures/static') + config.commit() self.assertEqual(info.added, [('static', 'pyramid.tests:fixtures/static', {})]) @@ -2365,6 +2485,7 @@ class ConfiguratorTests(unittest.TestCase): here = os.path.dirname(__file__) static_path = os.path.join(here, 'fixtures', 'static') config.add_static_view('static', static_path) + config.commit() self.assertEqual(info.added, [('static', static_path, {})]) @@ -2375,6 +2496,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: arg config.set_notfound_view(view) + config.commit() request = self._makeRequest(config) view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), request_iface=IRequest) @@ -2388,6 +2510,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: arg config.set_notfound_view(view) + config.commit() request = self._makeRequest(config) request.context = 'abc' view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), @@ -2402,6 +2525,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: 'OK' config.set_forbidden_view(view) + config.commit() request = self._makeRequest(config) view = self._getViewCallable(config, ctx_iface=implementedBy(Forbidden), request_iface=IRequest) @@ -2415,6 +2539,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() view = lambda *arg: arg config.set_forbidden_view(view) + config.commit() request = self._makeRequest(config) request.context = 'abc' view = self._getViewCallable(config, ctx_iface=implementedBy(Forbidden), @@ -2427,6 +2552,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() policy = object() config._set_authentication_policy(policy) + config.commit() self.assertEqual( config.registry.getUtility(IAuthenticationPolicy), policy) @@ -2435,6 +2561,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() policy = object() config._set_authorization_policy(policy) + config.commit() self.assertEqual( config.registry.getUtility(IAuthorizationPolicy), policy) @@ -2443,6 +2570,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() def negotiator(request): pass config.set_locale_negotiator(negotiator) + config.commit() self.assertEqual(config.registry.getUtility(ILocaleNegotiator), negotiator) @@ -2451,6 +2579,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.set_locale_negotiator( 'pyramid.tests.test_configuration.dummyfactory') + config.commit() self.assertEqual(config.registry.getUtility(ILocaleNegotiator), dummyfactory) @@ -2459,6 +2588,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() factory = object() config.set_request_factory(factory) + config.commit() self.assertEqual(config.registry.getUtility(IRequestFactory), factory) def test_set_request_factory_dottedname(self): @@ -2466,6 +2596,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.set_request_factory( 'pyramid.tests.test_configuration.dummyfactory') + config.commit() self.assertEqual(config.registry.getUtility(IRequestFactory), dummyfactory) @@ -2474,6 +2605,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() factory = object() config.set_renderer_globals_factory(factory) + config.commit() self.assertEqual(config.registry.getUtility(IRendererGlobalsFactory), factory) @@ -2482,6 +2614,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.set_renderer_globals_factory( 'pyramid.tests.test_configuration.dummyfactory') + config.commit() self.assertEqual(config.registry.getUtility(IRendererGlobalsFactory), dummyfactory) @@ -2489,6 +2622,7 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.interfaces import IDefaultPermission config = self._makeOne() config.set_default_permission('view') + config.commit() self.assertEqual(config.registry.getUtility(IDefaultPermission), 'view') @@ -2496,6 +2630,7 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.interfaces import ISessionFactory config = self._makeOne() config.set_session_factory('factory') + config.commit() self.assertEqual(config.registry.getUtility(ISessionFactory), 'factory') @@ -2511,6 +2646,7 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.interfaces import ITranslationDirectories config = self._makeOne() config.add_translation_dirs('pyramid.tests.localeapp:locale') + config.commit() here = os.path.dirname(__file__) locale = os.path.join(here, 'localeapp', 'locale') self.assertEqual(config.registry.getUtility(ITranslationDirectories), @@ -2524,6 +2660,7 @@ class ConfiguratorTests(unittest.TestCase): manager.push({'request':request, 'registry':config.registry}) try: config.add_translation_dirs('pyramid.tests.localeapp:locale') + config.commit() translate = config.registry.getUtility(IChameleonTranslate) self.assertEqual(translate('Approve'), u'Approve') finally: @@ -2536,6 +2673,7 @@ class ConfiguratorTests(unittest.TestCase): here = os.path.dirname(__file__) locale = os.path.join(here, 'localeapp', 'locale') config.add_translation_dirs(locale) + config.commit() self.assertEqual(config.registry.getUtility(ITranslationDirectories), [locale]) @@ -2564,6 +2702,7 @@ class ConfiguratorTests(unittest.TestCase): def __call__(self, *arg, **kw): return 'moo' config.add_renderer('moo', moo) + config.commit() result = config.derive_view(view, renderer='moo') self.failIf(result is view) self.assertEqual(result(None, None).body, 'moo') @@ -2578,6 +2717,7 @@ class ConfiguratorTests(unittest.TestCase): def __call__(self, *arg, **kw): return 'moo' config.add_renderer(None, moo) + config.commit() result = config.derive_view(view) self.failIf(result is view) self.assertEqual(result(None, None).body, 'moo') @@ -2594,6 +2734,7 @@ class ConfiguratorTests(unittest.TestCase): return 'foo' config.add_renderer(None, moo) config.add_renderer('foo', foo) + config.commit() result = config.derive_view(view, renderer='foo') self.failIf(result is view) self.assertEqual(result(None, None).body, 'foo') @@ -2961,6 +3102,7 @@ class ConfiguratorTests(unittest.TestCase): 'pyramid.tests.fixtureapp:templates/foo.pt', 'pyramid.tests.fixtureapp.subpackage:templates/bar.pt', _override=override) + config.commit() from pyramid.tests import fixtureapp from pyramid.tests.fixtureapp import subpackage self.assertEqual(override.package, fixtureapp) @@ -2973,6 +3115,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() renderer = object() config.add_renderer('name', renderer) + config.commit() self.assertEqual(config.registry.getUtility(IRendererFactory, 'name'), renderer) @@ -2981,6 +3124,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() import pyramid.tests config.add_renderer('name', 'pyramid.tests') + config.commit() self.assertEqual(config.registry.getUtility(IRendererFactory, 'name'), pyramid.tests) @@ -2992,6 +3136,7 @@ class ConfiguratorTests(unittest.TestCase): import pyramid.tests.grokkedapp as package config = self._makeOne() config.scan(package) + config.commit() ctx = DummyContext() req = DummyRequest() @@ -3094,6 +3239,7 @@ class ConfiguratorTests(unittest.TestCase): from pyramid.view import render_view_to_response config = self._makeOne() config.scan('pyramid.tests.grokkedapp') + config.commit() ctx = DummyContext() req = DummyRequest() @@ -3109,6 +3255,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.testing_securitypolicy('user', ('group1', 'group2'), permissive=False) + config.commit() from pyramid.interfaces import IAuthenticationPolicy from pyramid.interfaces import IAuthorizationPolicy ut = config.registry.getUtility(IAuthenticationPolicy) @@ -3126,6 +3273,7 @@ class ConfiguratorTests(unittest.TestCase): models = {'/ob1':ob1, '/ob2':ob2} config = self._makeOne() config.testing_models(models) + config.commit() adapter = config.registry.getAdapter(None, ITraverser) result = adapter({'PATH_INFO':'/ob1'}) self.assertEqual(result['context'], ob1) @@ -3151,6 +3299,7 @@ class ConfiguratorTests(unittest.TestCase): def test_testing_add_subscriber_single(self): config = self._makeOne() L = config.testing_add_subscriber(IDummy) + config.commit() event = DummyEvent() config.registry.notify(event) self.assertEqual(len(L), 1) @@ -3162,6 +3311,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() L = config.testing_add_subscriber( 'pyramid.tests.test_configuration.IDummy') + config.commit() event = DummyEvent() config.registry.notify(event) self.assertEqual(len(L), 1) @@ -3172,6 +3322,7 @@ class ConfiguratorTests(unittest.TestCase): def test_testing_add_subscriber_multiple(self): config = self._makeOne() L = config.testing_add_subscriber((Interface, IDummy)) + config.commit() event = DummyEvent() event.object = 'foo' # the below is the equivalent of z.c.event.objectEventNotify(event) @@ -3183,6 +3334,7 @@ class ConfiguratorTests(unittest.TestCase): def test_testing_add_subscriber_defaults(self): config = self._makeOne() L = config.testing_add_subscriber() + config.commit() event = object() config.registry.notify(event) self.assertEqual(L[-1], event) @@ -3206,6 +3358,7 @@ class ConfiguratorTests(unittest.TestCase): def test_testing_add_renderer(self): config = self._makeOne() renderer = config.testing_add_renderer('templates/foo.pt') + config.commit() from pyramid.testing import DummyTemplateRenderer self.failUnless(isinstance(renderer, DummyTemplateRenderer)) from pyramid.renderers import render_to_response @@ -3225,6 +3378,7 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(kw, {'foo':1, 'bar':2}) raise E renderer = config.testing_add_renderer('templates/foo.pt', renderer) + config.commit() from pyramid.renderers import render_to_response # must provide request to pass in registry (this is a functest) request = DummyRequest() @@ -3240,6 +3394,7 @@ class ConfiguratorTests(unittest.TestCase): def test_testing_add_template(self): config = self._makeOne() renderer = config.testing_add_template('templates/foo.pt') + config.commit() from pyramid.testing import DummyTemplateRenderer self.failUnless(isinstance(renderer, DummyTemplateRenderer)) from pyramid.renderers import render_to_response diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index c70985e79..9e9ea78b2 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -35,6 +35,7 @@ class WGSIAppPlusViewConfigTests(unittest.TestCase): from pyramid.tests import test_integration config = Configurator() config.scan(test_integration) + config.commit() reg = config.registry view = reg.adapters.lookup( (IViewClassifier, IRequest, INothing), IView, name='') @@ -70,6 +71,7 @@ class IntegrationBase(unittest.TestCase): config = Configurator(root_factory=self.root_factory) config.begin() config.load_zcml(self.config) + config.commit() app = config.make_wsgi_app() from webtest import TestApp self.testapp = TestApp(app) diff --git a/pyramid/tests/test_testing.py b/pyramid/tests/test_testing.py index adbbcb555..e701a08c0 100644 --- a/pyramid/tests/test_testing.py +++ b/pyramid/tests/test_testing.py @@ -544,9 +544,10 @@ class Test_setUp(unittest.TestCase): manager.clear() def test_it_with_registry(self): + from pyramid.registry import Registry from zope.component import getSiteManager from pyramid.threadlocal import manager - registry = object() + registry = Registry() try: self._callFUT(registry=registry) current = manager.get() @@ -570,7 +571,8 @@ class Test_setUp(unittest.TestCase): def test_it_with_hook_zca_false(self): from zope.component import getSiteManager from pyramid.threadlocal import manager - registry = object() + from pyramid.registry import Registry + registry = Registry() try: self._callFUT(registry=registry, hook_zca=False) sm = getSiteManager() diff --git a/pyramid/tests/test_zcml.py b/pyramid/tests/test_zcml.py index 39b342ffe..fe2ec6522 100644 --- a/pyramid/tests/test_zcml.py +++ b/pyramid/tests/test_zcml.py @@ -35,7 +35,7 @@ class TestViewDirective(unittest.TestCase): view = lambda *arg: None self._callFUT(context, 'repoze.view', IDummy, view=view, renderer='foo/template.pt') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) discrim = ('view', IDummy, '', None, IView, None, None, None, None, None, False, None, None, None) @@ -60,7 +60,7 @@ class TestViewDirective(unittest.TestCase): preds = (pred1, pred2) self._callFUT(context, 'repoze.view', IDummy, view=view, custom_predicates=preds) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) discrim = ('view', IDummy, '', None, IView, None, None, None, None, None, False, None, None, None) @@ -83,7 +83,7 @@ class TestViewDirective(unittest.TestCase): pass self._callFUT(context, 'repoze.view', for_=Foo, view=view, context=IDummy) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) discrim = ('view', IDummy, '', None, IView, None, None, None, None, None, False, None, None, None) @@ -104,7 +104,7 @@ class TestViewDirective(unittest.TestCase): class Foo: pass self._callFUT(context, 'repoze.view', for_=IDummy, view=view) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) discrim = ('view', IDummy, '', None, IView, None, None, None, None, None, False, None, None, None) @@ -138,7 +138,7 @@ class TestNotFoundDirective(unittest.TestCase): def view(request): return 'OK' self._callFUT(context, view) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) discrim = ('view', NotFound, '', None, IView, None, None, None, None, @@ -163,15 +163,16 @@ class TestNotFoundDirective(unittest.TestCase): from pyramid.exceptions import NotFound from pyramid.configuration import Configurator reg = self.config.registry - context = reg.ctx config = Configurator(reg) def dummy_renderer_factory(*arg, **kw): return lambda *arg, **kw: 'OK' config.add_renderer('.pt', dummy_renderer_factory) + config.commit() def view(request): return {} + context = reg.ctx self._callFUT(context, view, renderer='fake.pt') - actions = context.actions + actions = extract_actions(context.actions) regadapt = actions[0] register = regadapt['callable'] register() @@ -204,7 +205,7 @@ class TestForbiddenDirective(unittest.TestCase): def view(request): return 'OK' self._callFUT(context, view) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) @@ -230,15 +231,16 @@ class TestForbiddenDirective(unittest.TestCase): from pyramid.exceptions import Forbidden from pyramid.configuration import Configurator reg = self.config.registry - context = reg.ctx config = Configurator(reg) def dummy_renderer_factory(*arg, **kw): return lambda *arg, **kw: 'OK' config.add_renderer('.pt', dummy_renderer_factory) + config.commit() def view(request): return {} + context = reg.ctx self._callFUT(context, view, renderer='fake.pt') - actions = context.actions + actions = extract_actions(context.actions) regadapt = actions[0] register = regadapt['callable'] register() @@ -265,7 +267,7 @@ class TestRepozeWho1AuthenticationPolicyDirective(unittest.TestCase): from pyramid.interfaces import IAuthenticationPolicy context = self.config.registry.ctx self._callFUT(context) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -282,7 +284,7 @@ class TestRepozeWho1AuthenticationPolicyDirective(unittest.TestCase): def callback(identity, request): """ """ self._callFUT(context, identifier_name='something', callback=callback) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -310,7 +312,7 @@ class TestRemoteUserAuthenticationPolicyDirective(unittest.TestCase): def callback(identity, request): """ """ self._callFUT(context) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -327,7 +329,7 @@ class TestRemoteUserAuthenticationPolicyDirective(unittest.TestCase): def callback(identity, request): """ """ self._callFUT(context, environ_key='BLAH', callback=callback) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -353,7 +355,7 @@ class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase): reg = self.config.registry context = reg.ctx self._callFUT(context, 'sosecret') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -373,7 +375,7 @@ class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase): cookie_name='auth_tkt', secure=True, include_ip=True, timeout=100, reissue_time=60, http_only=True, path="/sub/") - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) @@ -417,7 +419,7 @@ class TestACLAuthorizationPolicyDirective(unittest.TestCase): def callback(identity, request): """ """ self._callFUT(context) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IAuthorizationPolicy) @@ -458,21 +460,23 @@ class TestRouteDirective(unittest.TestCase): context = reg.ctx view = lambda *arg: 'OK' self._callFUT(context, 'name', 'pattern', view=view) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] - route_action['callable']() + view_action = actions[0] + request_type = reg.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] + discrim = ('view', None, '', None, IView, None, None, None, 'name', + None, False, None, None, None) + self.assertEqual(view_discriminator, discrim) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) self._assertRoute('name', 'pattern') - view_action = actions[1] - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) wrapped = reg.adapters.lookup( (IViewClassifier, request_type, Interface), IView, name='') self.failUnless(wrapped) @@ -486,21 +490,23 @@ class TestRouteDirective(unittest.TestCase): view = lambda *arg: 'OK' self._callFUT(context, 'name', 'pattern', view=view, view_context=IDummy) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] - route_action['callable']() + view_action = actions[0] + request_type = reg.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] + discrim = ('view', IDummy, '', None, IView, None, None, None, 'name', + None, False, None, None, None) + self.assertEqual(view_discriminator, discrim) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - view_action = actions[1] - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) + self._assertRoute('name', 'pattern') wrapped = reg.adapters.lookup( (IViewClassifier, request_type, IDummy), IView, name='') self.failUnless(wrapped) @@ -516,21 +522,23 @@ class TestRouteDirective(unittest.TestCase): pass self._callFUT(context, 'name', 'pattern', view=view, view_context=IDummy, view_for=Foo) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] - route_action['callable']() + view_action = actions[0] + request_type = reg.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] + discrim = ('view', IDummy, '', None, IView, None, None, None, 'name', + None, False, None, None, None) + self.assertEqual(view_discriminator, discrim) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - view_action = actions[1] - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) + self._assertRoute('name', 'pattern') wrapped = reg.adapters.lookup( (IViewClassifier, request_type, IDummy), IView, name='') self.failUnless(wrapped) @@ -550,21 +558,23 @@ class TestRouteDirective(unittest.TestCase): view = lambda *arg: 'OK' self._callFUT(context, 'name', 'pattern', view=view, renderer='fixtureapp/templates/foo.pt') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] - route_action['callable']() + view_action = actions[0] + request_type = reg.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] + discrim = ('view', None, '', None, IView, None, None, None, 'name', + None, False, None, None, None) + self.assertEqual(view_discriminator, discrim) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) self._assertRoute('name', 'pattern') - view_action = actions[1] - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) wrapped = reg.adapters.lookup( (IViewClassifier, request_type, Interface), IView, name='') self.failUnless(wrapped) @@ -581,11 +591,10 @@ class TestRouteDirective(unittest.TestCase): self._callFUT(context, 'name', 'pattern', custom_predicates=(pred1, pred2)) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) route_action = actions[0] - route_action['callable']() route_discriminator = route_action['discriminator'] self.assertEqual( route_discriminator, @@ -595,11 +604,10 @@ class TestRouteDirective(unittest.TestCase): def test_with_path_argument_no_pattern(self): context = self.config.registry.ctx self._callFUT(context, 'name', path='pattern') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) route_action = actions[0] - route_action['callable']() route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) @@ -608,11 +616,10 @@ class TestRouteDirective(unittest.TestCase): def test_with_path_argument_and_pattern(self): context = self.config.registry.ctx self._callFUT(context, 'name', pattern='pattern', path='path') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) route_action = actions[0] - route_action['callable']() route_discriminator = route_action['discriminator'] self.assertEqual(route_discriminator, ('route', 'name', False, None, None, None, None,None)) @@ -647,24 +654,30 @@ class TestStaticDirective(unittest.TestCase): from pyramid.interfaces import IRoutesMapper reg = self.config.registry context = reg.ctx + self._callFUT(context, 'name', 'fixtures/static') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] + view_action = actions[0] + discriminator = view_action['discriminator'] + self.assertEqual(discriminator[:3], ('view', StaticURLInfo, '')) + self.assertEqual(discriminator[4], IView) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] discriminator = route_action['discriminator'] - self.assertEqual(discriminator, ('static', 'name')) - route_action['callable'](*route_action['args'], **route_action['kw']) + self.assertEqual( + discriminator, + ('route', 'name/', False, None, None, None, None, None) + ) + mapper = reg.getUtility(IRoutesMapper) routes = mapper.get_routes() self.assertEqual(len(routes), 1) self.assertEqual(routes[0].pattern, 'name/*subpath') self.assertEqual(routes[0].name, 'name/') - view_action = actions[1] - discriminator = view_action['discriminator'] - self.assertEqual(discriminator[:3], ('view', StaticURLInfo, '')) - self.assertEqual(discriminator[4], IView) iface = implementedBy(StaticURLInfo) request_type = reg.getUtility(IRouteRequest, 'name/') view = reg.adapters.lookup( @@ -685,23 +698,27 @@ class TestStaticDirective(unittest.TestCase): reg = self.config.registry context = reg.ctx self._callFUT(context, 'name', 'fixtures/static', permission='aperm') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 2) - route_action = actions[0] + view_action = actions[0] + discriminator = view_action['discriminator'] + self.assertEqual(discriminator[:3], ('view', StaticURLInfo, '')) + self.assertEqual(discriminator[4], IView) + view_action['callable'](*view_action['args'], **view_action['kw']) + + route_action = actions[1] discriminator = route_action['discriminator'] - self.assertEqual(discriminator, ('static', 'name')) - route_action['callable'](*route_action['args'], **route_action['kw']) + self.assertEqual( + discriminator, + ('route', 'name/', False, None, None, None, None, None)) mapper = reg.getUtility(IRoutesMapper) routes = mapper.get_routes() self.assertEqual(len(routes), 1) self.assertEqual(routes[0].pattern, 'name/*subpath') self.assertEqual(routes[0].name, 'name/') - view_action = actions[1] - discriminator = view_action['discriminator'] - self.assertEqual(discriminator[:3], ('view', StaticURLInfo, '')) - self.assertEqual(discriminator[4], IView) + iface = implementedBy(StaticURLInfo) request_type = reg.getUtility(IRouteRequest, 'name/') view = reg.adapters.lookup( @@ -721,16 +738,21 @@ class TestResourceDirective(unittest.TestCase): return resource(*arg, **kw) def test_it(self): - from pyramid.configuration import Configurator + import pyramid.tests context = self.config.registry.ctx - self._callFUT(context, 'a', 'b') - actions = context.actions + L = [] + def dummy_override(*arg): + L.append(arg) + self._callFUT(context, 'pyramid.tests:fixtures/', + 'pyramid.tests:fixtureapp/', _override=dummy_override) + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) action = actions[0] - self.assertEqual(action['callable'].im_func, - Configurator.override_resource.im_func) self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a', 'b', None)) + action['callable']() + self.assertEqual( + L, + [(pyramid.tests, 'fixtures/', pyramid.tests, 'fixtureapp/')]) class TestRendererDirective(unittest.TestCase): @@ -750,7 +772,7 @@ class TestRendererDirective(unittest.TestCase): context = reg.ctx renderer = lambda *arg, **kw: None self._callFUT(context, renderer, 'r') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) action = actions[0] self.assertEqual(action['discriminator'], (IRendererFactory, 'r')) @@ -818,16 +840,17 @@ class TestZCMLScanDirective(unittest.TestCase): return scan(context, package) def test_it(self): - from pyramid.configuration import Configurator dummy_module = DummyModule() + def foo(): + pass + def bar(scanner, name, ob): + dummy_module.scanned = True + foo.__venusian_callbacks__ = {'pyramid':[bar]} + dummy_module.foo = foo + context = self.config.registry.ctx self._callFUT(context, dummy_module) - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - self.assertEqual(action['callable'].im_func, Configurator.scan.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], (dummy_module, None, None)) + self.assertEqual(dummy_module.scanned, True) class TestAdapterDirective(unittest.TestCase): def setUp(self): @@ -860,8 +883,9 @@ class TestAdapterDirective(unittest.TestCase): factory = DummyFactory() factory.__component_adapts__ = (IDummy,) self._callFUT(context, [factory], provides=IFactory, for_=None) - self.assertEqual(len(context.actions), 1) - regadapt = context.actions[0] + actions = extract_actions(context.actions) + self.assertEqual(len(actions), 1) + regadapt = actions[0] self.assertEqual(regadapt['discriminator'], ('adapter', (IDummy,), IFactory, '')) self.assertEqual(regadapt['callable'].im_func, @@ -880,7 +904,7 @@ class TestAdapterDirective(unittest.TestCase): context = DummyContext() context.registry = self.config.registry self._callFUT(context, [DummyFactory], for_=(IDummy,)) - regadapt = context.actions[0] + regadapt = extract_actions(context.actions)[0] self.assertEqual(regadapt['discriminator'], ('adapter', (IDummy,), IFactory, '')) self.assertEqual(regadapt['callable'].im_func, @@ -912,7 +936,7 @@ class TestAdapterDirective(unittest.TestCase): [factory, factory], provides=IFactory, for_=(IDummy,)) - regadapt = context.actions[0] + regadapt = extract_actions(context.actions)[0] self.assertEqual(regadapt['discriminator'], ('adapter', (IDummy,), IFactory, '')) self.assertEqual(regadapt['callable'].im_func, @@ -963,31 +987,34 @@ class TestSubscriberDirective(unittest.TestCase): factory=factory, handler=None, provides=IFactory) def test_register_with_factory(self): - from pyramid.registry import Registry context = self.config.registry.ctx factory = DummyFactory() self._callFUT(context, for_=(IDummy,), factory=factory, handler=None, provides=IFactory) - self.assertEqual(len(context.actions), 1) - subadapt = context.actions[0] + actions = extract_actions(context.actions) + self.assertEqual(len(actions), 1) + subadapt = actions[0] self.assertEqual(subadapt['discriminator'], None) - self.assertEqual(subadapt['callable'].im_func, - Registry.registerSubscriptionAdapter.im_func) - self.assertEqual(subadapt['args'], - (factory, (IDummy,), IFactory, None, None) ) + subadapt['callable'](*subadapt['args'], **subadapt['kw']) + self.assertEqual( + self.config.registry._subscription_registrations, + [((IDummy,), IFactory, None, factory, '')] + ) def test_register_with_handler(self): - from pyramid.configuration import Configurator context = self.config.registry.ctx factory = DummyFactory() self._callFUT(context, for_=(IDummy,), factory=None, handler=factory) - self.assertEqual(len(context.actions), 1) - subadapt = context.actions[0] + actions = extract_actions(context.actions) + self.assertEqual(len(actions), 1) + subadapt = actions[0] self.assertEqual(subadapt['discriminator'], None) - self.assertEqual(subadapt['callable'].im_func, - Configurator.add_subscriber.im_func) - self.assertEqual(subadapt['args'], (factory, (IDummy,), None) ) + subadapt['callable'](*subadapt['args'], **subadapt['kw']) + self.assertEqual( + self.config.registry._handler_registrations, + [((IDummy,), u'', factory, '')] + ) class TestUtilityDirective(unittest.TestCase): def setUp(self): @@ -1013,12 +1040,13 @@ class TestUtilityDirective(unittest.TestCase): from pyramid.registry import Registry context = self.config.registry.ctx self._callFUT(context, factory=DummyFactory) - self.assertEqual(len(context.actions), 1) - utility = context.actions[0] + actions = extract_actions(context.actions) + self.assertEqual(len(actions), 1) + utility = actions[0] self.assertEqual(utility['discriminator'], ('utility', IFactory, '')) self.assertEqual(utility['callable'].im_func, Registry.registerUtility.im_func) - self.assertEqual(utility['args'], (None, IFactory, '', None)) + self.assertEqual(utility['args'], (None, IFactory, '', '')) self.assertEqual(utility['kw'], {'factory':DummyFactory}) def test_provides_from_component_provides(self): @@ -1026,12 +1054,13 @@ class TestUtilityDirective(unittest.TestCase): context = self.config.registry.ctx component = DummyFactory() self._callFUT(context, component=component) - self.assertEqual(len(context.actions), 1) - utility = context.actions[0] + actions = extract_actions(context.actions) + self.assertEqual(len(actions), 1) + utility = actions[0] self.assertEqual(utility['discriminator'], ('utility', IFactory, '')) self.assertEqual(utility['callable'].im_func, Registry.registerUtility.im_func) - self.assertEqual(utility['args'], (component, IFactory, '', None)) + self.assertEqual(utility['args'], (component, IFactory, '', '')) self.assertEqual(utility['kw'], {}) class TestTranslationDirDirective(unittest.TestCase): @@ -1046,18 +1075,15 @@ class TestTranslationDirDirective(unittest.TestCase): return translationdir(*arg, **kw) def test_it(self): - from pyramid.configuration import Configurator + import os + here = os.path.dirname(__file__) + expected = os.path.join(here, 'localeapp', 'locale') + from pyramid.interfaces import ITranslationDirectories context = self.config.registry.ctx tdir = 'pyramid.tests.localeapp:locale' self._callFUT(context, tdir) - actions = context.actions - self.assertEqual(len(actions), 1) - action = context.actions[0] - self.assertEqual(action['discriminator'], ('tdir', tdir)) - self.assertEqual(action['callable'].im_func, - Configurator.add_translation_dirs.im_func) - self.assertEqual(action['args'], (tdir,)) - action['callable'](*action['args']) # doesn't blow up + util = self.config.registry.getUtility(ITranslationDirectories) + self.assertEqual(util, [expected]) class TestLocaleNegotiatorDirective(unittest.TestCase): def setUp(self): @@ -1071,18 +1097,18 @@ class TestLocaleNegotiatorDirective(unittest.TestCase): return localenegotiator(*arg, **kw) def test_it(self): - from pyramid.configuration import Configurator + from pyramid.interfaces import ILocaleNegotiator context = self.config.registry.ctx dummy_negotiator = object() self._callFUT(context, dummy_negotiator) - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) - action = context.actions[0] - self.assertEqual(action['discriminator'], 'lnegotiator') - self.assertEqual(action['callable'].im_func, - Configurator.set_locale_negotiator.im_func) - self.assertEqual(action['args'], (dummy_negotiator,)) - action['callable'](*action['args']) # doesn't blow up + action = actions[0] + self.assertEqual(action['discriminator'], ILocaleNegotiator) + callback = action['callable'] + callback() + self.assertEqual(self.config.registry.getUtility(ILocaleNegotiator), + dummy_negotiator) class TestDefaultPermissionDirective(unittest.TestCase): def setUp(self): @@ -1100,7 +1126,7 @@ class TestDefaultPermissionDirective(unittest.TestCase): reg = self.config.registry context = reg.ctx self._callFUT(context, 'view') - actions = context.actions + actions = extract_actions(context.actions) self.assertEqual(len(actions), 1) regadapt = actions[0] self.assertEqual(regadapt['discriminator'], IDefaultPermission) @@ -1203,12 +1229,7 @@ class DummyContext: self.package = None def action(self, discriminator, callable=None, args=(), kw={}, order=0): - self.actions.append( - {'discriminator':discriminator, - 'callable':callable, - 'args':args, - 'kw':kw} - ) + self.actions.append((discriminator, callable, args, kw, order)) def path(self, path): return path @@ -1238,3 +1259,25 @@ class DummyPackage(object): self.__name__ = name self.__file__ = '/__init__.py' +def extract_actions(native): + L = [] + for action in native: + alen = len(action) + d = {} + d['discriminator'] = action[0] + d['callable'] = action[1] + if alen >= 3: + d['args'] = action[2] + else: + d['args'] = () + if alen >= 4: + d['kw'] = action[3] + else: + d['kw'] = {} + if alen >= 5: + d['order'] = action[4] + else: + d['order'] = 99 + L.append(d) + return L + diff --git a/pyramid/zcml.py b/pyramid/zcml.py index dd693b42e..0a0573396 100644 --- a/pyramid/zcml.py +++ b/pyramid/zcml.py @@ -17,15 +17,12 @@ from zope.schema import Bool from zope.schema import Int from zope.schema import TextLine -from pyramid.interfaces import IView - from pyramid.authentication import AuthTktAuthenticationPolicy from pyramid.authentication import RemoteUserAuthenticationPolicy from pyramid.authentication import RepozeWho1AuthenticationPolicy from pyramid.authorization import ACLAuthorizationPolicy from pyramid.configuration import Configurator from pyramid.exceptions import ConfigurationError -from pyramid.exceptions import NotFound from pyramid.resource import resource_spec_from_abspath from pyramid.threadlocal import get_current_registry @@ -330,22 +327,14 @@ def notfound(_context, renderer=None, wrapper=None): - def register(): - try: - reg = _context.registry - except AttributeError: # pragma: no cover (b/c) - reg = get_current_registry() - config = Configurator(reg, package=_context.package) - config.set_notfound_view(view=view, attr=attr, renderer=renderer, - wrapper=wrapper) - - discriminator = ('view', NotFound, '', None, IView, None, None, None, - None, attr, False, None, None, None) + try: + reg = _context.registry + except AttributeError: # pragma: no cover (b/c) + reg = get_current_registry() + config = Configurator(reg, package=_context.package) + config.set_notfound_view(view=view, attr=attr, renderer=renderer, + wrapper=wrapper) - _context.action( - discriminator = discriminator, - callable = register, - ) def forbidden(_context, view=None, @@ -376,14 +365,14 @@ class IResourceDirective(Interface): description=u"The spec of the resource providing the override.", required=True) -def resource(_context, to_override, override_with): +def resource(_context, to_override, override_with, _override=None): try: reg = _context.registry except AttributeError: # pragma: no cover (b/c) reg = get_current_registry() config = Configurator(reg, package=_context.package) - config.override_resource(to_override, override_with) + config.override_resource(to_override, override_with, _override=_override) class IRepozeWho1AuthenticationPolicyDirective(Interface): identifier_name = TextLine(title=u'identitfier_name', required=False, -- cgit v1.2.3