"""
Mako Renderer for Salt

This renderer requires the Mako library.

To install Mako, do the following:

.. code-block: bash

    salt-pip install mako
"""

import io

import salt.utils.templates
from salt.exceptions import SaltRenderError


def render(template_file, saltenv="base", sls="", context=None, tmplpath=None, **kws):
    """
    Render the template_file, passing the functions and grains into the
    Mako rendering system.

    :rtype: string
    """
    tmp_data = salt.utils.templates.MAKO(
        template_file,
        to_str=True,
        salt=__salt__,
        grains=__grains__,
        opts=__opts__,
        pillar=__pillar__,
        saltenv=saltenv,
        sls=sls,
        context=context,
        tmplpath=tmplpath,
        **kws
    )
    if not tmp_data.get("result", False):
        raise SaltRenderError(
            tmp_data.get("data", "Unknown render error in mako renderer")
        )
    return io.StringIO(tmp_data["data"])
