Source code for pykern.pkjinja

# -*- coding: utf-8 -*-
u"""Simplify rendering jinja2

:copyright: Copyright (c) 2015 Bivio Software, Inc.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from __future__ import absolute_import, division, print_function
from pykern.pkdebug import pkdc, pkdp

import jinja2

from pykern import pkinspect
from pykern import pkio
from pykern import pkresource


[docs]def render_file(filename, j2_ctx, output=None, strict_undefined=False): """Render filename as template with j2_ctx. Args: basename (str): name without jinja extension j2_ctx (dict): how to replace values in Jinja2 template output (str): file name of output; if None, return str strict_undefined (bool): set `jinja2.StrictUndefined` if True Returns: str: rendered template """ t = pkio.read_text(filename) kw = dict( trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=True, ) if strict_undefined: kw['undefined'] = jinja2.StrictUndefined je = jinja2.Environment(**kw) res = je.from_string(t).render(j2_ctx) if output: pkio.write_text(output, res) return res
[docs]def render_resource(basename, *args, **kwargs): """Render a pkresource as a jinja template. Args: basename (str): name without jinja extension args (list): see func:`render_file` for rest of args and return """ return render_file( pkresource.filename(basename + '.jinja', pkinspect.caller_module()), *args, **kwargs )