summaryrefslogtreecommitdiff
path: root/pystache
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2012-05-04 15:40:53 -0700
committerChris Jerdonek <chris.jerdonek@gmail.com>2012-05-04 15:40:53 -0700
commitc7e71d8fa12cd1ac4bd4dbb4ddecc353b7d34870 (patch)
treef58536c6cec864f0ab16e2e308f81c9791244936 /pystache
parentef3ef4bf927dce83341b05ef61a251c3d450920c (diff)
downloadpystache-c7e71d8fa12cd1ac4bd4dbb4ddecc353b7d34870.tar.gz
Fixed issue #118: "Handle lambda section values returning non-ascii, non-unicode"
See-- https://github.com/defunkt/pystache/issues/118
Diffstat (limited to 'pystache')
-rw-r--r--pystache/renderengine.py2
-rw-r--r--pystache/tests/test_renderengine.py17
2 files changed, 19 insertions, 0 deletions
diff --git a/pystache/renderengine.py b/pystache/renderengine.py
index 8d95fb1..5e85269 100644
--- a/pystache/renderengine.py
+++ b/pystache/renderengine.py
@@ -220,6 +220,8 @@ class RenderEngine(object):
#
# TODO: should we check the arity?
new_template = element(template[section_start_index:section_end_index])
+ # Make sure we are dealing with a unicode template string.
+ new_template = self.literal(new_template)
new_parsed_template = self._parse(new_template, delimiters=delims)
parts.append(new_parsed_template.render(context))
continue
diff --git a/pystache/tests/test_renderengine.py b/pystache/tests/test_renderengine.py
index 6f4e767..1e83792 100644
--- a/pystache/tests/test_renderengine.py
+++ b/pystache/tests/test_renderengine.py
@@ -473,6 +473,23 @@ class RenderTests(unittest.TestCase, AssertStringMixin, AssertExceptionMixin):
context = {'test': (lambda text: 'Hi %s' % text)}
self._assert_render(u'Hi Mom', template, context)
+ def test_section__lambda__returning_nonascii_nonunicode(self):
+ """
+ Test a lambda section value returning a non-ascii, non-unicode string.
+
+ """
+ def literal(s):
+ if isinstance(s, unicode):
+ return s
+ return unicode(s, encoding='utf8')
+
+ engine = self._engine()
+ engine.literal = literal
+
+ template = '{{#lambda}}{{/lambda}}'
+ context = {'lambda': lambda text: u'abcdé'.encode('utf-8')}
+ self._assert_render(u'abcdé', template, context, engine=engine)
+
def test_section__iterable(self):
"""
Check that objects supporting iteration (aside from dicts) behave like lists.