summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Anderson <sontek@gmail.com>2015-01-05 23:46:28 -0800
committerJohn Anderson <sontek@gmail.com>2015-01-05 23:46:28 -0800
commitae7bcd7cabc53e0b500c6a79f30606e67217ad1d (patch)
tree7c33b2a6244d03df275f4cce83f4f3f1f77c94bf
parent83a400a3cd121fe65d33e796c28a199b35ab67e5 (diff)
parent2d659e41d01926acaa8670c4d20be20300bcedb7 (diff)
downloadpyramid-ae7bcd7cabc53e0b500c6a79f30606e67217ad1d.tar.gz
pyramid-ae7bcd7cabc53e0b500c6a79f30606e67217ad1d.tar.bz2
pyramid-ae7bcd7cabc53e0b500c6a79f30606e67217ad1d.zip
Merge branch 'master' of https://github.com/Pylons/pyramid into support_more_features_in_routes
Conflicts: CHANGES.txt
-rw-r--r--CHANGES.txt4
-rw-r--r--pyramid/renderers.py4
-rw-r--r--pyramid/tests/test_renderers.py25
3 files changed, 29 insertions, 4 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 2079d5cff..0381c1820 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -64,6 +64,10 @@ Features
a factory that will return a custom ``Response`` class.
See https://github.com/Pylons/pyramid/pull/1499
+- Allow an iterator to be returned from a renderer. Previously it was only
+ possible to return bytes or unicode.
+ See https://github.com/Pylons/pyramid/pull/1417
+
- Overall improvments for the ``proutes`` command. Added ``--format`` and
``--glob`` arguments to the command, introduced the ``method``
column for displaying available request methods, and improved the ``view``
diff --git a/pyramid/renderers.py b/pyramid/renderers.py
index d57671865..d840cc317 100644
--- a/pyramid/renderers.py
+++ b/pyramid/renderers.py
@@ -453,6 +453,10 @@ class RendererHelper(object):
if result is not None:
if isinstance(result, text_type):
response.text = result
+ elif isinstance(result, bytes):
+ response.body = result
+ elif hasattr(result, '__iter__'):
+ response.app_iter = result
else:
response.body = result
diff --git a/pyramid/tests/test_renderers.py b/pyramid/tests/test_renderers.py
index 21878b41f..30fdef051 100644
--- a/pyramid/tests/test_renderers.py
+++ b/pyramid/tests/test_renderers.py
@@ -194,8 +194,8 @@ class TestRendererHelper(unittest.TestCase):
helper = self._makeOne('loo.foo')
response = helper.render_to_response('values', {},
request=request)
- self.assertEqual(response.body[0], 'values')
- self.assertEqual(response.body[1], {})
+ self.assertEqual(response.app_iter[0], 'values')
+ self.assertEqual(response.app_iter[1], {})
def test_get_renderer(self):
factory = self._registerRendererFactory()
@@ -212,8 +212,8 @@ class TestRendererHelper(unittest.TestCase):
request = testing.DummyRequest()
response = 'response'
response = helper.render_view(request, response, view, context)
- self.assertEqual(response.body[0], 'response')
- self.assertEqual(response.body[1],
+ self.assertEqual(response.app_iter[0], 'response')
+ self.assertEqual(response.app_iter[1],
{'renderer_info': helper,
'renderer_name': 'loo.foo',
'request': request,
@@ -290,6 +290,23 @@ class TestRendererHelper(unittest.TestCase):
response = helper._make_response(la.encode('utf-8'), request)
self.assertEqual(response.body, la.encode('utf-8'))
+ def test__make_response_result_is_iterable(self):
+ from pyramid.response import Response
+ request = testing.DummyRequest()
+ request.response = Response()
+ helper = self._makeOne('loo.foo')
+ la = text_('/La Pe\xc3\xb1a', 'utf-8')
+ response = helper._make_response([la.encode('utf-8')], request)
+ self.assertEqual(response.body, la.encode('utf-8'))
+
+ def test__make_response_result_is_other(self):
+ self._registerResponseFactory()
+ request = None
+ helper = self._makeOne('loo.foo')
+ result = object()
+ response = helper._make_response(result, request)
+ self.assertEqual(response.body, result)
+
def test__make_response_result_is_None_no_body(self):
from pyramid.response import Response
request = testing.DummyRequest()