app/services/message_builder.py:22:class HtmlValidationError(Exception):
22:class HtmlValidationError(Exception):
114: raise HtmlValidationError(f"PDF conversion failed: {e}") from e
---TESTPDF-EP---
"unknown_variables": res.unknown, "missing_variables": res.missing,
"warnings": problems,
"generated": {"invoice_number": g.invoice_number, "amount": g.amount,
"shipping": g.shipping}}
@router.post("/{template_id}/test-pdf")
async def test_pdf(template_id: int, sample: dict = {},
user: User = Depends(get_current_user_csrf), db: AsyncSession = Depends(get_db)):
"""Real HTML->PDF conversion test; returns the PDF inline."""
t = await db.get(EmailTemplate, template_id)
if not t or t.user_id != user.id:
raise HTTPException(404, "Not found")
from app.services.variable_engine import GeneratedValues, VariableEngine
engine = VariableEngine(sample.get("config", {}))
g = GeneratedValues(invoice_number=engine.generate_invoice_number(set()),
amount=engine.generate_amount(), shipping=engine.generate_shipping(),
invoice_date=sample.get("invoice_date", "2026-01-15"),
due_date=sample.get("due_date", "2026-01-30"))
res = engine.substitute(t.body_html, sample.get("recipient", {}), g,
extra={"unsubscribe_link": "https://example.com/unsubscribe"})
pdf = message_builder.html_to_pdf(res.text)
import base64
return {"pdf_base64": base64.b64encode(pdf).decode(), "size_bytes": len(pdf),
"engine": "WeasyPrint"}