Chris McDonough
2011-07-14 2ad827b4c67111f76e9c2fb54d082a50eb2b4c23
- 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.
3 files modified
46 ■■■■■ changed files
CHANGES.txt 10 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_view.py 29 ●●●●● patch | view | raw | blame | history
pyramid/view.py 7 ●●●●● patch | view | raw | blame | history
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)
==================
pyramid/tests/test_view.py
@@ -395,6 +395,30 @@
        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 @@
    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
pyramid/view.py
@@ -7,6 +7,7 @@
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 @@
                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)