]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
fix the fancy tracebacks on Python 3 451/head
authorAntti Haapala <antti.haapala@anttipatterns.com>
Sun, 10 May 2015 07:04:15 +0000 (10:04 +0300)
committerAntti Haapala <antti.haapala@anttipatterns.com>
Sun, 10 May 2015 07:04:15 +0000 (10:04 +0300)
jinja2/debug.py

index ee75a528fbac73750ad673eac1de8daa8c5a8093..3252748369484f75025fd90ae4f3dcb4e1232900 100644 (file)
@@ -15,7 +15,7 @@ import traceback
 from types import TracebackType, CodeType
 from jinja2.utils import missing, internal_code
 from jinja2.exceptions import TemplateSyntaxError
-from jinja2._compat import iteritems, reraise
+from jinja2._compat import iteritems, reraise, PY2
 
 # on pypy we can take advantage of transparent proxies
 try:
@@ -245,12 +245,21 @@ def fake_exc_info(exc_info, filename, lineno):
                 location = 'block "%s"' % function[6:]
             else:
                 location = 'template'
-        code = CodeType(0, code.co_nlocals, code.co_stacksize,
-                        code.co_flags, code.co_code, code.co_consts,
-                        code.co_names, code.co_varnames, filename,
-                        location, code.co_firstlineno,
-                        code.co_lnotab, (), ())
-    except:
+
+        if PY2:
+            code = CodeType(0, code.co_nlocals, code.co_stacksize,
+                            code.co_flags, code.co_code, code.co_consts,
+                            code.co_names, code.co_varnames, filename,
+                            location, code.co_firstlineno,
+                            code.co_lnotab, (), ())
+        else:
+            code = CodeType(0, code.co_kwonlyargcount,
+                            code.co_nlocals, code.co_stacksize,
+                            code.co_flags, code.co_code, code.co_consts,
+                            code.co_names, code.co_varnames, filename,
+                            location, code.co_firstlineno,
+                            code.co_lnotab, (), ())
+    except Exception as e:
         pass
 
     # execute the code and catch the new traceback
@@ -273,11 +282,15 @@ def _init_ugly_crap():
     import ctypes
     from types import TracebackType
 
-    # figure out size of _Py_ssize_t
-    if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'):
-        _Py_ssize_t = ctypes.c_int64
+    if PY2:
+        # figure out size of _Py_ssize_t for Python 2:
+        if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'):
+            _Py_ssize_t = ctypes.c_int64
+        else:
+            _Py_ssize_t = ctypes.c_int
     else:
-        _Py_ssize_t = ctypes.c_int
+        # platform ssize_t on Python 3
+        _Py_ssize_t = ctypes.c_ssize_t
 
     # regular python
     class _PyObject(ctypes.Structure):