diff options
-rw-r--r-- | pystache/renderer.py | 15 | ||||
-rw-r--r-- | pystache/tests/test_renderer.py | 12 |
2 files changed, 20 insertions, 7 deletions
diff --git a/pystache/renderer.py b/pystache/renderer.py index f16a95b..93be33b 100644 --- a/pystache/renderer.py +++ b/pystache/renderer.py @@ -5,6 +5,8 @@ This module provides a Renderer class to render templates. """ +import sys + from pystache import defaults from pystache.context import Context from pystache.loader import Loader @@ -13,6 +15,17 @@ from pystache.specloader import SpecLoader from pystache.template_spec import TemplateSpec +# TODO: come up with a better solution for this. One of the issues here +# is that in Python 3 there is no common base class for unicode strings +# and byte strings, and 2to3 seems to convert all of "str", "unicode", +# and "basestring" to Python 3's "str". +if sys.version_info < (3, ): + _STRING_TYPES = basestring +else: + # The latter evaluates to "bytes" in Python 3 -- even after conversion by 2to3. + _STRING_TYPES = (unicode, type(u"a".encode('utf-8'))) + + class Renderer(object): """ @@ -336,7 +349,7 @@ class Renderer(object): all items in the *context list. """ - if isinstance(template, basestring): + if isinstance(template, _STRING_TYPES): return self._render_string(template, *context, **kwargs) # Otherwise, we assume the template is an object. diff --git a/pystache/tests/test_renderer.py b/pystache/tests/test_renderer.py index 2d9e67e..31ac1d4 100644 --- a/pystache/tests/test_renderer.py +++ b/pystache/tests/test_renderer.py @@ -180,13 +180,13 @@ class RendererTests(unittest.TestCase, AssertStringMixin): """ renderer = Renderer() - s = "é" + b = u"é".encode('utf-8') renderer.string_encoding = "ascii" - self.assertRaises(UnicodeDecodeError, renderer.unicode, s) + self.assertRaises(UnicodeDecodeError, renderer.unicode, b) renderer.string_encoding = "utf-8" - self.assertEqual(renderer.unicode(s), u"é") + self.assertEqual(renderer.unicode(b), u"é") def test_unicode__decode_errors(self): """ @@ -195,14 +195,14 @@ class RendererTests(unittest.TestCase, AssertStringMixin): """ renderer = Renderer() renderer.string_encoding = "ascii" - s = "déf" + b = u"déf".encode('utf-8') renderer.decode_errors = "ignore" - self.assertEqual(renderer.unicode(s), "df") + self.assertEqual(renderer.unicode(b), "df") renderer.decode_errors = "replace" # U+FFFD is the official Unicode replacement character. - self.assertEqual(renderer.unicode(s), u'd\ufffd\ufffdf') + self.assertEqual(renderer.unicode(b), u'd\ufffd\ufffdf') ## Test the _make_loader() method. |