Support additional logos, starting with THW
This commit is contained in:
		
							
								
								
									
										12
									
								
								app/app.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								app/app.py
									
									
									
									
									
								
							@@ -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()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2180
									
								
								app/openscad/thing-logos/thw.dxf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2180
									
								
								app/openscad/thing-logos/thw.dxf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user