"""Extension API for adding custom tags and behavior."""
import pprint
import re
+import warnings
from sys import version_info
from typing import Set
class WithExtension(Extension):
- pass
+ def __init__(self, environment):
+ super().__init__(environment)
+ warnings.warn(
+ "The 'with' extension is deprecated and will be removed in"
+ " version 3.1. This is built in now.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
class AutoEscapeExtension(Extension):
- pass
+ def __init__(self, environment):
+ super().__init__(environment)
+ warnings.warn(
+ "The 'autoescape' extension is deprecated and will be removed in"
+ " version 3.1. This is built in now.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
class DebugExtension(Extension):
class TestExtensions:
def test_extend_late(self):
env = Environment()
- env.add_extension("jinja2.ext.autoescape")
t = env.from_string('{% autoescape true %}{{ "<test>" }}{% endautoescape %}')
assert t.render() == "<test>"
assert tmpl.render(LANGUAGE="de", apples=5) == "5 Äpfel"
def test_autoescape_support(self):
- env = Environment(extensions=["jinja2.ext.autoescape", "jinja2.ext.i18n"])
+ env = Environment(extensions=["jinja2.ext.i18n"])
env.install_gettext_callables(
lambda x: "<strong>Wert: %(name)s</strong>",
lambda s, p, n: s,
assert t.render(ae=False) == "<strong>Wert: <test></strong>"
def test_autoescape_macros(self):
- env = Environment(autoescape=False, extensions=["jinja2.ext.autoescape"])
+ env = Environment(autoescape=False)
template = (
"{% macro m() %}<html>{% endmacro %}"
"{% autoescape true %}{{ m() }}{% endautoescape %}"
class TestAutoEscape:
def test_scoped_setting(self):
- env = Environment(extensions=["jinja2.ext.autoescape"], autoescape=True)
+ env = Environment(autoescape=True)
tmpl = env.from_string(
"""
{{ "<HelloWorld>" }}
"<HelloWorld>",
]
- env = Environment(extensions=["jinja2.ext.autoescape"], autoescape=False)
+ env = Environment(autoescape=False)
tmpl = env.from_string(
"""
{{ "<HelloWorld>" }}
]
def test_nonvolatile(self):
- env = Environment(extensions=["jinja2.ext.autoescape"], autoescape=True)
+ env = Environment(autoescape=True)
tmpl = env.from_string('{{ {"foo": "<test>"}|xmlattr|escape }}')
assert tmpl.render() == ' foo="<test>"'
tmpl = env.from_string(
assert tmpl.render() == " foo="&lt;test&gt;""
def test_volatile(self):
- env = Environment(extensions=["jinja2.ext.autoescape"], autoescape=True)
+ env = Environment(autoescape=True)
tmpl = env.from_string(
'{% autoescape foo %}{{ {"foo": "<test>"}'
"|xmlattr|escape }}{% endautoescape %}"
assert tmpl.render(foo=True) == ' foo="<test>"'
def test_scoping(self):
- env = Environment(extensions=["jinja2.ext.autoescape"])
+ env = Environment()
tmpl = env.from_string(
'{% autoescape true %}{% set x = "<x>" %}{{ x }}'
'{% endautoescape %}{{ x }}{{ "<y>" }}'
assert tmpl.render(x=1) == "<x>1<y>"
def test_volatile_scoping(self):
- env = Environment(extensions=["jinja2.ext.autoescape"])
+ env = Environment()
tmplsource = """
{% autoescape val %}
{% macro foo(x) %}
# looking at the source we should see <testing> there in raw
# (and then escaped as well)
- env = Environment(extensions=["jinja2.ext.autoescape"])
+ env = Environment()
pysource = env.compile(tmplsource, raw=True)
assert "<testing>\\n" in pysource
- env = Environment(extensions=["jinja2.ext.autoescape"], autoescape=True)
+ env = Environment(autoescape=True)
pysource = env.compile(tmplsource, raw=True)
assert "<testing>\\n" in pysource