51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
import io
|
|
import json
|
|
import uuid
|
|
from io import BytesIO
|
|
|
|
import connexion
|
|
import jinja2
|
|
from docxtpl import DocxTemplate
|
|
from flask import send_file
|
|
from jinja2 import Template, UndefinedError
|
|
|
|
from crc.api.common import ApiError, ApiErrorSchema
|
|
from crc.scripts.CompleteTemplate import CompleteTemplate
|
|
from crc.services.file_service import FileService
|
|
|
|
|
|
def render_markdown(data, template):
|
|
"""
|
|
Provides a quick way to very that a Jinja markdown template will work properly on a given json
|
|
data structure. Useful for folks that are building these markdown templates.
|
|
"""
|
|
try:
|
|
template = Template(template)
|
|
data = json.loads(data)
|
|
return template.render(**data)
|
|
except UndefinedError as ue:
|
|
raise ApiError(code="undefined field", message=ue.message)
|
|
except Exception as e:
|
|
raise ApiError(code="invalid", message=str(e))
|
|
|
|
|
|
def render_docx(data):
|
|
"""
|
|
Provides a quick way to verify that a Jinja docx template will work properly on a given json
|
|
data structure. Useful for folks that are building these templates.
|
|
"""
|
|
try:
|
|
file = connexion.request.files['file']
|
|
target_stream = CompleteTemplate().make_template(file, json.loads(data))
|
|
return send_file(
|
|
io.BytesIO(target_stream.read()),
|
|
as_attachment=True,
|
|
attachment_filename="output.docx",
|
|
mimetype="application/octet-stream",
|
|
cache_timeout=-1 # Don't cache these files on the browser.
|
|
)
|
|
except ValueError as e:
|
|
raise ApiError(code="invalid", message=str(e))
|
|
except Exception as e:
|
|
raise ApiError(code="invalid", message=str(e))
|