1010import tempfile
1111from base64 import b64encode
1212from datetime import datetime , timedelta
13- from typing import List
13+ from typing import Any , Dict , List
1414
1515import cairosvg
1616import dateparser
2020import pygal
2121import pypandoc
2222import semver
23+ from chaoslib import merge_vars , substitute
2324from chaoslib .caching import cache_activities , lookup_activity
24- from chaoslib .types import Experiment , Journal , Run
25+ from chaoslib .configuration import load_configuration
26+ from chaoslib .secret import load_secrets
27+ from chaoslib .types import Configuration , Experiment , Journal , Run , Secrets
2528from jinja2 import Environment , PackageLoader
2629from logzero import logger
2730from natural import date
@@ -244,7 +247,12 @@ def generate_report_header(
244247 return header
245248
246249
247- def generate_report (journal_path : str , export_format : str = "markdown" ) -> str :
250+ def generate_report (
251+ journal_path : str ,
252+ export_format : str = "markdown" ,
253+ var : Dict [str , Any ] = None ,
254+ var_file : List [str ] = None ,
255+ ) -> str :
248256 """
249257 Generate a report document from a chaostoolkit journal.
250258
@@ -267,7 +275,14 @@ def generate_report(journal_path: str, export_format: str = "markdown") -> str:
267275
268276 generate_chart_from_metric_probes (journal , export_format )
269277 add_contribution_model (journal , export_format )
270- template = get_report_template (journal ["chaoslib-version" ])
278+ config_vars , secret_vars = merge_vars (var , var_file ) or (None , None )
279+ config = load_configuration (
280+ experiment .get ("configuration" , {}), config_vars
281+ )
282+ secrets = load_secrets (experiment .get ("secrets" , {}), secret_vars )
283+ template = get_report_template (
284+ journal ["chaoslib-version" ], configuration = config , secrets = secrets
285+ )
271286 report = template .render (journal )
272287
273288 return report
@@ -333,7 +348,10 @@ def save_report(
333348
334349
335350def get_report_template (
336- report_version : str , default_template : str = "index.md"
351+ report_version : str ,
352+ default_template : str = "index.md" ,
353+ configuration : Configuration = None ,
354+ secrets : Secrets = None ,
337355):
338356 """
339357 Retrieve and return the most appropriate template based on the
@@ -346,6 +364,13 @@ def get_report_template(
346364 env .globals ["pretty_duration" ] = lambda d0 , d1 : date .delta (
347365 dateparser .parse (d0 ), dateparser .parse (d1 ), words = False
348366 )[0 ]
367+ env .globals ["substitute" ] = (
368+ lambda args : {
369+ k : substitute (v , configuration , secrets ) for k , v in args .items ()
370+ }
371+ if isinstance (args , dict )
372+ else args
373+ )
349374
350375 if not report_version :
351376 return env .get_template (default_template )
0 commit comments