diff options
| author | Chris McDonough <chrism@plope.com> | 2011-07-13 18:31:41 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-07-13 18:31:41 -0400 |
| commit | 2ad827b4c67111f76e9c2fb54d082a50eb2b4c23 (patch) | |
| tree | 8c9b57d5e6ad3de5719ffe795c18ff733c6c2fb9 | |
| parent | d4ccb85f76f38400eaf90b40ccbc56b017e3a6bd (diff) | |
| download | pyramid-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.txt | 10 | ||||
| -rw-r--r-- | pyramid/tests/test_view.py | 29 | ||||
| -rw-r--r-- | pyramid/view.py | 7 |
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) |
