summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Volkov <alex@flamy.ca>2012-11-13 18:20:20 -0500
committerAlex Volkov <alex@flamy.ca>2012-11-13 18:20:20 -0500
commit6ec5a699bbd24e2d493418c3ada39390f943d517 (patch)
treece3e9b1e460aef9a70a7dda93167d3b92ccb7299
parentfd77b5c78677109c7756a690d0e4be43895ae12a (diff)
downloadpyramid-6ec5a699bbd24e2d493418c3ada39390f943d517.tar.gz
pyramid-6ec5a699bbd24e2d493418c3ada39390f943d517.tar.bz2
pyramid-6ec5a699bbd24e2d493418c3ada39390f943d517.zip
My fix for Issue #721. Made view.py - render_view to convert iterable input
into bytestring and joing it with bytestring.
-rw-r--r--pyramid/tests/test_view.py22
-rw-r--r--pyramid/view.py4
2 files changed, 22 insertions, 4 deletions
diff --git a/pyramid/tests/test_view.py b/pyramid/tests/test_view.py
index 0af941e0d..42cfea37b 100644
--- a/pyramid/tests/test_view.py
+++ b/pyramid/tests/test_view.py
@@ -230,6 +230,22 @@ class RenderViewToIterableTests(BaseTest, unittest.TestCase):
iterable = self._callFUT(context, request, name='registered',
secure=False)
self.assertEqual(iterable, ['anotherview'])
+ def test_verify_output_bytestring(self):
+ from pyramid.request import Request
+ from pyramid.config import Configurator
+ from pyramid.view import render_view
+ from webob.compat import text_type
+ config = Configurator(settings={})
+ def view(request):
+ request.response.text = text_type('<body></body>')
+ return request.response
+
+ config.add_view(name='test', view=view)
+ config.commit()
+
+ r = Request({})
+ r.registry = config.registry
+ self.assertEqual(render_view(object(), r, 'test'), b'<body></body>')
def test_call_request_has_no_registry(self):
request = self._makeRequest()
@@ -261,7 +277,7 @@ class RenderViewTests(BaseTest, unittest.TestCase):
view = make_view(response)
self._registerView(request.registry, view, 'registered')
s = self._callFUT(context, request, name='registered', secure=True)
- self.assertEqual(s, '')
+ self.assertEqual(s, b'')
def test_call_view_registered_insecure_no_call_permissive(self):
context = self._makeContext()
@@ -270,7 +286,7 @@ class RenderViewTests(BaseTest, unittest.TestCase):
view = make_view(response)
self._registerView(request.registry, view, 'registered')
s = self._callFUT(context, request, name='registered', secure=False)
- self.assertEqual(s, '')
+ self.assertEqual(s, b'')
def test_call_view_registered_insecure_with_call_permissive(self):
context = self._makeContext()
@@ -282,7 +298,7 @@ class RenderViewTests(BaseTest, unittest.TestCase):
view.__call_permissive__ = anotherview
self._registerView(request.registry, view, 'registered')
s = self._callFUT(context, request, name='registered', secure=False)
- self.assertEqual(s, 'anotherview')
+ self.assertEqual(s, b'anotherview')
class TestIsResponse(unittest.TestCase):
def setUp(self):
diff --git a/pyramid/view.py b/pyramid/view.py
index 835982e79..972877fea 100644
--- a/pyramid/view.py
+++ b/pyramid/view.py
@@ -2,6 +2,8 @@ import venusian
from zope.interface import providedBy
from zope.deprecation import deprecated
+from webob.compat import text_type
+
from pyramid.interfaces import (
IRoutesMapper,
@@ -136,7 +138,7 @@ def render_view(context, request, name='', secure=True):
iterable = render_view_to_iterable(context, request, name, secure)
if iterable is None:
return None
- return ''.join(iterable)
+ return b''.join((x.encode('utf-8') if isinstance(x, text_type) else x for x in iterable))
class view_config(object):
""" A function, class or method :term:`decorator` which allows a