summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2010-12-02 22:03:10 -0500
committerChris McDonough <chrism@plope.com>2010-12-02 22:03:10 -0500
commitc0d4a18a2e408af56b6d5611cca694ad944f1dfc (patch)
tree0dcdae913f58beb9f9a3f7d8bf5e3ccb048f7ade
parentf1ffaeeff438aa2ea768c508fe38e3dd108b9369 (diff)
downloadpyramid-c0d4a18a2e408af56b6d5611cca694ad944f1dfc.tar.gz
pyramid-c0d4a18a2e408af56b6d5611cca694ad944f1dfc.tar.bz2
pyramid-c0d4a18a2e408af56b6d5611cca694ad944f1dfc.zip
make most tests pass (all but default permission bug integration test)
-rw-r--r--pyramid/configuration.py66
-rw-r--r--pyramid/registry.py1
-rw-r--r--pyramid/testing.py27
-rw-r--r--pyramid/tests/test_configuration.py161
-rw-r--r--pyramid/tests/test_integration.py2
-rw-r--r--pyramid/tests/test_testing.py6
-rw-r--r--pyramid/tests/test_zcml.py311
-rw-r--r--pyramid/zcml.py29
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,