Remove generate_outfile function

master
Lertsenem 2021-07-03 20:18:51 +02:00
parent 0bf4a7dc0e
commit e23294fd06
1 changed files with 0 additions and 173 deletions

View File

@ -8,179 +8,6 @@ import urllib
import jinja2
# =============================================================================
def generate_outfile(
templatesdir,
templatename,
context,
outfilename,
log = None,
cachedir = None,
options = {},
):
# Template rendering
# -------------------------------------------------------------------------
log.info("Generating SVG using '{}' template".format(templatename))
log.debug("Context : {}".format(context))
log.debug("Options : {}".format(options))
log.debug(
"Initializing jinja2 with template dir '{}'" \
.format(templatesdir)
)
jj2_env = jinja2.Environment(
loader = jinja2.FileSystemLoader(
str(templatesdir),
)
)
try:
jj2_tpl = jj2_env.get_template(
# Jinja specific path format
"{}/template.svg.j2".format(templatename),
)
except Exception as e:
log.error("Could not find template '{}'".format(templatename))
log.debug(e, exc_info=1)
return None
# To SVG
# -------------------------------------------------------------------------
if outfilename.suffix == ".svg":
if options.get("svg_embed_png", False):
log.debug("embedding png images")
with open(outfilename, "w") as out:
for line in jj2_tpl.render(context).splitlines():
l = line.strip()
if ( l.startswith("xlink:href=\"file://")
and l.endswith(".png\"") ):
l = html.parser.unescape(l)
image_url = urllib.parse.urlparse(
"=".join( l.split("=")[1:] )[1:-1],
)
log.debug("embedding image '{}'".format(image_url.path))
with open(image_url.path, "rb") as image:
line = "xlink:href=\"data:image/png;base64,{d}\"" \
.format(
d = base64 \
.b64encode(image.read()) \
.decode("ascii"),
)
out.write(line)
out.write("\n")
else:
jj2_tpl.stream(context).dump( str(outfilename) )
return outfilename
# To PNG with inkscape
# -------------------------------------------------------------------------
if outfilename.suffix == ".png":
cachedir.mkdir(parents=True, exist_ok=True)
tmpsvg = tempfile.NamedTemporaryFile(
suffix=".svg",
mode = "w",
delete = False,
dir = str(cachedir),
)
tmpsvg.close()
try:
log.info(
"Exporting to {} using inkscape" \
.format(outfilename.suffix),
)
import subprocess
jj2_tpl.stream(context).dump( tmpsvg.name )
inkscape_process = subprocess.Popen(
[
"inkscape",
tmpsvg.name,
"--export-filename",
str(outfilename),
],
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
universal_newlines = True,
)
for line_out in iter(inkscape_process.stdout.readline, ""):
log.debug(line_out)
inkscape_process.stdout.close()
rv = inkscape_process.wait()
if rv != 0:
raise Exception(
"Bad inkscape return code '{}'" \
.format(inkscape_process.returncode)
)
return outfilename
except Exception as e:
log.warning("Failed to export with inkscape")
log.debug(e, exc_info=True)
finally:
os.unlink(tmpsvg.name)
# To png, pdf or ps with cairosvg
# -------------------------------------------------------------------------
if outfilename.suffix in [ ".png", ".pdf", ".ps" ]:
log.info("Exporting to {} using cairosvg".format(outfilename.suffix))
try:
import cairosvg
except ImportError as e:
log.error(
"Failed to export to '{}' with cairosvg" \
.format(
outfilename,
)
)
log.debug(e)
else:
svg_str = jj2_tpl.render(context)
if outfilename.suffix == ".png":
conversion_fun = cairosvg.svg2png
elif outfilename.suffix == ".pdf":
conversion_fun = cairosvg.svg2pdf
elif outfilename.suffix == ".ps":
conversion_fun = cairosvg.svg2ps
conversion_fun(
bytestring = svg_str,
write_to = str(outfilename),
)
return outfilename
# To unsupported format
# -------------------------------------------------------------------------
log.error(
"Can't export to '{}' : unsupported format '{}'" \
.format(
outfilename,
outfilename.suffix,
)
)
return None
# =============================================================================
def generate_pic(
templatesdir,