From 3b5d1a932c3507be13bfe31870d5d5d246b18ad1 Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Wed, 29 Apr 2020 15:29:35 +0200 Subject: [PATCH] Better handling of concurrent requests It now supports multiple name tags for different names to be generated at the same time. Two concurrent requests for the same name will probably fail. --- namensschild.scad => namensschild.scad.j2 | 2 +- server.py | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) rename namensschild.scad => namensschild.scad.j2 (91%) diff --git a/namensschild.scad b/namensschild.scad.j2 similarity index 91% rename from namensschild.scad rename to namensschild.scad.j2 index 3638359..5efe054 100644 --- a/namensschild.scad +++ b/namensschild.scad.j2 @@ -11,7 +11,7 @@ height_plate = 1; module name_file() { translate([(width-name_width)/2, (length-name_length)/2, 0]) difference() { square([name_width, name_length]); - resize([name_width, name_length, 0]) import("static/namensschild.dxf"); + resize([name_width, name_length, 0]) import("{{ name }}.dxf"); } } diff --git a/server.py b/server.py index 917c63e..1864209 100755 --- a/server.py +++ b/server.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +from jinja2 import Template from pyppeteer import launch from quart import Quart, request, render_template, url_for, redirect from subprocess import run @@ -17,7 +18,7 @@ async def gen_pdf(name): page = await browser.newPage() await page.goto("file://" + os.path.join(os.getcwd(), "namensschild.html")) await page.evaluate(f"document.querySelector('#name').innerText = '{name}'") - await page.pdf(path="static/namensschild.pdf", width="180px", height="60px") + await page.pdf(path=f"static/{name}.pdf", width="180px", height="60px") await browser.close() @@ -31,7 +32,7 @@ async def generate(): name = request.args["name"] await gen_pdf(name) run_check( - ["inkscape", "-T", "-E", "static/namensschild.eps", "static/namensschild.pdf",] + ["inkscape", "-T", "-E", f"static/{name}.eps", f"static/{name}.pdf",] ) run_check( [ @@ -42,11 +43,17 @@ async def generate(): "-dt", "-f", "dxf: -polyaslines -mm", - "static/namensschild.eps", - "static/namensschild.dxf", + f"static/{name}.eps", + f"static/{name}.dxf", ] ) - run_check(["openscad", "-o", f"static/{name}.stl", "namensschild.scad"]) + + with open("namensschild.scad.j2", "r") as f: + template = Template(f.read()) + with open(f"static/{name}.scad", "w") as f: + f.write(template.render(name=name)) + run_check(["openscad", "-o", f"static/{name}.stl", f"static/{name}.scad"]) + return redirect(url_for("static", filename=f"{name}.stl"), code=302)