added python2.4 workaround for unicode.join bug
authorArmin Ronacher <armin.ronacher@active-4.com>
Mon, 28 Apr 2008 18:49:51 +0000 (20:49 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Mon, 28 Apr 2008 18:49:51 +0000 (20:49 +0200)
--HG--
branch : trunk

jinja2/runtime.py

index b28950050e5421ed646d6fada4ae0632bb3922ac..0aad4bdb3e5e9b6d299ca2b7acb47aca4e173796 100644 (file)
@@ -8,6 +8,7 @@
     :copyright: Copyright 2008 by Armin Ronacher.
     :license: GNU GPL.
 """
+import sys
 from types import FunctionType
 from itertools import chain, imap
 from jinja2.utils import Markup, partial, soft_unicode, escape
@@ -25,7 +26,24 @@ missing = type('MissingType', (), {'__repr__': lambda x: 'missing'})()
 
 
 # concatenate a list of strings and convert them to unicode.
-concat = u''.join
+# unfortunately there is a bug in python 2.4 and lower that causes
+# unicode.join trash the traceback.
+try:
+    def _test_gen_bug():
+        raise TypeError(_test_gen_bug)
+        yield None
+    u''.join(_test_gen_bug())
+except TypeError, e:
+    if e.args and e.args[0] is _test_gen_bug:
+        concat = u''.join
+    else:
+        def concat(gen):
+            try:
+                return u''.join(list(gen()))
+            except:
+                exc_type, exc_value, tb = sys.exc_info()
+                raise exc_type, exc_value, tb.tb_next
+del _test_gen_bug
 
 
 def markup_join(*args):