"""Template rows to API shapes. Both are built explicitly rather than validated from the row: the blueprint id and the description live inside `config`, and `yaml` is rendered per request, so there is nothing on the row to read them from. """ import yaml from app.api.templates.schemas import TemplateDetail, TemplateSummary from app.models import Template def summary(row: Template) -> TemplateSummary: return TemplateSummary( id=row.id, config_id=row.config.get("id", ""), name=row.name, version=row.version, description=row.config.get("description", ""), ) def detail(row: Template) -> TemplateDetail: return TemplateDetail( id=row.id, config_id=row.config.get("id", ""), name=row.name, version=row.version, description=row.config.get("description", ""), config=row.config, yaml=yaml.safe_dump(row.config, allow_unicode=True, sort_keys=False, width=80), )