Source code for lesana.templating
"""
Custom jinja2 filters and other templating helpers
"""
import decimal
import io
import jinja2
import ruamel.yaml
[docs]class Environment(jinja2.Environment):
"""
A customized jinja2 environment that includes our filters.
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.filters['to_yaml'] = to_yaml
[docs]def to_yaml(data):
"""
Return the yaml representation of data.
"""
if isinstance(data, str):
if len(data) > 75 or "\n" in data:
try:
data = ruamel.yaml.scalarstring.LiteralScalarString(
data + "\n"
)
except AttributeError:
data = ruamel.yaml.scalarstring.PreservedScalarString(
data + "\n"
)
elif isinstance(data, decimal.Decimal):
data = str(data)
elif data is None:
return 'null'
yaml = ruamel.yaml.YAML()
s_io = io.StringIO()
yaml.dump({'data': data}, s_io)
res = s_io.getvalue()
res = res.lstrip('{data:').lstrip().strip('...\n').strip()
return res