summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@monkeypox.org>2009-10-14 19:52:34 -0700
committerR. Tyler Ballance <tyler@monkeypox.org>2009-10-14 19:56:05 -0700
commite8d6782076e0d582d0090c7cef6239f6d72efcd0 (patch)
tree14d0e116d95d228697ac7035273dabf9b10295bc
parent9ac5e4c6ed36c3b6b1bc8340fdb69d32db9d98c4 (diff)
downloadpython-cheetah-e8d6782076e0d582d0090c7cef6239f6d72efcd0.tar.gz
Correctly use cStringIO which only deals in bytestrings.
I'm uncertain if there's any lossiness in encoding a unicode() object 'utf-8' prior to writing to the stream, but this does appear to inadvertantly fix another issue we had with mixing UTF-8 encoded strings and unicode() objects when filling a template.
-rwxr-xr-xcheetah/DummyTransaction.py7
-rw-r--r--cheetah/Tests/Unicode.py5
2 files changed, 7 insertions, 5 deletions
diff --git a/cheetah/DummyTransaction.py b/cheetah/DummyTransaction.py
index 8b30abf..e04a604 100755
--- a/cheetah/DummyTransaction.py
+++ b/cheetah/DummyTransaction.py
@@ -31,8 +31,11 @@ class DummyResponse(object):
pass
def write(self, value):
+ if isinstance(value, unicode):
+ value = value.encode('utf-8')
self._outputChunks.write(value)
+
def writeln(self, txt):
write(txt)
write('\n')
@@ -43,7 +46,7 @@ class DummyResponse(object):
if outputChunks is not None:
return ''.join(outputChunks)
else:
- return self._outputChunks.getvalue()
+ return self._outputChunks.getvalue().decode('utf-8')
except UnicodeDecodeError, ex:
#not sure about the best way to check for non-unicode in StringIO
nonunicode = ''
@@ -93,7 +96,7 @@ class TransformerResponse(DummyResponse):
if isinstance(_filter, types.TypeType):
_filter = _filter()
return _filter.filter(output)
- return output
+ return output
class TransformerTransaction(object):
diff --git a/cheetah/Tests/Unicode.py b/cheetah/Tests/Unicode.py
index e4499d9..d627503 100644
--- a/cheetah/Tests/Unicode.py
+++ b/cheetah/Tests/Unicode.py
@@ -168,15 +168,14 @@ class Unicode_in_SearchList_Test(CommandLineTest):
'adjective' : u'\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a'}])
assert template.respond()
- def test_ErrorReporting(self):
+ def test_Thai_utf8(self):
utf8 = '\xe0\xb8\xa2\xe0\xb8\xb4\xe0\xb8\x99\xe0\xb8\x94\xe0\xb8\xb5\xe0\xb8\x95\xe0\xb9\x89\xe0\xb8\xad\xe0\xb8\x99\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x9a'
source = '''This is $adjective'''
template = self.createAndCompile(source)
assert template and issubclass(template, Template)
template = template(searchList=[{'adjective' : utf8}])
- self.failUnlessRaises(DummyTransaction.DummyResponseFailure, template.respond)
-
+ assert template.respond()
if __name__ == '__main__':