Source code for flambe.utils.config

import os
import re
from typing import Dict

import jinja2


[docs]def generate_config_from_template(template_path: str, config_path: str, remove_comments: bool = False, **template_kwargs: Dict[str, str]): """ Parameters ---------- template_path: str The path to the config template config_path: str The path to which the rendered config should be written remove_comments: bool If `True`, removes comments from the rendered config before writing it to disk template_kwargs: Keyword arguments to pass to your template, e.g. `path='config.yaml', foo='bar'` Example config: ```yaml !Experiment foo: {{ bar }} baz: {{ skittles }} ``` If saved as config.yaml.template, then invoking: ```python generate_config_from_template('config.yaml.template', 'config.yaml', bar='pickles', skittles='yum') ``` the following config will be written to 'config.yaml': ```yaml !Experiment foo: pickles baz: yum ``` """ dirname = os.path.dirname(template_path) basename = os.path.basename(template_path) loader = jinja2.FileSystemLoader(searchpath=dirname) env = jinja2.Environment(loader=loader, autoescape=True) template = env.get_template(basename) with open(config_path, 'w') as f: for line in template.render(**template_kwargs).split('\n'): if remove_comments: line = re.sub('# .*', '', line).rstrip() if line: f.write(line + '\n')