summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pystache/renderer.py15
-rw-r--r--pystache/tests/test_renderer.py12
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.