diff options
| author | Chris McDonough <chrism@plope.com> | 2011-08-28 06:55:36 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-08-28 06:55:36 -0400 |
| commit | b2c4e06e19dcac04adb0aa016e02ec1953cc8a57 (patch) | |
| tree | 36f9cf6c75e2c94b6c4afb887cb53732d0be1b12 | |
| parent | 33bcf65672737757eafba2bd8768131dd3d37aa8 (diff) | |
| download | pyramid-b2c4e06e19dcac04adb0aa016e02ec1953cc8a57.tar.gz pyramid-b2c4e06e19dcac04adb0aa016e02ec1953cc8a57.tar.bz2 pyramid-b2c4e06e19dcac04adb0aa016e02ec1953cc8a57.zip | |
- Use ``config.with_package`` in view_config decorator rather than
manufacturing a new renderer helper (cleanup).
| -rw-r--r-- | CHANGES.txt | 9 | ||||
| -rw-r--r-- | pyramid/tests/test_view.py | 63 | ||||
| -rw-r--r-- | pyramid/view.py | 17 |
3 files changed, 45 insertions, 44 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index d177b619a..7fed402b1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,12 @@ +Next release +============ + +Internal +-------- + +- Use ``config.with_package`` in view_config decorator rather than + manufacturing a new renderer helper (cleanup). + 1.2a2 (2011-08-27) ================== diff --git a/pyramid/tests/test_view.py b/pyramid/tests/test_view.py index 01aa70844..434bbb9ce 100644 --- a/pyramid/tests/test_view.py +++ b/pyramid/tests/test_view.py @@ -289,7 +289,8 @@ class TestViewConfigDecorator(unittest.TestCase): def foo(): pass wrapped = decorator(foo) self.assertTrue(wrapped is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 1) self.assertEqual(settings[0]['permission'], None) self.assertEqual(settings[0]['context'], None) @@ -303,7 +304,8 @@ class TestViewConfigDecorator(unittest.TestCase): class foo(object): pass wrapped = decorator(foo) self.assertTrue(wrapped is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 1) self.assertEqual(settings[0]['permission'], None) self.assertEqual(settings[0]['context'], None) @@ -318,7 +320,8 @@ class TestViewConfigDecorator(unittest.TestCase): class foo(object): pass wrapped = decorator(foo) self.assertTrue(wrapped is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 1) self.assertEqual(settings[0]['permission'], None) self.assertEqual(settings[0]['context'], None) @@ -337,12 +340,12 @@ class TestViewConfigDecorator(unittest.TestCase): wrapped2 = decorator2(wrapped1) self.assertTrue(wrapped1 is foo) self.assertTrue(wrapped2 is foo) - settings1 = call_venusian(venusian1) - self.assertEqual(len(settings1), 1) - self.assertEqual(settings1[0]['name'], '1') - settings2 = call_venusian(venusian2) - self.assertEqual(len(settings2), 1) - self.assertEqual(settings2[0]['name'], '2') + config1 = call_venusian(venusian1) + self.assertEqual(len(config1.settings), 1) + self.assertEqual(config1.settings[0]['name'], '1') + config2 = call_venusian(venusian2) + self.assertEqual(len(config2.settings), 1) + self.assertEqual(config2.settings[0]['name'], '2') def test_call_as_method(self): decorator = self._makeOne() @@ -354,7 +357,8 @@ class TestViewConfigDecorator(unittest.TestCase): class foo(object): foomethod = decorator(foo) barmethod = decorator(bar) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 2) self.assertEqual(settings[0]['attr'], 'foo') self.assertEqual(settings[1]['attr'], 'bar') @@ -366,7 +370,8 @@ class TestViewConfigDecorator(unittest.TestCase): def foo(context, request): pass decorated = decorator(foo) self.assertTrue(decorated is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(settings[0]['custom_predicates'], (1,)) def test_call_with_renderer_string(self): @@ -377,39 +382,32 @@ class TestViewConfigDecorator(unittest.TestCase): def foo(): pass wrapped = decorator(foo) self.assertTrue(wrapped is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 1) renderer = settings[0]['renderer'] - self.assertEqual(renderer.name, 'fixtures/minimal.pt') - self.assertEqual(renderer.package, pyramid.tests) - self.assertEqual(renderer.registry.__class__, DummyRegistry) + self.assertEqual(renderer, 'fixtures/minimal.pt') + self.assertEqual(config.pkg, pyramid.tests) def test_call_with_renderer_dict(self): + import pyramid.tests decorator = self._makeOne(renderer={'a':1}) venusian = DummyVenusian() decorator.venusian = venusian def foo(): pass wrapped = decorator(foo) self.assertTrue(wrapped is foo) - settings = call_venusian(venusian) + config = call_venusian(venusian) + settings = config.settings self.assertEqual(len(settings), 1) self.assertEqual(settings[0]['renderer'], {'a':1}) + self.assertEqual(config.pkg, pyramid.tests) def test_call_with_renderer_IRendererInfo(self): - # see https://github.com/Pylons/pyramid/pull/234 - from pyramid.interfaces import IRendererInfo import pyramid.tests - outerself = self + from pyramid.interfaces import IRendererInfo class DummyRendererHelper(object): implements(IRendererInfo) - name = 'fixtures/minimal.pt' - package = pyramid.tests - def clone(self, name=None, package=None, registry=None): - outerself.assertEqual(name, self.name) - outerself.assertEqual(package, self.package) - outerself.assertEqual(registry, context.config.registry) - self.cloned = True - return self renderer_helper = DummyRendererHelper() decorator = self._makeOne(renderer=renderer_helper) venusian = DummyVenusian() @@ -418,11 +416,12 @@ class TestViewConfigDecorator(unittest.TestCase): wrapped = decorator(foo) self.assertTrue(wrapped is foo) context = DummyVenusianContext() - settings = call_venusian(venusian, context) + config = call_venusian(venusian, context) + settings = config.settings self.assertEqual(len(settings), 1) renderer = settings[0]['renderer'] self.assertTrue(renderer is renderer_helper) - self.assertTrue(renderer.cloned) + self.assertEqual(config.pkg, pyramid.tests) class Test_append_slash_notfound_view(BaseTest, unittest.TestCase): def _callFUT(self, context, request): @@ -686,6 +685,10 @@ class DummyConfig(object): def add_view(self, **kw): self.settings.append(kw) + def with_package(self, pkg): + self.pkg = pkg + return self + class DummyVenusianContext(object): def __init__(self): self.config = DummyConfig() @@ -695,5 +698,5 @@ def call_venusian(venusian, context=None): context = DummyVenusianContext() for wrapped, callback, category in venusian.attachments: callback(context, None, None) - return context.config.settings + return context.config diff --git a/pyramid/view.py b/pyramid/view.py index 1573ee34c..c18520604 100644 --- a/pyramid/view.py +++ b/pyramid/view.py @@ -217,19 +217,8 @@ class view_config(object): settings = self.__dict__.copy() def callback(context, name, ob): - renderer = settings.get('renderer') - if isinstance(renderer, basestring): - 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 = renderer.clone(name=renderer.name, - package=info.module, - registry=context.config.registry) - settings['renderer'] = renderer - context.config.add_view(view=ob, **settings) + config = context.config.with_package(info.module) + config.add_view(view=ob, **settings) info = self.venusian.attach(wrapped, callback, category='pyramid') @@ -240,7 +229,7 @@ class view_config(object): if settings['attr'] is None: settings['attr'] = wrapped.__name__ - settings['_info'] = info.codeinfo + settings['_info'] = info.codeinfo # fbo "action_method" return wrapped bfg_view = view_config |
