jean-web/jweb/extensions/yaml.py

24 lines
642 B
Python

from typing import Any
from yaml import Loader, load
from jweb.content import Content, ContentField
from jweb.context import Context
def load_extension(context: Context) -> None:
context.add_filters(yaml=_load_yaml)
def _load_yaml(content: Any) -> ContentField:
if not isinstance(content, Content) or not isinstance(content.data, (str, bytes)):
raise ValueError("yaml filter can only accept byte or string content")
data = content.data
if isinstance(data, bytes):
data = data.decode("utf-8")
assert isinstance(data, str)
return ContentField(content.path, load(data, Loader), content.language)