Support additional logos, starting with THW

This commit is contained in:
Fabian Müller 2024-09-25 01:29:15 +02:00
parent 88d5455296
commit 65b9c44579
3 changed files with 2195 additions and 3 deletions

View File

@ -23,16 +23,21 @@ class Generator:
GENERATOR_SCAD_FILE_NAME = "generator.scad" GENERATOR_SCAD_FILE_NAME = "generator.scad"
GENERATED_STL_FILE_NAME = "generated.stl" GENERATED_STL_FILE_NAME = "generated.stl"
def __init__(self, name: str, tempdir: Path | str): def __init__(self, name: str, tempdir: Path | str, logo: str = None):
self._name = name self._name = name
self._tempdir = Path(tempdir) self._tempdir = Path(tempdir)
# sanitize input
if "/" in logo:
raise ValueError("invalid logo name")
self._logo = Path(logo).name
def _generate_scad_template(self) -> str: def _generate_scad_template(self) -> str:
return f""" return f"""
use <bottle-clip.scad> use <bottle-clip.scad>
$fn=180; $fn=180;
// one name tag for 0.5l Club Mate and similar bottles // one name tag for 0.5l Club Mate and similar bottles
bottle_clip(name="{self._name}", logo="thing-logos/fablab.dxf"); bottle_clip(name="{self._name}", logo="thing-logos/{self._logo}.dxf");
""" """
def _generate_files_in_temp_dir(self): def _generate_files_in_temp_dir(self):
@ -83,6 +88,7 @@ async def generate():
raise ValueError raise ValueError
name = data["name"] name = data["name"]
logo = data.get("logo", None)
except (TypeError, KeyError, ValueError): except (TypeError, KeyError, ValueError):
abort(400) abort(400)
@ -90,7 +96,7 @@ async def generate():
async with semaphore: async with semaphore:
with tempfile.TemporaryDirectory(prefix="fablab-bottle-clip-generator-") as tempdir: with tempfile.TemporaryDirectory(prefix="fablab-bottle-clip-generator-") as tempdir:
generator = Generator(name, tempdir) generator = Generator(name, tempdir, logo)
generated_stl_file_name = await generator.generate_stl() generated_stl_file_name = await generator.generate_stl()

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@
data() { data() {
return { return {
name: "", name: "",
logo: "fablab",
fetching: false, fetching: false,
error: false, error: false,
} }
@ -50,6 +51,7 @@
method: "post", method: "post",
body: JSON.stringify({ body: JSON.stringify({
"name": this.name, "name": this.name,
"logo": this.logo,
}), }),
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
@ -87,6 +89,10 @@
<form ref="form" action="{{ url_for('generate') }}" method="post"> <form ref="form" action="{{ url_for('generate') }}" method="post">
<label for="name">Name:</label> <label for="name">Name:</label>
<input type="text" id="name" name="name" style="text-align: center;" placeholder="Name" v-model="name" :disabled="fetching" :aria-invalid="name === ''"> <input type="text" id="name" name="name" style="text-align: center;" placeholder="Name" v-model="name" :disabled="fetching" :aria-invalid="name === ''">
<select id="logo" name="logo" v-model="logo" :disabled="fetching" aria-label="Logo auswählen" required>
<option value="fablab">FabLab</option>
<option value="thw">THW</option>
</select>
<button v-if="!fetching" ref="submitButton" type="submit" @click="generate" :disabled="name === ''">Generieren</button> <button v-if="!fetching" ref="submitButton" type="submit" @click="generate" :disabled="name === ''">Generieren</button>
<button v-if="fetching" style="display: none" v-show="true" type="button" disabled="true" aria-busy="true">Generiere...</button> <button v-if="fetching" style="display: none" v-show="true" type="button" disabled="true" aria-busy="true">Generiere...</button>
</form> </form>