From: David Lord Date: Fri, 9 Apr 2021 23:49:55 +0000 (-0700) Subject: extract common code for import/from nodes X-Git-Tag: 3.0.0rc1~7^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8db6c6313e90a47da92722f60010a6ada2e8644;p=thirdparty%2Fjinja.git extract common code for import/from nodes --- diff --git a/src/jinja2/compiler.py b/src/jinja2/compiler.py index 38d4fd39..7a15d807 100644 --- a/src/jinja2/compiler.py +++ b/src/jinja2/compiler.py @@ -977,15 +977,11 @@ class CodeGenerator(NodeVisitor): if node.ignore_missing: self.outdent() - def visit_Import(self, node, frame): - """Visit regular imports.""" - self.writeline(f"{frame.symbols.ref(node.target)} = ", node) - if frame.toplevel: - self.write(f"context.vars[{node.target!r}] = ") - + def _import_common(self, node, frame): self.write(f"{self.choose_async('await ')}environment.get_template(") self.visit(node.template, frame) self.write(f", {self.name!r}).") + if node.with_context: f_name = f"make_module{self.choose_async('_async')}" self.write( @@ -995,26 +991,23 @@ class CodeGenerator(NodeVisitor): self.write("_get_default_module_async()") else: self.write("_get_default_module(context)") + + def visit_Import(self, node, frame): + """Visit regular imports.""" + self.writeline(f"{frame.symbols.ref(node.target)} = ", node) + if frame.toplevel: + self.write(f"context.vars[{node.target!r}] = ") + + self._import_common(node, frame) + if frame.toplevel and not node.target.startswith("_"): self.writeline(f"context.exported_vars.discard({node.target!r})") def visit_FromImport(self, node, frame): """Visit named imports.""" self.newline(node) - prefix = self.choose_async("await ") - self.write(f"included_template = {prefix}environment.get_template(") - self.visit(node.template, frame) - self.write(f", {self.name!r}).") - if node.with_context: - f_name = f"make_module{self.choose_async('_async')}" - 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("included_template = ") + self._import_common(node, frame) var_names = [] discarded_names = [] for name in node.names: