diff --git a/flake.nix b/flake.nix index 0185691..7a88329 100644 --- a/flake.nix +++ b/flake.nix @@ -19,11 +19,11 @@ overlays = [devshell.overlays.default]; }; mach-lib = mach-nix.lib."${system}"; - in { + in rec { packages.default = mach-lib.mkPython { requirements = builtins.readFile ./requirements.txt; }; - devShells.default = pkgs.devshell.mkShell {packages = with pkgs; [imagemagick];}; + devShells.default = pkgs.devshell.mkShell {packages = with pkgs; [packages.default imagemagick resvg python3Packages.brother-ql];}; formatter = pkgs.alejandra; }); } diff --git a/main.py b/main.py new file mode 100644 index 0000000..7bebce6 --- /dev/null +++ b/main.py @@ -0,0 +1,85 @@ +import os +import sqlite3 +import json +from quart import Quart, render_template, websocket, request, redirect, send_from_directory +import re +import requests +import subprocess +from io import UnsupportedOperation + +app = Quart(__name__) +app.config['TEMPLATES_AUTO_RELOAD'] = True +headers = { + 'User-Agent': 'iso7010print/0.0.1', +} + +with open("dump.json") as f: + ws = sorted( + filter(lambda e: re.search("W\d+", e["name"]), json.load(f)), + key=lambda e: e["name"], + ) +with open("custom.json") as cf: + cws = sorted( + json.load(cf), + key=lambda e: e["name"], + ) + +indexed = { w["name"]: w for w in ws} | { w["name"]: (w | dict(local=True)) for w in cws} + +db = sqlite3.connect("counts.db") +cur = db.cursor() +cur.execute("CREATE TABLE IF NOT EXISTS counts(what, count)") + +@app.route("/", methods=["GET"]) +async def home(): + return await render_template("index.html", ws=ws, cws=cws) + +@app.route('/static/') +def staticfile(path): + return send_from_directory('static', path) + +def printit(filename): + subprocess.run(f"brother_ql -b pyusb -p usb://0x04f9:0x2042 -m QL-700 print -l62 {filename}", shell=True, check=True) + +@app.route("/", methods=["POST"]) +async def print(): + w = (await request.form)["w"] + thewarn = indexed[w] + if thewarn.get("local"): + printit(thewarn["url"].removeprefix("/")) + lol = thewarn["name"] + else: + filename = thewarn["url"].split("/")[-1] + lol = re.search('W\d+', filename)[0] + png_filename = f"{lol}.png" + quad_png_filename = f"{lol}_quad.png" + if not os.path.exists(filename): + r = requests.get(thewarn["url"], headers=headers) + r.raise_for_status() + with open(filename, "wb") as file: + file.write(r.content) + if not os.path.exists(png_filename): + subprocess.run(f"resvg {filename} {png_filename}", shell=True, check=True) + subprocess.run(f"convert {png_filename} -resize 696x -background white -alpha remove -alpha off -monochrome -threshold 20% {png_filename}", shell=True, check=True) + #if not os.path.exists(quad_png_filename): + # subprocess.run("magick -size 696x xc:white ({png_filename} -resize 50%x) + printit(png_filename) + # with open("count.txt", "w") as cf: + # try: + # c = int(cf.read()) + # except UnsupportedOperation: # no file + # c = 0 + # cf.write(str(c + 1)) + cur.execute("""INSERT OR REPLACE INTO counts(what, count) + VALUES (:what, + COALESCE( + (SELECT count FROM counts + WHERE what=:what), + 0) + 1); + """, dict(what=lol)) + db.commit() + + + return redirect("/") +if __name__ == "__main__": + app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..88293a7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +requests +quart diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..c89921f --- /dev/null +++ b/templates/index.html @@ -0,0 +1,58 @@ + + + + + + + + +

ISO7010 Warning Stickers On Demand

+

Please do not abuse kthxbai!

+
+ + +
+

Official ISO7010

+
+ {% for w in ws %} +
+ +
+ {{ w.name }} +
+ +
+
+
+ {% endfor %} +
+

"Unofficial" ISO7010

+
+ {% for w in cws %} +
+ +
+ {{ w.name }} +
+ +
+
+
+ {% endfor %} +
+ +