Source code for condition.sql

from . import Condition
import os
from typing import Optional


[docs]def render_sql( sql_template: str, condition: Condition, dbmap: Optional[dict] = None ) -> str: """ Renders a jinja2 sql template with ``dict`` from :meth:`condition.to_sql_dict`. Optionally overwrite field names with ``dbmap``. Please see also `usage examples <usage.html#sql-generation>`_. :param sql_template: a jinja2 sql template. :param condition: for generating the ``dict`` of conditions to be used in sql :param dbmap: optionally overwrite field names. :raise UndefinedError: if a variable in sql template is undefined """ from jinja2 import Template, Environment, meta, StrictUndefined, UndefinedError kwargs = condition.to_sql_dict(dbmap) kwargs["env"] = os.environ try: template = Template(sql_template, undefined=StrictUndefined) rendered = template.render(**kwargs) except UndefinedError: reqd_vars = meta.find_undeclared_variables( Environment(autoescape=True).parse(sql_template) ) missing_vars = set(reqd_vars).difference(kwargs.keys()) msg = ( "Could not render sql template. It is missing some variables. " f"\nPlease check this set: {missing_vars}." ) # logging.exception(msg) raise UndefinedError(msg) return rendered