summaryrefslogtreecommitdiff
path: root/pyramid/tests/test_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyramid/tests/test_config.py')
-rw-r--r--pyramid/tests/test_config.py738
1 files changed, 552 insertions, 186 deletions
diff --git a/pyramid/tests/test_config.py b/pyramid/tests/test_config.py
index 9a92cd052..5f5bbdc53 100644
--- a/pyramid/tests/test_config.py
+++ b/pyramid/tests/test_config.py
@@ -10,7 +10,8 @@ except:
class ConfiguratorTests(unittest.TestCase):
def _makeOne(self, *arg, **kw):
from pyramid.config import Configurator
- return Configurator(*arg, **kw)
+ config = Configurator(*arg, **kw)
+ return config
def _registerRenderer(self, config, name='.txt'):
from pyramid.interfaces import IRendererFactory
@@ -152,7 +153,7 @@ class ConfiguratorTests(unittest.TestCase):
from pyramid.interfaces import IDebugLogger
config = self._makeOne()
logger = config.registry.getUtility(IDebugLogger)
- self.assertEqual(logger.name, 'pyramid.debug')
+ self.assertEqual(logger.name, 'pyramid.tests')
def test_ctor_noreg_debug_logger_non_None(self):
from pyramid.interfaces import IDebugLogger
@@ -211,7 +212,7 @@ class ConfiguratorTests(unittest.TestCase):
view = self._getViewCallable(config,
ctx_iface=IExceptionResponse,
request_iface=IRequest)
- self.assertTrue(view is default_exceptionresponse_view)
+ self.assertTrue(view.__wraps__ is default_exceptionresponse_view)
def test_ctor_exceptionresponse_view_None(self):
from pyramid.interfaces import IExceptionResponse
@@ -230,7 +231,7 @@ class ConfiguratorTests(unittest.TestCase):
view = self._getViewCallable(config,
ctx_iface=IExceptionResponse,
request_iface=IRequest)
- self.assertTrue(view is exceptionresponse_view)
+ self.assertTrue(view.__wraps__ is exceptionresponse_view)
def test_with_package_module(self):
from pyramid.tests import test_configuration
@@ -336,6 +337,7 @@ class ConfiguratorTests(unittest.TestCase):
reg = DummyRegistry()
config = self._makeOne(reg)
config.add_view = lambda *arg, **kw: False
+ config._add_tween = lambda *arg, **kw: False
config.setup_registry()
self.assertEqual(reg.has_listeners, True)
@@ -347,6 +349,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(reg)
views = []
config.add_view = lambda *arg, **kw: views.append((arg, kw))
+ config._add_tween = lambda *arg, **kw: False
config.setup_registry()
self.assertEqual(views[0], ((default_exceptionresponse_view,),
{'context':IExceptionResponse}))
@@ -363,6 +366,7 @@ class ConfiguratorTests(unittest.TestCase):
config.registry.queryAdapter(response, IResponse) is response)
def test_setup_registry_explicit_notfound_trumps_iexceptionresponse(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.httpexceptions import HTTPNotFound
@@ -372,7 +376,7 @@ class ConfiguratorTests(unittest.TestCase):
config.setup_registry() # registers IExceptionResponse default view
def myview(context, request):
return 'OK'
- config.add_view(myview, context=HTTPNotFound)
+ config.add_view(myview, context=HTTPNotFound, renderer=null_renderer)
request = self._makeRequest(config)
view = self._getViewCallable(config,
ctx_iface=implementedBy(HTTPNotFound),
@@ -400,7 +404,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(reg)
config.setup_registry()
logger = reg.getUtility(IDebugLogger)
- self.assertEqual(logger.name, 'pyramid.debug')
+ self.assertEqual(logger.name, 'pyramid.tests')
def test_setup_registry_debug_logger_non_None(self):
from pyramid.registry import Registry
@@ -412,15 +416,14 @@ class ConfiguratorTests(unittest.TestCase):
result = reg.getUtility(IDebugLogger)
self.assertEqual(logger, result)
- def test_setup_registry_debug_logger_dottedname(self):
+ def test_setup_registry_debug_logger_name(self):
from pyramid.registry import Registry
from pyramid.interfaces import IDebugLogger
reg = Registry()
config = self._makeOne(reg)
- config.setup_registry(debug_logger='pyramid.tests')
+ config.setup_registry(debug_logger='foo')
result = reg.getUtility(IDebugLogger)
- import pyramid.tests
- self.assertEqual(result, pyramid.tests)
+ self.assertEqual(result.name, 'foo')
def test_setup_registry_authentication_policy(self):
from pyramid.registry import Registry
@@ -569,6 +572,33 @@ class ConfiguratorTests(unittest.TestCase):
config.setup_registry(default_permission='view')
self.assertEqual(reg.getUtility(IDefaultPermission), 'view')
+ def test_setup_registry_includes(self):
+ from pyramid.registry import Registry
+ reg = Registry()
+ config = self._makeOne(reg)
+ settings = {
+ 'pyramid.include': """pyramid.tests.test_config.dummy_include
+pyramid.tests.test_config.dummy_include2""",
+ }
+ config.setup_registry(settings=settings)
+ self.assert_(reg.included)
+ self.assert_(reg.also_included)
+
+ def test_setup_registry_tweens(self):
+ from pyramid.interfaces import ITweens
+ from pyramid.registry import Registry
+ reg = Registry()
+ config = self._makeOne(reg)
+ settings = {
+ 'pyramid.tweens': 'pyramid.tests.test_config.dummy_tween_factory'
+ }
+ config.setup_registry(settings=settings)
+ config.commit()
+ tweens = config.registry.getUtility(ITweens)
+ self.assertEqual(tweens.explicit,
+ [('pyramid.tests.test_config.dummy_tween_factory',
+ dummy_tween_factory)])
+
def test_get_settings_nosettings(self):
from pyramid.registry import Registry
reg = Registry()
@@ -600,6 +630,136 @@ class ConfiguratorTests(unittest.TestCase):
settings = reg.getUtility(ISettings)
self.assertEqual(settings['a'], 1)
+ def test_add_tweens_names_distinct(self):
+ from pyramid.interfaces import ITweens
+ from pyramid.tweens import excview_tween_factory
+ def factory1(handler, registry): return handler
+ def factory2(handler, registry): return handler
+ config = self._makeOne()
+ config.add_tween(factory1)
+ config.add_tween(factory2)
+ config.commit()
+ tweens = config.registry.queryUtility(ITweens)
+ implicit = tweens.implicit()
+ self.assertEqual(
+ implicit,
+ [
+ ('pyramid.tests.test_config.factory2', factory2),
+ ('pyramid.tests.test_config.factory1', factory1),
+ ('pyramid.tweens.excview_tween_factory', excview_tween_factory),
+ ]
+ )
+
+ def test_add_tweens_names_with_underover(self):
+ from pyramid.interfaces import ITweens
+ from pyramid.tweens import excview_tween_factory
+ from pyramid.tweens import MAIN
+ def factory1(handler, registry): return handler
+ def factory2(handler, registry): return handler
+ config = self._makeOne()
+ config.add_tween(factory1, over=MAIN)
+ config.add_tween(factory2, over=MAIN,
+ under='pyramid.tests.test_config.factory1')
+ config.commit()
+ tweens = config.registry.queryUtility(ITweens)
+ implicit = tweens.implicit()
+ self.assertEqual(
+ implicit,
+ [
+ ('pyramid.tweens.excview_tween_factory', excview_tween_factory),
+ ('pyramid.tests.test_config.factory1', factory1),
+ ('pyramid.tests.test_config.factory2', factory2),
+ ])
+
+ def test_add_tween_dottedname(self):
+ from pyramid.interfaces import ITweens
+ from pyramid.tweens import excview_tween_factory
+ config = self._makeOne()
+ config.add_tween('pyramid.tests.test_config.dummy_tween_factory')
+ config.commit()
+ tweens = config.registry.queryUtility(ITweens)
+ self.assertEqual(
+ tweens.implicit(),
+ [
+ ('pyramid.tests.test_config.dummy_tween_factory',
+ dummy_tween_factory),
+ ('pyramid.tweens.excview_tween_factory', excview_tween_factory),
+ ])
+
+ def test_add_tween_instance(self):
+ from pyramid.interfaces import ITweens
+ from pyramid.tweens import excview_tween_factory
+ class ATween(object): pass
+ atween = ATween()
+ config = self._makeOne()
+ config.add_tween(atween)
+ config.commit()
+ tweens = config.registry.queryUtility(ITweens)
+ implicit = tweens.implicit()
+ self.assertEqual(len(implicit), 2)
+ self.assertTrue(
+ implicit[0][0].startswith(
+ 'pyramid.tests.test_config.ATween.'))
+ self.assertEqual(implicit[0][1], atween)
+ self.assertEqual(
+ implicit[1],
+ ('pyramid.tweens.excview_tween_factory', excview_tween_factory))
+
+ def test_add_tween_unsuitable(self):
+ from pyramid.exceptions import ConfigurationError
+ import pyramid.tests
+ config = self._makeOne()
+ self.assertRaises(ConfigurationError, config.add_tween, pyramid.tests)
+
+ def test_add_tween_alias_ingress(self):
+ from pyramid.exceptions import ConfigurationError
+ from pyramid.tweens import INGRESS
+ config = self._makeOne()
+ self.assertRaises(ConfigurationError,
+ config.add_tween, 'pyramid.tests.test_config.dummy_tween_factory',
+ alias=INGRESS)
+
+ def test_add_tween_alias_main(self):
+ from pyramid.exceptions import ConfigurationError
+ from pyramid.tweens import MAIN
+ config = self._makeOne()
+ self.assertRaises(ConfigurationError,
+ config.add_tween, 'pyramid.tests.test_config.dummy_tween_factory',
+ alias=MAIN)
+
+ def test_add_tweens_conflict(self):
+ from zope.configuration.config import ConfigurationConflictError
+ config = self._makeOne()
+ config.add_tween('pyramid.tests.test_config.dummy_tween_factory')
+ config.add_tween('pyramid.tests.test_config.dummy_tween_factory')
+ self.assertRaises(ConfigurationConflictError, config.commit)
+
+ def test_add_tweens_conflict_same_alias(self):
+ from zope.configuration.config import ConfigurationConflictError
+ class ATween(object): pass
+ atween1 = ATween()
+ atween2 = ATween()
+ config = self._makeOne()
+ config.add_tween(atween1, alias='a')
+ config.add_tween(atween2, alias='a')
+ self.assertRaises(ConfigurationConflictError, config.commit)
+
+ def test_add_tween_over_ingress(self):
+ from pyramid.exceptions import ConfigurationError
+ from pyramid.tweens import INGRESS
+ config = self._makeOne()
+ self.assertRaises(ConfigurationError,
+ config.add_tween, 'pyramid.tests.test_config.dummy_tween_factory',
+ over=INGRESS)
+
+ def test_add_tween_under_main(self):
+ from pyramid.exceptions import ConfigurationError
+ from pyramid.tweens import MAIN
+ config = self._makeOne()
+ self.assertRaises(ConfigurationError,
+ config.add_tween, 'pyramid.tests.test_config.dummy_tween_factory',
+ under=MAIN)
+
def test_add_subscriber_defaults(self):
from zope.interface import implements
from zope.interface import Interface
@@ -671,6 +831,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(len(L), 1)
def test_make_wsgi_app(self):
+ import pyramid.config
from pyramid.router import Router
from pyramid.interfaces import IApplicationCreated
manager = DummyThreadLocalManager()
@@ -682,8 +843,29 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(manager.pushed['registry'], config.registry)
self.assertEqual(manager.pushed['request'], None)
self.assertTrue(manager.popped)
+ self.assertEqual(pyramid.config.global_registries.last, app.registry)
self.assertEqual(len(subscriber), 1)
self.assertTrue(IApplicationCreated.providedBy(subscriber[0]))
+ pyramid.config.global_registries.empty()
+
+ def test_global_registries_empty(self):
+ from pyramid.config import global_registries
+ self.assertEqual(global_registries.last, None)
+
+ def test_global_registries(self):
+ from pyramid.config import global_registries
+ global_registries.empty()
+ config1 = self._makeOne()
+ config1.make_wsgi_app()
+ self.assertEqual(global_registries.last, config1.registry)
+ config2 = self._makeOne()
+ config2.make_wsgi_app()
+ self.assertEqual(global_registries.last, config2.registry)
+ self.assertEqual(list(global_registries),
+ [config1.registry, config2.registry])
+ global_registries.remove(config2.registry)
+ self.assertEqual(global_registries.last, config1.registry)
+ global_registries.empty()
def test_include_with_dotted_name(self):
from pyramid import tests
@@ -767,12 +949,14 @@ class ConfiguratorTests(unittest.TestCase):
None, True, True)
def test_add_view_with_request_type(self):
+ from pyramid.renderers import null_renderer
from zope.interface import directlyProvides
from pyramid.interfaces import IRequest
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
config.add_view(view=view,
- request_type='pyramid.interfaces.IRequest')
+ request_type='pyramid.interfaces.IRequest',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = DummyRequest()
self._assertNotFound(wrapper, None, request)
@@ -798,29 +982,34 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper.__doc__, view.__doc__)
def test_add_view_view_callable_dottedname(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
- config.add_view(view='pyramid.tests.test_config.dummy_view')
+ config.add_view(view='pyramid.tests.test_config.dummy_view',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_with_function_callable(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
def test_add_view_with_function_callable_requestonly(self):
+ from pyramid.renderers import null_renderer
def view(request):
return 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
def test_add_view_with_decorator(self):
+ from pyramid.renderers import null_renderer
def view(request):
""" ABC """
return 'OK'
@@ -829,7 +1018,8 @@ class ConfiguratorTests(unittest.TestCase):
return fn(context, request)
return inner
config = self._makeOne(autocommit=True)
- config.add_view(view=view, decorator=view_wrapper)
+ config.add_view(view=view, decorator=view_wrapper,
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertFalse(wrapper is view)
self.assertEqual(wrapper.__doc__, view.__doc__)
@@ -858,30 +1048,33 @@ class ConfiguratorTests(unittest.TestCase):
assert_similar_datetime(expires, when)
def test_add_view_as_instance(self):
+ from pyramid.renderers import null_renderer
class AView:
def __call__(self, context, request):
""" """
return 'OK'
view = AView()
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
def test_add_view_as_instance_requestonly(self):
+ from pyramid.renderers import null_renderer
class AView:
def __call__(self, request):
""" """
return 'OK'
view = AView()
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
def test_add_view_as_oldstyle_class(self):
+ from pyramid.renderers import null_renderer
class view:
def __init__(self, context, request):
self.context = context
@@ -890,7 +1083,7 @@ class ConfiguratorTests(unittest.TestCase):
def __call__(self):
return 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
result = wrapper(None, request)
@@ -898,6 +1091,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(request.__view__.__class__, view)
def test_add_view_as_oldstyle_class_requestonly(self):
+ from pyramid.renderers import null_renderer
class view:
def __init__(self, request):
self.request = request
@@ -905,7 +1099,7 @@ class ConfiguratorTests(unittest.TestCase):
def __call__(self):
return 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
@@ -914,70 +1108,79 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(request.__view__.__class__, view)
def test_add_view_context_as_class(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
view = lambda *arg: 'OK'
class Foo:
pass
config = self._makeOne(autocommit=True)
- config.add_view(context=Foo, view=view)
+ config.add_view(context=Foo, view=view, renderer=null_renderer)
foo = implementedBy(Foo)
wrapper = self._getViewCallable(config, foo)
self.assertEqual(wrapper, view)
def test_add_view_context_as_iface(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(context=IDummy, view=view)
+ config.add_view(context=IDummy, view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config, IDummy)
self.assertEqual(wrapper, view)
def test_add_view_context_as_dottedname(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
config.add_view(context='pyramid.tests.test_config.IDummy',
- view=view)
+ view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config, IDummy)
self.assertEqual(wrapper, view)
def test_add_view_for__as_dottedname(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
config.add_view(for_='pyramid.tests.test_config.IDummy',
- view=view)
+ view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config, IDummy)
self.assertEqual(wrapper, view)
def test_add_view_for_as_class(self):
# ``for_`` is older spelling for ``context``
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
view = lambda *arg: 'OK'
class Foo:
pass
config = self._makeOne(autocommit=True)
- config.add_view(for_=Foo, view=view)
+ config.add_view(for_=Foo, view=view, renderer=null_renderer)
foo = implementedBy(Foo)
wrapper = self._getViewCallable(config, foo)
self.assertEqual(wrapper, view)
def test_add_view_for_as_iface(self):
# ``for_`` is older spelling for ``context``
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(for_=IDummy, view=view)
+ config.add_view(for_=IDummy, view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config, IDummy)
self.assertEqual(wrapper, view)
def test_add_view_context_trumps_for(self):
# ``for_`` is older spelling for ``context``
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
class Foo:
pass
- config.add_view(context=IDummy, for_=Foo, view=view)
+ config.add_view(context=IDummy, for_=Foo, view=view,
+ renderer=null_renderer)
wrapper = self._getViewCallable(config, IDummy)
self.assertEqual(wrapper, view)
def test_add_view_register_secured_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import ISecuredView
@@ -985,13 +1188,14 @@ class ConfiguratorTests(unittest.TestCase):
view = lambda *arg: 'OK'
view.__call_permissive__ = view
config = self._makeOne(autocommit=True)
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = config.registry.adapters.lookup(
(IViewClassifier, IRequest, Interface),
ISecuredView, name='', default=None)
self.assertEqual(wrapper, view)
def test_add_view_exception_register_secured_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -999,14 +1203,15 @@ class ConfiguratorTests(unittest.TestCase):
view = lambda *arg: 'OK'
view.__call_permissive__ = view
config = self._makeOne(autocommit=True)
- config.add_view(view=view, context=RuntimeError)
+ config.add_view(view=view, context=RuntimeError, renderer=null_renderer)
wrapper = config.registry.adapters.lookup(
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
IView, name='', default=None)
self.assertEqual(wrapper, view)
def test_add_view_same_phash_overrides_existing_single_view(self):
- from pyramid.compat import md5
+ from pyramid.renderers import null_renderer
+ from hashlib import md5
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1021,7 +1226,7 @@ class ConfiguratorTests(unittest.TestCase):
view, (IViewClassifier, IRequest, Interface), IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview, xhr=True)
+ config.add_view(view=newview, xhr=True, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertFalse(IMultiView.providedBy(wrapper))
request = DummyRequest()
@@ -1029,7 +1234,8 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_exc_same_phash_overrides_existing_single_view(self):
- from pyramid.compat import md5
+ from pyramid.renderers import null_renderer
+ from hashlib import md5
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1046,7 +1252,8 @@ class ConfiguratorTests(unittest.TestCase):
IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview, xhr=True, context=RuntimeError)
+ config.add_view(view=newview, xhr=True, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertFalse(IMultiView.providedBy(wrapper))
@@ -1055,6 +1262,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_default_phash_overrides_no_phash(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1066,7 +1274,7 @@ class ConfiguratorTests(unittest.TestCase):
view, (IViewClassifier, IRequest, Interface), IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview)
+ config.add_view(view=newview, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertFalse(IMultiView.providedBy(wrapper))
request = DummyRequest()
@@ -1074,6 +1282,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_exc_default_phash_overrides_no_phash(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1087,7 +1296,8 @@ class ConfiguratorTests(unittest.TestCase):
IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview, context=RuntimeError)
+ config.add_view(view=newview, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertFalse(IMultiView.providedBy(wrapper))
@@ -1096,6 +1306,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_default_phash_overrides_default_phash(self):
+ from pyramid.renderers import null_renderer
from pyramid.config import DEFAULT_PHASH
from zope.interface import Interface
from pyramid.interfaces import IRequest
@@ -1109,7 +1320,7 @@ class ConfiguratorTests(unittest.TestCase):
view, (IViewClassifier, IRequest, Interface), IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview)
+ config.add_view(view=newview, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertFalse(IMultiView.providedBy(wrapper))
request = DummyRequest()
@@ -1117,6 +1328,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_exc_default_phash_overrides_default_phash(self):
+ from pyramid.renderers import null_renderer
from pyramid.config import DEFAULT_PHASH
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
@@ -1132,7 +1344,8 @@ class ConfiguratorTests(unittest.TestCase):
IView, name='')
def newview(context, request):
return 'OK'
- config.add_view(view=newview, context=RuntimeError)
+ config.add_view(view=newview, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertFalse(IMultiView.providedBy(wrapper))
@@ -1141,6 +1354,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_multiview_replaces_existing_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1151,12 +1365,13 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(autocommit=True)
config.registry.registerAdapter(
view, (IViewClassifier, IRequest, Interface), IView, name='')
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_exc_multiview_replaces_existing_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1174,13 +1389,15 @@ class ConfiguratorTests(unittest.TestCase):
view,
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
IView, name='')
- config.add_view(view=view, context=RuntimeError)
+ config.add_view(view=view, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_multiview_replaces_existing_securedview(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import ISecuredView
@@ -1192,12 +1409,13 @@ class ConfiguratorTests(unittest.TestCase):
config.registry.registerAdapter(
view, (IViewClassifier, IRequest, Interface),
ISecuredView, name='')
- config.add_view(view=view)
+ config.add_view(view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_exc_multiview_replaces_existing_securedview(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import ISecuredView
@@ -1215,13 +1433,14 @@ class ConfiguratorTests(unittest.TestCase):
view,
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
ISecuredView, name='')
- config.add_view(view=view, context=RuntimeError)
+ config.add_view(view=view, context=RuntimeError, renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_with_accept_multiview_replaces_existing_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1234,7 +1453,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(autocommit=True)
config.registry.registerAdapter(
view, (IViewClassifier, IRequest, Interface), IView, name='')
- config.add_view(view=view2, accept='text/html')
+ config.add_view(view=view2, accept='text/html', renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(len(wrapper.views), 1)
@@ -1245,6 +1464,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK2')
def test_add_view_exc_with_accept_multiview_replaces_existing_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1264,7 +1484,8 @@ class ConfiguratorTests(unittest.TestCase):
view,
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
IView, name='')
- config.add_view(view=view2, accept='text/html', context=RuntimeError)
+ config.add_view(view=view2, accept='text/html', context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertTrue(IMultiView.providedBy(wrapper))
@@ -1276,6 +1497,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK2')
def test_add_view_multiview_replaces_existing_view_with___accept__(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1290,7 +1512,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(autocommit=True)
config.registry.registerAdapter(
view, (IViewClassifier, IRequest, Interface), IView, name='')
- config.add_view(view=view2)
+ config.add_view(view=view2, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual(len(wrapper.views), 1)
@@ -1301,6 +1523,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_exc_mulview_replaces_existing_view_with___accept__(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1322,7 +1545,8 @@ class ConfiguratorTests(unittest.TestCase):
view,
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
IView, name='')
- config.add_view(view=view2, context=RuntimeError)
+ config.add_view(view=view2, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertTrue(IMultiView.providedBy(wrapper))
@@ -1334,6 +1558,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_multiview_replaces_multiview(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IMultiView
@@ -1344,13 +1569,14 @@ class ConfiguratorTests(unittest.TestCase):
view, (IViewClassifier, IRequest, Interface),
IMultiView, name='')
view2 = lambda *arg: 'OK2'
- config.add_view(view=view2)
+ config.add_view(view=view2, renderer=null_renderer)
wrapper = self._getViewCallable(config)
self.assertTrue(IMultiView.providedBy(wrapper))
self.assertEqual([x[:2] for x in wrapper.views], [(view2, None)])
self.assertEqual(wrapper(None, None), 'OK1')
def test_add_view_exc_multiview_replaces_multiview(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IMultiView
@@ -1367,7 +1593,8 @@ class ConfiguratorTests(unittest.TestCase):
(IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)),
IMultiView, name='')
view2 = lambda *arg: 'OK2'
- config.add_view(view=view2, context=RuntimeError)
+ config.add_view(view=view2, context=RuntimeError,
+ renderer=null_renderer)
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError), exception_view=True)
self.assertTrue(IMultiView.providedBy(wrapper))
@@ -1375,6 +1602,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, None), 'OK1')
def test_add_view_multiview_context_superclass_then_subclass(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1389,7 +1617,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(autocommit=True)
config.registry.registerAdapter(
view, (IViewClassifier, IRequest, ISuper), IView, name='')
- config.add_view(view=view2, for_=ISub)
+ config.add_view(view=view2, for_=ISub, renderer=null_renderer)
wrapper = self._getViewCallable(config, ISuper, IRequest)
self.assertFalse(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK')
@@ -1398,6 +1626,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper(None, None), 'OK2')
def test_add_view_multiview_exception_superclass_then_subclass(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.interfaces import IView
@@ -1415,7 +1644,7 @@ class ConfiguratorTests(unittest.TestCase):
view, (IViewClassifier, IRequest, Super), IView, name='')
config.registry.registerAdapter(
view, (IExceptionViewClassifier, IRequest, Super), IView, name='')
- config.add_view(view=view2, for_=Sub)
+ config.add_view(view=view2, for_=Sub, renderer=null_renderer)
wrapper = self._getViewCallable(
config, implementedBy(Super), IRequest)
wrapper_exc_view = self._getViewCallable(
@@ -1432,6 +1661,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper_exc_view(None, None), 'OK2')
def test_add_view_multiview_call_ordering(self):
+ from pyramid.renderers import null_renderer as nr
from zope.interface import directlyProvides
def view1(context, request): return 'view1'
def view2(context, request): return 'view2'
@@ -1442,15 +1672,18 @@ class ConfiguratorTests(unittest.TestCase):
def view7(context, request): return 'view7'
def view8(context, request): return 'view8'
config = self._makeOne(autocommit=True)
- config.add_view(view=view1)
- config.add_view(view=view2, request_method='POST')
- config.add_view(view=view3,request_param='param')
- config.add_view(view=view4, containment=IDummy)
- config.add_view(view=view5, request_method='POST',request_param='param')
- config.add_view(view=view6, request_method='POST', containment=IDummy)
- config.add_view(view=view7, request_param='param', containment=IDummy)
+ config.add_view(view=view1, renderer=nr)
+ config.add_view(view=view2, request_method='POST', renderer=nr)
+ config.add_view(view=view3,request_param='param', renderer=nr)
+ config.add_view(view=view4, containment=IDummy, renderer=nr)
+ config.add_view(view=view5, request_method='POST',
+ request_param='param', renderer=nr)
+ config.add_view(view=view6, request_method='POST', containment=IDummy,
+ renderer=nr)
+ config.add_view(view=view7, request_param='param', containment=IDummy,
+ renderer=nr)
config.add_view(view=view8, request_method='POST',request_param='param',
- containment=IDummy)
+ containment=IDummy, renderer=nr)
wrapper = self._getViewCallable(config)
@@ -1574,11 +1807,12 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(result.settings, settings)
def test_add_view_with_request_type_as_iface(self):
+ from pyramid.renderers import null_renderer
from zope.interface import directlyProvides
def view(context, request):
return 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(request_type=IDummy, view=view)
+ config.add_view(request_type=IDummy, view=view, renderer=null_renderer)
wrapper = self._getViewCallable(config, None)
request = self._makeRequest(config)
directlyProvides(request, IDummy)
@@ -1593,10 +1827,11 @@ class ConfiguratorTests(unittest.TestCase):
config.add_view, view, '', None, None, object)
def test_add_view_with_route_name(self):
+ from pyramid.renderers import null_renderer
from zope.component import ComponentLookupError
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, route_name='foo')
+ config.add_view(view=view, route_name='foo', renderer=null_renderer)
self.assertEqual(len(config.registry.deferred_route_views), 1)
infos = config.registry.deferred_route_views['foo']
self.assertEqual(len(infos), 1)
@@ -1636,11 +1871,13 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(info['custom_predicates'], ('123',))
def test_add_view_with_route_name_exception(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from zope.component import ComponentLookupError
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, route_name='foo', context=RuntimeError)
+ config.add_view(view=view, route_name='foo', context=RuntimeError,
+ renderer=null_renderer)
self.assertEqual(len(config.registry.deferred_route_views), 1)
infos = config.registry.deferred_route_views['foo']
self.assertEqual(len(infos), 1)
@@ -1667,9 +1904,11 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(wrapper_exc_view(None, None), 'OK')
def test_add_view_with_request_method_true(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, request_method='POST')
+ config.add_view(view=view, request_method='POST',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.method = 'POST'
@@ -1685,9 +1924,10 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_request_param_noval_true(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, request_param='abc')
+ config.add_view(view=view, request_param='abc', renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.params = {'abc':''}
@@ -1703,9 +1943,11 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_request_param_val_true(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, request_param='abc=123')
+ config.add_view(view=view, request_param='abc=123',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.params = {'abc':'123'}
@@ -1721,9 +1963,10 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_xhr_true(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, xhr=True)
+ config.add_view(view=view, xhr=True, renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.is_xhr = True
@@ -1746,9 +1989,10 @@ class ConfiguratorTests(unittest.TestCase):
config.add_view, view=view, header='Host:a\\')
def test_add_view_with_header_noval_match(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, header='Host')
+ config.add_view(view=view, header='Host', renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.headers = {'Host':'whatever'}
@@ -1764,9 +2008,10 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_header_val_match(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, header=r'Host:\d')
+ config.add_view(view=view, header=r'Host:\d', renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.headers = {'Host':'1'}
@@ -1792,9 +2037,10 @@ class ConfiguratorTests(unittest.TestCase):
self.assertRaises(HTTPNotFound, wrapper, None, request)
def test_add_view_with_accept_match(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, accept='text/xml')
+ config.add_view(view=view, accept='text/xml', renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.accept = ['text/xml']
@@ -1810,10 +2056,11 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_containment_true(self):
+ from pyramid.renderers import null_renderer
from zope.interface import directlyProvides
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, containment=IDummy)
+ config.add_view(view=view, containment=IDummy, renderer=null_renderer)
wrapper = self._getViewCallable(config)
context = DummyContext()
directlyProvides(context, IDummy)
@@ -1828,12 +2075,14 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, context, None)
def test_add_view_with_containment_dottedname(self):
+ from pyramid.renderers import null_renderer
from zope.interface import directlyProvides
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
config.add_view(
view=view,
- containment='pyramid.tests.test_config.IDummy')
+ containment='pyramid.tests.test_config.IDummy',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
context = DummyContext()
directlyProvides(context, IDummy)
@@ -1847,9 +2096,10 @@ class ConfiguratorTests(unittest.TestCase):
config.add_view, view=view, path_info='\\')
def test_add_view_with_path_info_match(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, path_info='/foo')
+ config.add_view(view=view, path_info='/foo', renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.path_info = '/foo'
@@ -1865,6 +2115,7 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_with_custom_predicates_match(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
config = self._makeOne(autocommit=True)
def pred1(context, request):
@@ -1872,7 +2123,8 @@ class ConfiguratorTests(unittest.TestCase):
def pred2(context, request):
return True
predicates = (pred1, pred2)
- config.add_view(view=view, custom_predicates=predicates)
+ config.add_view(view=view, custom_predicates=predicates,
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
self.assertEqual(wrapper(None, request), 'OK')
@@ -1891,24 +2143,30 @@ class ConfiguratorTests(unittest.TestCase):
self._assertNotFound(wrapper, None, request)
def test_add_view_custom_predicate_bests_standard_predicate(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
view2 = lambda *arg: 'NOT OK'
config = self._makeOne(autocommit=True)
def pred1(context, request):
return True
- config.add_view(view=view, custom_predicates=(pred1,))
- config.add_view(view=view2, request_method='GET')
+ config.add_view(view=view, custom_predicates=(pred1,),
+ renderer=null_renderer)
+ config.add_view(view=view2, request_method='GET',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.method = 'GET'
self.assertEqual(wrapper(None, request), 'OK')
def test_add_view_custom_more_preds_first_bests_fewer_preds_last(self):
+ from pyramid.renderers import null_renderer
view = lambda *arg: 'OK'
view2 = lambda *arg: 'NOT OK'
config = self._makeOne(autocommit=True)
- config.add_view(view=view, request_method='GET', xhr=True)
- config.add_view(view=view2, request_method='GET')
+ config.add_view(view=view, request_method='GET', xhr=True,
+ renderer=null_renderer)
+ config.add_view(view=view2, request_method='GET',
+ renderer=null_renderer)
wrapper = self._getViewCallable(config)
request = self._makeRequest(config)
request.method = 'GET'
@@ -1925,6 +2183,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertRaises(ConfigurationConflictError, config.commit)
def test_add_view_with_permission(self):
+ from pyramid.renderers import null_renderer
view1 = lambda *arg: 'OK'
outerself = self
class DummyPolicy(object):
@@ -1940,12 +2199,13 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne(authorization_policy=policy,
authentication_policy=policy,
autocommit=True)
- config.add_view(view=view1, permission='view')
+ config.add_view(view=view1, permission='view', renderer=null_renderer)
view = self._getViewCallable(config)
request = self._makeRequest(config)
self.assertEqual(view(None, request), 'OK')
def test_add_view_with_default_permission_no_explicit_permission(self):
+ from pyramid.renderers import null_renderer
view1 = lambda *arg: 'OK'
outerself = self
class DummyPolicy(object):
@@ -1962,19 +2222,20 @@ class ConfiguratorTests(unittest.TestCase):
authentication_policy=policy,
default_permission='view',
autocommit=True)
- config.add_view(view=view1)
+ config.add_view(view=view1, renderer=null_renderer)
view = self._getViewCallable(config)
request = self._makeRequest(config)
self.assertEqual(view(None, request), 'OK')
def test_add_view_with_no_default_permission_no_explicit_permission(self):
+ from pyramid.renderers import null_renderer
view1 = lambda *arg: 'OK'
class DummyPolicy(object): pass # wont be called
policy = DummyPolicy()
config = self._makeOne(authorization_policy=policy,
authentication_policy=policy,
autocommit=True)
- config.add_view(view=view1)
+ config.add_view(view=view1, renderer=null_renderer)
view = self._getViewCallable(config)
request = self._makeRequest(config)
self.assertEqual(view(None, request), 'OK')
@@ -2018,6 +2279,13 @@ class ConfiguratorTests(unittest.TestCase):
self._assertRoute(config, 'name', 'root/path')
+ def test_add_route_discriminator(self):
+ config = self._makeOne()
+ route = config.add_route('name', 'path')
+ self._assertRoute(config, 'name', 'path')
+ self.assertEqual(route.name, 'name')
+ self.assertEqual(config._ctx.actions[-1][0], ('route', 'name'))
+
def test_add_route_with_factory(self):
config = self._makeOne(autocommit=True)
factory = object()
@@ -2176,17 +2444,19 @@ class ConfiguratorTests(unittest.TestCase):
raise AssertionError
def test_derive_view_function(self):
+ from pyramid.renderers import null_renderer
def view(request):
return 'OK'
config = self._makeOne()
- result = config.derive_view(view)
+ result = config.derive_view(view, renderer=null_renderer)
self.assertFalse(result is view)
self.assertEqual(result(None, None), 'OK')
def test_derive_view_dottedname(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne()
result = config.derive_view(
- 'pyramid.tests.test_config.dummy_view')
+ 'pyramid.tests.test_config.dummy_view', renderer=null_renderer)
self.assertFalse(result is dummy_view)
self.assertEqual(result(None, None), 'OK')
@@ -2279,18 +2549,21 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(config._ctx.info, 'abc')
def test_add_static_here_no_utility_registered(self):
+ from pyramid.renderers import null_renderer
from zope.interface import Interface
from pyramid.static import PackageURLParser
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
config = self._makeOne(autocommit=True)
- config.add_static_view('static', 'fixtures/static')
+ config.add_static_view('static', 'fixtures/static',
+ renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'static/')
self._assertRoute(config, 'static/', 'static/*subpath')
wrapped = config.registry.adapters.lookup(
(IViewClassifier, request_type, Interface), IView, name='')
request = self._makeRequest(config)
- self.assertEqual(wrapped(None, request).__class__, PackageURLParser)
+ result = wrapped(None, request)
+ self.assertEqual(result.__class__, PackageURLParser)
def test_add_static_view_package_relative(self):
from pyramid.interfaces import IStaticURLInfo
@@ -2323,12 +2596,13 @@ class ConfiguratorTests(unittest.TestCase):
[('static', static_path, {})])
def test_set_notfound_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.httpexceptions import HTTPNotFound
config = self._makeOne(autocommit=True)
view = lambda *arg: arg
- config.set_notfound_view(view)
+ config.set_notfound_view(view, renderer=null_renderer)
request = self._makeRequest(config)
view = self._getViewCallable(config,
ctx_iface=implementedBy(HTTPNotFound),
@@ -2337,12 +2611,13 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(result, (None, request))
def test_set_notfound_view_request_has_context(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.httpexceptions import HTTPNotFound
config = self._makeOne(autocommit=True)
view = lambda *arg: arg
- config.set_notfound_view(view)
+ config.set_notfound_view(view, renderer=null_renderer)
request = self._makeRequest(config)
request.context = 'abc'
view = self._getViewCallable(config,
@@ -2372,12 +2647,13 @@ class ConfiguratorTests(unittest.TestCase):
self.assertTrue('div' in result.body)
def test_set_forbidden_view(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.httpexceptions import HTTPForbidden
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.set_forbidden_view(view)
+ config.set_forbidden_view(view, renderer=null_renderer)
request = self._makeRequest(config)
view = self._getViewCallable(config,
ctx_iface=implementedBy(HTTPForbidden),
@@ -2386,12 +2662,13 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(result, 'OK')
def test_set_forbidden_view_request_has_context(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
from pyramid.interfaces import IRequest
from pyramid.httpexceptions import HTTPForbidden
config = self._makeOne(autocommit=True)
view = lambda *arg: arg
- config.set_forbidden_view(view)
+ config.set_forbidden_view(view, renderer=null_renderer)
request = self._makeRequest(config)
request.context = 'abc'
view = self._getViewCallable(config,
@@ -2870,6 +3147,11 @@ class ConfiguratorTests(unittest.TestCase):
result = render_view_to_response(ctx, req, '')
self.assertEqual(result, 'grokked')
+ def test_scan_integration_with_extra_kw(self):
+ config = self._makeOne(autocommit=True)
+ config.scan('pyramid.tests.venusianapp', a=1)
+ self.assertEqual(config.a, 1)
+
def test_testing_securitypolicy(self):
from pyramid.testing import DummySecurityPolicy
config = self._makeOne(autocommit=True)
@@ -3111,13 +3393,14 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(registeredview.__name__, 'view3')
def test_autocommit_no_conflicts(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
def view1(request): pass
def view2(request): pass
def view3(request): pass
- config.add_view(view1)
- config.add_view(view2)
- config.add_view(view3)
+ config.add_view(view1, renderer=null_renderer)
+ config.add_view(view2, renderer=null_renderer)
+ config.add_view(view3, renderer=null_renderer)
config.commit()
registeredview = self._getViewCallable(config)
self.assertEqual(registeredview.__name__, 'view3')
@@ -3212,8 +3495,10 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
def _makeOne(self, *arg, **kw):
from pyramid.config import Configurator
- return Configurator(*arg, **kw)
-
+ config = Configurator(*arg, **kw)
+ config.registry._dont_resolve_responses = True
+ return config
+
def _getRouteRequestIface(self, config, name):
from pyramid.interfaces import IRouteRequest
iface = config.registry.getUtility(IRouteRequest, name)
@@ -3271,18 +3556,21 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
yield confinst[2]
def test_add_route_with_view(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.add_route('name', 'path', view=view)
+ config.add_route('name', 'path', view=view, view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(config, None, request_type)
self.assertEqual(wrapper(None, None), 'OK')
self._assertRoute(config, 'name', 'path')
def test_add_route_with_view_context(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.add_route('name', 'path', view=view, view_context=IDummy)
+ config.add_route('name', 'path', view=view, view_context=IDummy,
+ view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(config, IDummy, request_type)
self.assertEqual(wrapper(None, None), 'OK')
@@ -3291,10 +3579,12 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
self.assertEqual(wrapper, None)
def test_add_route_with_view_exception(self):
+ from pyramid.renderers import null_renderer
from zope.interface import implementedBy
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.add_route('name', 'path', view=view, view_context=RuntimeError)
+ config.add_route('name', 'path', view=view, view_context=RuntimeError,
+ view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(
config, ctx_iface=implementedBy(RuntimeError),
@@ -3307,9 +3597,11 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
self.assertEqual(wrapper, None)
def test_add_route_with_view_for(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.add_route('name', 'path', view=view, view_for=IDummy)
+ config.add_route('name', 'path', view=view, view_for=IDummy,
+ view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(config, IDummy, request_type)
self.assertEqual(wrapper(None, None), 'OK')
@@ -3318,9 +3610,11 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
self.assertEqual(wrapper, None)
def test_add_route_with_for_(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
view = lambda *arg: 'OK'
- config.add_route('name', 'path', view=view, for_=IDummy)
+ config.add_route('name', 'path', view=view, for_=IDummy,
+ view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(config, IDummy, request_type)
self.assertEqual(wrapper(None, None), 'OK')
@@ -3340,6 +3634,7 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
self.assertEqual(wrapper(None, None).body, 'Hello!')
def test_add_route_with_view_attr(self):
+ from pyramid.renderers import null_renderer
config = self._makeOne(autocommit=True)
self._registerRenderer(config)
class View(object):
@@ -3347,7 +3642,8 @@ class TestConfiguratorDeprecatedFeatures(unittest.TestCase):
pass
def alt(self):
return 'OK'
- config.add_route('name', 'path', view=View, view_attr='alt')
+ config.add_route('name', 'path', view=View, view_attr='alt',
+ view_renderer=null_renderer)
request_type = self._getRouteRequestIface(config, 'name')
wrapper = self._getViewCallable(config, None, request_type)
self._assertRoute(config, 'name', 'path')
@@ -3520,29 +3816,31 @@ class TestViewDeriver(unittest.TestCase):
self.config.registry.registerUtility(policy, IAuthorizationPolicy)
def test_requestonly_function(self):
+ response = DummyResponse()
def view(request):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
- self.assertEqual(result(None, None), 'OK')
+ self.assertEqual(result(None, None), response)
def test_requestonly_function_with_renderer(self):
+ response = DummyResponse()
class moo(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, 'OK')
self.assertEqual(view_inst, view)
self.assertEqual(ctx, context)
- return 'moo'
+ return response
def view(request):
return 'OK'
deriver = self._makeOne(renderer=moo())
result = deriver(view)
- self.assertFalse(result is view)
+ self.assertFalse(result.__wraps__ is view)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), 'moo')
+ self.assertEqual(result(context, request), response)
def test_requestonly_function_with_renderer_request_override(self):
def moo(info):
@@ -3564,46 +3862,50 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result(context, request).body, 'moo')
def test_requestonly_function_with_renderer_request_has_view(self):
+ response = DummyResponse()
class moo(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, 'OK')
self.assertEqual(view_inst, 'view')
self.assertEqual(ctx, context)
- return 'moo'
+ return response
def view(request):
return 'OK'
deriver = self._makeOne(renderer=moo())
result = deriver(view)
- self.assertFalse(result is view)
+ self.assertFalse(result.__wraps__ is view)
request = self._makeRequest()
request.__view__ = 'view'
context = testing.DummyResource()
- self.assertEqual(result(context, request), 'moo')
+ r = result(context, request)
+ self.assertEqual(r, response)
self.assertFalse(hasattr(request, '__view__'))
def test_class_without_attr(self):
+ response = DummyResponse()
class View(object):
def __init__(self, request):
pass
def __call__(self):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(View)
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, View)
def test_class_with_attr(self):
+ response = DummyResponse()
class View(object):
def __init__(self, request):
pass
def another(self):
- return 'OK'
+ return response
deriver = self._makeOne(attr='another')
result = deriver(View)
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, View)
def test_as_function_context_and_request(self):
@@ -3611,13 +3913,14 @@ class TestViewDeriver(unittest.TestCase):
return 'OK'
deriver = self._makeOne()
result = deriver(view)
- self.assertTrue(result is view)
+ self.assertTrue(result.__wraps__ is view)
self.assertFalse(hasattr(result, '__call_permissive__'))
self.assertEqual(view(None, None), 'OK')
def test_as_function_requestonly(self):
+ response = DummyResponse()
def view(request):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
@@ -3625,14 +3928,15 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
- self.assertEqual(result(None, None), 'OK')
+ self.assertEqual(result(None, None), response)
def test_as_newstyle_class_context_and_request(self):
+ response = DummyResponse()
class view(object):
def __init__(self, context, request):
pass
def __call__(self):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
@@ -3641,15 +3945,16 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__name__, result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, view)
def test_as_newstyle_class_requestonly(self):
+ response = DummyResponse()
class view(object):
def __init__(self, context, request):
pass
def __call__(self):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
@@ -3658,15 +3963,16 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__name__, result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, view)
def test_as_oldstyle_class_context_and_request(self):
+ response = DummyResponse()
class view:
def __init__(self, context, request):
pass
def __call__(self):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
@@ -3675,15 +3981,16 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__name__, result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, view)
def test_as_oldstyle_class_requestonly(self):
+ response = DummyResponse()
class view:
def __init__(self, context, request):
pass
def __call__(self):
- return 'OK'
+ return response
deriver = self._makeOne()
result = deriver(view)
self.assertFalse(result is view)
@@ -3692,24 +3999,26 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__name__, result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
request = self._makeRequest()
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(request.__view__.__class__, view)
def test_as_instance_context_and_request(self):
+ response = DummyResponse()
class View:
def __call__(self, context, request):
- return 'OK'
+ return response
view = View()
deriver = self._makeOne()
result = deriver(view)
- self.assertTrue(result is view)
+ self.assertTrue(result.__wraps__ is view)
self.assertFalse(hasattr(result, '__call_permissive__'))
- self.assertEqual(result(None, None), 'OK')
+ self.assertEqual(result(None, None), response)
def test_as_instance_requestonly(self):
+ response = DummyResponse()
class View:
def __call__(self, request):
- return 'OK'
+ return response
view = View()
deriver = self._makeOne()
result = deriver(view)
@@ -3718,10 +4027,11 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__doc__, result.__doc__)
self.assertTrue('instance' in result.__name__)
self.assertFalse(hasattr(result, '__call_permissive__'))
- self.assertEqual(result(None, None), 'OK')
+ self.assertEqual(result(None, None), response)
def test_with_debug_authorization_no_authpol(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
logger = self._registerLogger()
@@ -3734,7 +4044,7 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
@@ -3742,7 +4052,8 @@ class TestViewDeriver(unittest.TestCase):
"(no authorization policy in use)")
def test_with_debug_authorization_authn_policy_no_authz_policy(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(debug_authorization=True)
from pyramid.interfaces import IAuthenticationPolicy
policy = DummySecurityPolicy(False)
@@ -3757,7 +4068,7 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
@@ -3765,7 +4076,8 @@ class TestViewDeriver(unittest.TestCase):
"(no authorization policy in use)")
def test_with_debug_authorization_authz_policy_no_authn_policy(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(debug_authorization=True)
from pyramid.interfaces import IAuthorizationPolicy
policy = DummySecurityPolicy(False)
@@ -3780,7 +4092,7 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
@@ -3788,7 +4100,8 @@ class TestViewDeriver(unittest.TestCase):
"(no authorization policy in use)")
def test_with_debug_authorization_no_permission(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
self._registerSecurityPolicy(True)
@@ -3802,7 +4115,7 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
@@ -3810,7 +4123,8 @@ class TestViewDeriver(unittest.TestCase):
"no permission registered)")
def test_debug_auth_permission_authpol_permitted(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
logger = self._registerLogger()
@@ -3820,18 +4134,19 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
- self.assertEqual(result.__call_permissive__, view)
+ self.assertEqual(result.__call_permissive__.__wraps__, view)
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
"'view_name' against context None): True")
def test_debug_auth_permission_authpol_permitted_no_request(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
logger = self._registerLogger()
@@ -3841,8 +4156,8 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
- self.assertEqual(result.__call_permissive__, view)
- self.assertEqual(result(None, None), 'OK')
+ self.assertEqual(result.__call_permissive__.__wraps__, view)
+ self.assertEqual(result(None, None), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url None (view name "
@@ -3850,7 +4165,8 @@ class TestViewDeriver(unittest.TestCase):
def test_debug_auth_permission_authpol_denied(self):
from pyramid.httpexceptions import HTTPForbidden
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
logger = self._registerLogger()
@@ -3860,7 +4176,7 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
- self.assertEqual(result.__call_permissive__, view)
+ self.assertEqual(result.__call_permissive__.__wraps__, view)
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
@@ -3888,12 +4204,14 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(permitted, False)
def test_debug_auth_permission_authpol_overridden(self):
- view = lambda *arg: 'OK'
+ from pyramid.security import NO_PERMISSION_REQUIRED
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = dict(
debug_authorization=True, reload_templates=True)
logger = self._registerLogger()
self._registerSecurityPolicy(False)
- deriver = self._makeOne(permission='__no_permission_required__')
+ deriver = self._makeOne(permission=NO_PERMISSION_REQUIRED)
result = deriver(view)
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
@@ -3902,14 +4220,15 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
self.assertEqual(len(logger.messages), 1)
self.assertEqual(logger.messages[0],
"debug_authorization of url url (view name "
"'view_name' against context None): False")
def test_secured_view_authn_policy_no_authz_policy(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = {}
from pyramid.interfaces import IAuthenticationPolicy
policy = DummySecurityPolicy(False)
@@ -3923,10 +4242,11 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
def test_secured_view_authz_policy_no_authn_policy(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
self.config.registry.settings = {}
from pyramid.interfaces import IAuthorizationPolicy
policy = DummySecurityPolicy(False)
@@ -3940,10 +4260,11 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.view_name = 'view_name'
request.url = 'url'
- self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(result(None, request), response)
def test_with_predicates_all(self):
- view = lambda *arg: 'OK'
+ response = DummyResponse()
+ view = lambda *arg: response
predicates = []
def predicate1(context, request):
predicates.append(True)
@@ -3956,7 +4277,7 @@ class TestViewDeriver(unittest.TestCase):
request = self._makeRequest()
request.method = 'POST'
next = result(None, None)
- self.assertEqual(next, 'OK')
+ self.assertEqual(next, response)
self.assertEqual(predicates, [True, True])
def test_with_predicates_checker(self):
@@ -3994,7 +4315,7 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(predicates, [True, True])
def test_with_wrapper_viewname(self):
- from webob import Response
+ from pyramid.response import Response
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
inner_response = Response('OK')
@@ -4003,7 +4324,8 @@ class TestViewDeriver(unittest.TestCase):
def outer_view(context, request):
self.assertEqual(request.wrapped_response, inner_response)
self.assertEqual(request.wrapped_body, inner_response.body)
- self.assertEqual(request.wrapped_view, inner_view)
+ self.assertEqual(request.wrapped_view.__original_view__,
+ inner_view)
return Response('outer ' + request.wrapped_body)
self.config.registry.registerAdapter(
outer_view, (IViewClassifier, None, None), IView, 'owrap')
@@ -4018,7 +4340,7 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(response.body, 'outer OK')
def test_with_wrapper_viewname_notfound(self):
- from webob import Response
+ from pyramid.response import Response
inner_response = Response('OK')
def inner_view(context, request):
return inner_response
@@ -4028,13 +4350,14 @@ class TestViewDeriver(unittest.TestCase):
self.assertRaises(ValueError, wrapped, None, request)
def test_as_newstyle_class_context_and_request_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst.__class__, View)
self.assertEqual(ctx, context)
- return resp
+ return response
class View(object):
def __init__(self, context, request):
pass
@@ -4048,16 +4371,17 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__name__, View.__name__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_as_newstyle_class_requestonly_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst.__class__, View)
self.assertEqual(ctx, context)
- return resp
+ return response
class View(object):
def __init__(self, request):
pass
@@ -4071,16 +4395,17 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__name__, View.__name__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_as_oldstyle_cls_context_request_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst.__class__, View)
self.assertEqual(ctx, context)
- return resp
+ return response
class View:
def __init__(self, context, request):
pass
@@ -4094,16 +4419,17 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__name__, View.__name__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_as_oldstyle_cls_requestonly_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst.__class__, View)
self.assertEqual(ctx, context)
- return resp
+ return response
class View:
def __init__(self, request):
pass
@@ -4117,16 +4443,17 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__name__, View.__name__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_as_instance_context_and_request_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst, view)
self.assertEqual(ctx, context)
- return resp
+ return response
class View:
def index(self, context, request):
return {'a':'1'}
@@ -4138,16 +4465,17 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__doc__, view.__doc__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_as_instance_requestonly_attr_and_renderer(self):
+ response = DummyResponse()
class renderer(object):
def render_view(inself, req, resp, view_inst, ctx):
self.assertEqual(req, request)
self.assertEqual(resp, {'a':'1'})
self.assertEqual(view_inst, view)
self.assertEqual(ctx, context)
- return resp
+ return response
class View:
def index(self, request):
return {'a':'1'}
@@ -4159,58 +4487,63 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(result.__doc__, view.__doc__)
request = self._makeRequest()
context = testing.DummyResource()
- self.assertEqual(result(context, request), {'a':'1'})
+ self.assertEqual(result(context, request), response)
def test_with_view_mapper_config_specified(self):
+ response = DummyResponse()
class mapper(object):
def __init__(self, **kw):
self.kw = kw
def __call__(self, view):
def wrapped(context, request):
- return 'OK'
+ return response
return wrapped
def view(context, request): return 'NOTOK'
deriver = self._makeOne(mapper=mapper)
result = deriver(view)
- self.assertFalse(result is view)
- self.assertEqual(result(None, None), 'OK')
+ self.assertFalse(result.__wraps__ is view)
+ self.assertEqual(result(None, None), response)
def test_with_view_mapper_view_specified(self):
+ from pyramid.response import Response
+ response = Response()
def mapper(**kw):
def inner(view):
def superinner(context, request):
self.assertEqual(request, None)
- return 'OK'
+ return response
return superinner
return inner
def view(context, request): return 'NOTOK'
view.__view_mapper__ = mapper
deriver = self._makeOne()
result = deriver(view)
- self.assertFalse(result is view)
- self.assertEqual(result(None, None), 'OK')
+ self.assertFalse(result.__wraps__ is view)
+ self.assertEqual(result(None, None), response)
def test_with_view_mapper_default_mapper_specified(self):
+ from pyramid.response import Response
+ response = Response()
def mapper(**kw):
def inner(view):
def superinner(context, request):
self.assertEqual(request, None)
- return 'OK'
+ return response
return superinner
return inner
self.config.set_view_mapper(mapper)
def view(context, request): return 'NOTOK'
deriver = self._makeOne()
result = deriver(view)
- self.assertFalse(result is view)
- self.assertEqual(result(None, None), 'OK')
+ self.assertFalse(result.__wraps__ is view)
+ self.assertEqual(result(None, None), response)
def test_attr_wrapped_view_branching_default_phash(self):
from pyramid.config import DEFAULT_PHASH
def view(context, request): pass
deriver = self._makeOne(phash=DEFAULT_PHASH)
result = deriver(view)
- self.assertEqual(result, view)
+ self.assertEqual(result.__wraps__, view)
def test_attr_wrapped_view_branching_nondefault_phash(self):
def view(context, request): pass
@@ -4220,7 +4553,7 @@ class TestViewDeriver(unittest.TestCase):
def test_http_cached_view_integer(self):
import datetime
- from webob import Response
+ from pyramid.response import Response
response = Response('OK')
def inner_view(context, request):
return response
@@ -4240,7 +4573,7 @@ class TestViewDeriver(unittest.TestCase):
def test_http_cached_view_timedelta(self):
import datetime
- from webob import Response
+ from pyramid.response import Response
response = Response('OK')
def inner_view(context, request):
return response
@@ -4260,7 +4593,7 @@ class TestViewDeriver(unittest.TestCase):
def test_http_cached_view_tuple(self):
import datetime
- from webob import Response
+ from pyramid.response import Response
response = Response('OK')
def inner_view(context, request):
return response
@@ -4279,7 +4612,7 @@ class TestViewDeriver(unittest.TestCase):
self.assertEqual(headers['Cache-Control'], 'max-age=3600, public')
def test_http_cached_view_tuple_seconds_None(self):
- from webob import Response
+ from pyramid.response import Response
response = Response('OK')
def inner_view(context, request):
return response
@@ -4295,17 +4628,35 @@ class TestViewDeriver(unittest.TestCase):
self.assertFalse('Expires' in headers)
self.assertEqual(headers['Cache-Control'], 'public')
- def test_http_cached_view_nonresponse_object_returned_downstream(self):
+ def test_http_cached_view_prevent_auto_set(self):
+ from pyramid.response import Response
+ response = Response()
+ response.cache_control.prevent_auto = True
def inner_view(context, request):
- return None
+ return response
deriver = self._makeOne(http_cache=3600)
result = deriver(inner_view)
- self.assertFalse(result is inner_view)
- self.assertEqual(inner_view.__module__, result.__module__)
- self.assertEqual(inner_view.__doc__, result.__doc__)
request = self._makeRequest()
result = result(None, request)
- self.assertEqual(result, None) # doesn't blow up
+ self.assertEqual(result, response) # doesn't blow up
+ headers = dict(result.headerlist)
+ self.assertFalse('Expires' in headers)
+ self.assertFalse('Cache-Control' in headers)
+
+ def test_http_cached_prevent_http_cache_in_settings(self):
+ self.config.registry.settings['prevent_http_cache'] = True
+ from pyramid.response import Response
+ response = Response()
+ def inner_view(context, request):
+ return response
+ deriver = self._makeOne(http_cache=3600)
+ result = deriver(inner_view)
+ request = self._makeRequest()
+ result = result(None, request)
+ self.assertEqual(result, response)
+ headers = dict(result.headerlist)
+ self.assertFalse('Expires' in headers)
+ self.assertFalse('Cache-Control' in headers)
def test_http_cached_view_bad_tuple(self):
from pyramid.exceptions import ConfigurationError
@@ -5392,6 +5743,11 @@ def dummyfactory(request):
""" """
def dummy_include(config):
+ config.registry.included = True
+ config.action('discrim', None, config.package)
+
+def dummy_include2(config):
+ config.registry.also_included = True
config.action('discrim', None, config.package)
includeme = dummy_include
@@ -5419,9 +5775,19 @@ class DummyRegistry(object):
def parse_httpdate(s):
import datetime
- return datetime.datetime.strptime(s, "%a, %d %b %Y %H:%M:%S %Z")
+ # cannot use %Z, must use literal GMT; Jython honors timezone
+ # but CPython does not
+ return datetime.datetime.strptime(s, "%a, %d %b %Y %H:%M:%S GMT")
def assert_similar_datetime(one, two):
for attr in ('year', 'month', 'day', 'hour', 'minute'):
- assert(getattr(one, attr) == getattr(two, attr))
+ one_attr = getattr(one, attr)
+ two_attr = getattr(two, attr)
+ if not one_attr == two_attr: # pragma: no cover
+ raise AssertionError('%r != %r in %s' % (one_attr, two_attr, attr))
+
+from pyramid.interfaces import IResponse
+class DummyResponse(object):
+ implements(IResponse)
+def dummy_tween_factory(handler, registry): pass