diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-09-17 06:14:27 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-09-17 06:14:27 +0000 |
| commit | 19473e78e61ad084f07a0f7820a75b6c64d93dcd (patch) | |
| tree | 77de1251af1041601adae3017060c46eef4739d1 /repoze | |
| parent | 550e16bb5936f5e22954992e50ac57f7f5cff4e0 (diff) | |
| download | pyramid-19473e78e61ad084f07a0f7820a75b6c64d93dcd.tar.gz pyramid-19473e78e61ad084f07a0f7820a75b6c64d93dcd.tar.bz2 pyramid-19473e78e61ad084f07a0f7820a75b6c64d93dcd.zip | |
- Add a ``string`` renderer. This renderer converts a non-Response
return value of any view callble into a string. It is documented in
the "Views" narrative chapter.
Diffstat (limited to 'repoze')
| -rw-r--r-- | repoze/bfg/includes/configure.zcml | 5 | ||||
| -rw-r--r-- | repoze/bfg/renderers.py | 7 | ||||
| -rw-r--r-- | repoze/bfg/router.py | 4 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_renderers.py | 22 |
4 files changed, 36 insertions, 2 deletions
diff --git a/repoze/bfg/includes/configure.zcml b/repoze/bfg/includes/configure.zcml index 37cd4d75a..60119b2c9 100644 --- a/repoze/bfg/includes/configure.zcml +++ b/repoze/bfg/includes/configure.zcml @@ -33,4 +33,9 @@ name="json" /> + <renderer + factory="repoze.bfg.renderers.string_renderer_factory" + name="string" + /> + </configure> diff --git a/repoze/bfg/renderers.py b/repoze/bfg/renderers.py index 503131400..c5aed2906 100644 --- a/repoze/bfg/renderers.py +++ b/repoze/bfg/renderers.py @@ -22,6 +22,13 @@ def json_renderer_factory(name): return json.dumps(value) return _render +def string_renderer_factory(name): + def _render(value): + if not isinstance(value, basestring): + value = str(value) + return value + return _render + # utility functions def template_renderer_factory(path, impl, level=3): diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index d9502a435..e8497331b 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -114,8 +114,8 @@ class Router(object): return response.app_iter except AttributeError: raise ValueError( - 'Non-response object returned from view %s: %r' % - (view_name, response)) + 'Non-response object returned from view named %s ' + '(and no renderer): %r' % (view_name, response)) provides = map(providedBy, (context, request)) view_callable = registry.adapters.lookup( diff --git a/repoze/bfg/tests/test_renderers.py b/repoze/bfg/tests/test_renderers.py index 6e33f4ce5..d1acc0285 100644 --- a/repoze/bfg/tests/test_renderers.py +++ b/repoze/bfg/tests/test_renderers.py @@ -178,7 +178,29 @@ class Test_json_renderer_factory(unittest.TestCase): renderer = self._callFUT(None) result = renderer({'a':1}) self.assertEqual(result, '{"a": 1}') + +class Test_string_renderer_factory(unittest.TestCase): + def _callFUT(self, name): + from repoze.bfg.renderers import string_renderer_factory + return string_renderer_factory(name) + + def test_it_unicode(self): + renderer = self._callFUT(None) + value = unicode('La Pe\xc3\xb1a', 'utf-8') + result = renderer(value) + self.assertEqual(result, value) + def test_it_str(self): + renderer = self._callFUT(None) + value = 'La Pe\xc3\xb1a' + result = renderer(value) + self.assertEqual(result, value) + + def test_it_other(self): + renderer = self._callFUT(None) + value = None + result = renderer(value) + self.assertEqual(result, 'None') class DummyFactory: def __init__(self, renderer): |
