This is an automated email from the ASF dual-hosted git repository.
prhomberg pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new f80efcd GEODE-6483: Correct render.py multipass failure. (#3281)
f80efcd is described below
commit f80efcd3e3f0fbb329bf1f9be67edf08c7c0521d
Author: Patrick Rhomberg <[email protected]>
AuthorDate: Fri Mar 8 11:08:42 2019 -0800
GEODE-6483: Correct render.py multipass failure. (#3281)
---
ci/pipelines/render.py | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/ci/pipelines/render.py b/ci/pipelines/render.py
index ffd7d30..a2de4cd 100755
--- a/ci/pipelines/render.py
+++ b/ci/pipelines/render.py
@@ -20,15 +20,14 @@
"""This script performs a multi-pass render of a Jinja templated file.
See the argparse help for details."""
import argparse
+import jinja2.exceptions
import logging
import os
import pprint
-from itertools import combinations
-from typing import List, Dict
-
-import jinja2.exceptions
import yaml
+from itertools import combinations
from jinja2 import Environment, FileSystemLoader, Undefined
+from typing import List, Dict
RENDER_PASS_LIMIT = 5
@@ -51,7 +50,7 @@ def render_template(template_file: str,
env = get_environment(environment_dirs, template_file)
variables = determine_variables(command_line_variable_options,
variables_files)
template = env.get_template(os.path.basename(template_file))
- rendered_template = multipass_render(template, variables)
+ rendered_template = multipass_render(template, variables, env)
if print_rendered:
print(rendered_template)
@@ -74,17 +73,20 @@ def get_environment(environment_dirs, template_file):
return env
-def multipass_render(template, variables):
+def multipass_render(template, variables, environment):
f"""Performs a multiple-pass render of the template file, allowing
variables to reference other variables.
Performs at most RENDER_PASS_LIMIT (={RENDER_PASS_LIMIT}) passes.
"""
this_template = template
+
for i in range(1, RENDER_PASS_LIMIT + 1):
logging.debug(f"Performing render pass {i}...")
- this_template = this_template.render(variables)
- if "{{" not in this_template:
- return this_template
+ this_template_rendered = this_template.render(variables)
+ if "{{" not in this_template_rendered:
+ return this_template_rendered
+ this_template = environment.from_string(this_template_rendered)
+
raise RuntimeError(f"Variables not eliminated from template after
{RENDER_PASS_LIMIT} passes."
f" Please verify that template variables references to
not recurse.")