"""Additional pyramid renderers."""
import pkg_resources
from yaml import safe_load
[docs]class YAMLToPython:
"""YAML to python renderer using :py:func:`yaml.safe_load`."""
def __init__(self, info: dict):
"""See :py:meth:`pyramid.interfaces.IRendererFactory.__call__`."""
def __call__(self, value: dict, system: dict) -> object:
"""Render yaml file :term:asset` given in `system` to python.
:param value: additional keyword passed to the renderer, not used.
:param system: dict including `renderer_name` (yaml file asset)
:raise ValueError: if the yaml file asset does not exist.
See :py:meth:`pyramid.interfaces.IRenderer.__call__`
"""
asset = system['renderer_name']
package, filename = asset.split(':')
path = pkg_resources.resource_filename(package, filename)
if not pkg_resources.resource_exists(package, filename):
msg = 'Missing template asset: {0}:{1}'
raise ValueError(msg.format(package, filename))
with open(path, 'r') as f:
appstruct = safe_load(f)
return appstruct
[docs]def includeme(config):
"""Register renderers."""
config.add_renderer(name='.yaml', factory=YAMLToPython)