diff options
author | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-05-04 15:40:53 -0700 |
---|---|---|
committer | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-05-04 15:40:53 -0700 |
commit | c7e71d8fa12cd1ac4bd4dbb4ddecc353b7d34870 (patch) | |
tree | f58536c6cec864f0ab16e2e308f81c9791244936 /pystache | |
parent | ef3ef4bf927dce83341b05ef61a251c3d450920c (diff) | |
download | pystache-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.py | 2 | ||||
-rw-r--r-- | pystache/tests/test_renderengine.py | 17 |
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. |