summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-07-13 18:31:41 -0400
committerChris McDonough <chrism@plope.com>2011-07-13 18:31:41 -0400
commit2ad827b4c67111f76e9c2fb54d082a50eb2b4c23 (patch)
tree8c9b57d5e6ad3de5719ffe795c18ff733c6c2fb9
parentd4ccb85f76f38400eaf90b40ccbc56b017e3a6bd (diff)
downloadpyramid-2ad827b4c67111f76e9c2fb54d082a50eb2b4c23.tar.gz
pyramid-2ad827b4c67111f76e9c2fb54d082a50eb2b4c23.tar.bz2
pyramid-2ad827b4c67111f76e9c2fb54d082a50eb2b4c23.zip
- Fix corner case to ease semifunctional testing of views: create a new
rendererinfo to clear out old registry on a rescan. See https://github.com/Pylons/pyramid/pull/234. Closes #234.
-rw-r--r--CHANGES.txt10
-rw-r--r--pyramid/tests/test_view.py29
-rw-r--r--pyramid/view.py7
3 files changed, 44 insertions, 2 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index c2c0cc86a..cd9f42dd9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,13 @@
+Next release
+============
+
+Features
+--------
+
+- Fix corner case to ease semifunctional testing of views: create a new
+ rendererinfo to clear out old registry on a rescan. See
+ https://github.com/Pylons/pyramid/pull/234.
+
1.1b2 (2011-07-13)
==================
diff --git a/pyramid/tests/test_view.py b/pyramid/tests/test_view.py
index 6bb3b01a0..d46cfb3f5 100644
--- a/pyramid/tests/test_view.py
+++ b/pyramid/tests/test_view.py
@@ -395,6 +395,30 @@ class TestViewConfigDecorator(unittest.TestCase):
self.assertEqual(len(settings), 1)
self.assertEqual(settings[0]['renderer'], {'a':1})
+ def test_call_with_renderer_IRendererInfo(self):
+ # see https://github.com/Pylons/pyramid/pull/234
+ from pyramid.interfaces import IRendererInfo
+ import pyramid.tests
+ class DummyRendererHelper(object):
+ implements(IRendererInfo)
+ name = 'fixtures/minimal.pt'
+ package = pyramid.tests
+ renderer_helper = DummyRendererHelper()
+ decorator = self._makeOne(renderer=renderer_helper)
+ venusian = DummyVenusian()
+ decorator.venusian = venusian
+ def foo(): pass
+ wrapped = decorator(foo)
+ self.assertTrue(wrapped is foo)
+ context = DummyVenusianContext()
+ settings = call_venusian(venusian, context)
+ self.assertEqual(len(settings), 1)
+ renderer = settings[0]['renderer']
+ self.assertFalse(renderer is renderer_helper)
+ self.assertEqual(renderer.name, 'fixtures/minimal.pt')
+ self.assertEqual(renderer.package, pyramid.tests)
+ self.assertEqual(renderer.registry, context.config.registry)
+
class Test_append_slash_notfound_view(BaseTest, unittest.TestCase):
def _callFUT(self, context, request):
from pyramid.view import append_slash_notfound_view
@@ -607,8 +631,9 @@ class DummyVenusianContext(object):
def __init__(self):
self.config = DummyConfig()
-def call_venusian(venusian):
- context = DummyVenusianContext()
+def call_venusian(venusian, context=None):
+ if context is None:
+ context = DummyVenusianContext()
for wrapped, callback, category in venusian.attachments:
callback(context, None, None)
return context.config.settings
diff --git a/pyramid/view.py b/pyramid/view.py
index ef7352301..6b28601e2 100644
--- a/pyramid/view.py
+++ b/pyramid/view.py
@@ -7,6 +7,7 @@ from zope.deprecation import deprecated
from pyramid.interfaces import IRoutesMapper
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
+from pyramid.interfaces import IRendererInfo
from pyramid.httpexceptions import HTTPFound
from pyramid.httpexceptions import default_exceptionresponse_view
@@ -205,6 +206,12 @@ class view_config(object):
renderer = RendererHelper(name=renderer,
package=info.module,
registry=context.config.registry)
+ elif IRendererInfo.providedBy(renderer):
+ # create a new rendererinfo to clear out old registry on a
+ # rescan, see https://github.com/Pylons/pyramid/pull/234
+ renderer = RendererHelper(name=renderer.name,
+ package=info.module,
+ registry=context.config.registry)
settings['renderer'] = renderer
context.config.add_view(view=ob, **settings)