Fixes https://github.com/pallets/jinja/issues/1526
Before:
File ".../broken.html", line 2, in <module>
{{ fail() }}
File ".../test_debug.py", line 32, in <lambda>
tmpl.render(fail=lambda: 1 / 0)
ZeroDivisionError: division by zero
After:
File ".../broken.html", line 2, in <module>
{{ fail() }}
^^^^^^^^^^^^
File ".../test_debug.py", line 32, in <lambda>
tmpl.render(fail=lambda: 1 / 0)
~~^~~
ZeroDivisionError: division by zero
Otherwise the failure looks like this:
> assert (
m is not None
), "Traceback did not match:\n\n{''.join(tb)}\nexpected:\n{expected_tb}"
E AssertionError: Traceback did not match:
E
E {''.join(tb)}
E expected:
E {expected_tb}
E assert None is not None
Simplify the `jinja.debug` code.
On Python >= 3.7, `tb_next` is directly assignable. On PyPy, use
transparent proxies only if support is enabled. For cpython < 3.7, use
ctypes to set `tb_next`. Rewrite the ctypes code to use `py_object` and
`pythonapi.Py_IncRef`, which seems to avoid crashing on debug builds.
On Python 3, a rewritten `TemplateSyntaxError` would retain the frames
from the compiler functions for some reason. Clear these so the template
source is the last thing in the traceback.
doctests that just show usage that would not work on their own so that
they are standard code blocks now and do not disturb testing.
--HG--
branch : trunk