Source code for gfw.common.jinja2
"""Helpers for working with Jinja2 templates and environments."""
from typing import Any
from jinja2 import Environment, PackageLoader
[docs]
class EnvironmentLoader:
"""Helper to instantiate :class:`jinja2.Environment` with sensible defaults.
This class centralizes configuration for Jinja2 environments,
including trimming blocks, left-stripping whitespace, and disabling autoescape
(useful for SQL templates). Defaults can be overridden when instantiating
the class or when creating an environment.
"""
def __init__(self, **defaults: Any) -> None:
"""Initializes the EnvironmentLoader with optional default settings.
Args:
**defaults:
Any arguments to be passed to :class:`jinja2.Environment` constructor.
"""
self.defaults: dict[str, Any] = {
"autoescape": False,
"trim_blocks": True,
"lstrip_blocks": True,
}
self.defaults.update(defaults)
[docs]
def from_package(self, package: str, path: str) -> Environment:
"""Creates a :class:`jinja2.Environment` for a given package and template path.
Args:
package:
The Python package where the templates are located.
path:
The path to the templates inside the package.
Returns:
A configured :class:`jinja2.Environment` instance ready to load templates.
"""
return Environment(
loader=PackageLoader(package_name=package, package_path=path), **self.defaults
)