imported macros can access template globals in async mode
This commit is contained in:
parent
fb9cac66e9
commit
baff54fe1d
@ -9,6 +9,8 @@ Version 3.0.2
|
||||
names. :issue:`1452, 1453`
|
||||
- Revert an unintended change that caused ``Undefined`` to act like
|
||||
``StrictUndefined`` for the ``in`` operator. :issue:`1448`
|
||||
- Imported macros have access to the current template globals in async
|
||||
environments. :issue:`1494`
|
||||
|
||||
|
||||
Version 3.0.1
|
||||
|
||||
@ -1090,10 +1090,8 @@ class CodeGenerator(NodeVisitor):
|
||||
self.write(
|
||||
f"{f_name}(context.get_all(), True, {self.dump_local_context(frame)})"
|
||||
)
|
||||
elif self.environment.is_async:
|
||||
self.write("_get_default_module_async()")
|
||||
else:
|
||||
self.write("_get_default_module(context)")
|
||||
self.write(f"_get_default_module{self.choose_async('_async')}(context)")
|
||||
|
||||
def visit_Import(self, node: nodes.Import, frame: Frame) -> None:
|
||||
"""Visit regular imports."""
|
||||
|
||||
@ -189,6 +189,29 @@ class TestAsyncImports:
|
||||
assert m.variable == 42
|
||||
assert not hasattr(m, "notthere")
|
||||
|
||||
def test_import_with_globals(self, test_env_async):
|
||||
t = test_env_async.from_string(
|
||||
'{% import "module" as m %}{{ m.test() }}', globals={"foo": 42}
|
||||
)
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
t = test_env_async.from_string('{% import "module" as m %}{{ m.test() }}')
|
||||
assert t.render() == "[|23]"
|
||||
|
||||
def test_import_with_globals_override(self, test_env_async):
|
||||
t = test_env_async.from_string(
|
||||
'{% set foo = 41 %}{% import "module" as m %}{{ m.test() }}',
|
||||
globals={"foo": 42},
|
||||
)
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
def test_from_import_with_globals(self, test_env_async):
|
||||
t = test_env_async.from_string(
|
||||
'{% from "module" import test %}{{ test() }}',
|
||||
globals={"foo": 42},
|
||||
)
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
|
||||
class TestAsyncIncludes:
|
||||
def test_context_include(self, test_env_async):
|
||||
|
||||
@ -99,45 +99,27 @@ class TestImports:
|
||||
t.render()
|
||||
|
||||
def test_import_with_globals(self, test_env):
|
||||
env = Environment(
|
||||
loader=DictLoader(
|
||||
{
|
||||
"macros": "{% macro test() %}foo: {{ foo }}{% endmacro %}",
|
||||
"test": "{% import 'macros' as m %}{{ m.test() }}",
|
||||
"test1": "{% import 'macros' as m %}{{ m.test() }}",
|
||||
}
|
||||
)
|
||||
t = test_env.from_string(
|
||||
'{% import "module" as m %}{{ m.test() }}', globals={"foo": 42}
|
||||
)
|
||||
tmpl = env.get_template("test", globals={"foo": "bar"})
|
||||
assert tmpl.render() == "foo: bar"
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
tmpl = env.get_template("test1")
|
||||
assert tmpl.render() == "foo: "
|
||||
t = test_env.from_string('{% import "module" as m %}{{ m.test() }}')
|
||||
assert t.render() == "[|23]"
|
||||
|
||||
def test_import_with_globals_override(self, test_env):
|
||||
env = Environment(
|
||||
loader=DictLoader(
|
||||
{
|
||||
"macros": "{% set foo = '42' %}{% macro test() %}"
|
||||
"foo: {{ foo }}{% endmacro %}",
|
||||
"test": "{% from 'macros' import test %}{{ test() }}",
|
||||
}
|
||||
)
|
||||
t = test_env.from_string(
|
||||
'{% set foo = 41 %}{% import "module" as m %}{{ m.test() }}',
|
||||
globals={"foo": 42},
|
||||
)
|
||||
tmpl = env.get_template("test", globals={"foo": "bar"})
|
||||
assert tmpl.render() == "foo: 42"
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
def test_from_import_with_globals(self, test_env):
|
||||
env = Environment(
|
||||
loader=DictLoader(
|
||||
{
|
||||
"macros": "{% macro testing() %}foo: {{ foo }}{% endmacro %}",
|
||||
"test": "{% from 'macros' import testing %}{{ testing() }}",
|
||||
}
|
||||
)
|
||||
t = test_env.from_string(
|
||||
'{% from "module" import test %}{{ test() }}',
|
||||
globals={"foo": 42},
|
||||
)
|
||||
tmpl = env.get_template("test", globals={"foo": "bar"})
|
||||
assert tmpl.render() == "foo: bar"
|
||||
assert t.render() == "[42|23]"
|
||||
|
||||
|
||||
class TestIncludes:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user