client/securedrop_client/conversation/transcript/transcript.py (26 lines of code) (raw):

import gettext from jinja2 import Environment, PackageLoader, select_autoescape from securedrop_client import db as database from .items import Item from .items import transcribe as transcribe_item env = Environment( loader=PackageLoader("securedrop_client.conversation.transcript"), autoescape=select_autoescape(), extensions=["jinja2.ext.i18n"], # Since our plain-text templates have literal whitespace: lstrip_blocks=True, trim_blocks=True, ) env.install_gettext_translations(gettext) # type: ignore[attr-defined] def transcribe(record: database.Base) -> Item | None: return transcribe_item(record) class Transcript: def __init__(self, conversation: database.Source) -> None: self._items = list( filter( lambda record: record is not None and record.type is not None, [transcribe(record) for record in conversation.collection], ) ) self._template = env.get_template("transcript.txt.jinja") def __str__(self) -> str: return self._template.render(items=self._items)