From 8ac22378929a4bc39a92ee9adfd03736bf7396db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20K=C3=B6rber?= Date: Sat, 2 Jul 2022 22:03:35 +0200 Subject: [PATCH] Add another attempt with python --- python_flask/.gitignore | 3 + python_flask/app.js | 10 + python_flask/app.py | 232 ++++++++++++++++++ python_flask/requirements.txt | 12 + python_flask/run.sh | 4 + {api => rust_warp_svelte/api}/.gitignore | 0 {api => rust_warp_svelte/api}/Cargo.lock | 0 {api => rust_warp_svelte/api}/Cargo.toml | 0 {api => rust_warp_svelte/api}/README.md | 0 {api => rust_warp_svelte/api}/src/db.rs | 0 {api => rust_warp_svelte/api}/src/lib.rs | 0 {api => rust_warp_svelte/api}/src/main.rs | 0 .../api}/src/packagelist.rs | 0 {api => rust_warp_svelte/api}/src/router.rs | 0 {api => rust_warp_svelte/api}/src/trip.rs | 0 {ui => rust_warp_svelte/ui}/.gitignore | 0 .../ui}/.vscode/extensions.json | 0 {ui => rust_warp_svelte/ui}/README.md | 0 {ui => rust_warp_svelte/ui}/package-lock.json | 0 {ui => rust_warp_svelte/ui}/package.json | 0 .../ui}/public/favicon.png | Bin {ui => rust_warp_svelte/ui}/public/global.css | 0 {ui => rust_warp_svelte/ui}/public/index.html | 0 {ui => rust_warp_svelte/ui}/rollup.config.js | 0 {ui => rust_warp_svelte/ui}/src/App.svelte | 0 .../ui}/src/components/PackageItem.svelte | 0 .../ui}/src/components/PackageList.svelte | 0 .../src/components/PackageListTable.svelte | 0 {ui => rust_warp_svelte/ui}/src/global.d.ts | 0 {ui => rust_warp_svelte/ui}/src/main.ts | 0 .../ui}/src/routes/Home.svelte | 0 .../ui}/src/routes/NotFound.svelte | 0 .../ui}/src/routes/PackageList.svelte | 0 .../ui}/src/routes/PackageLists.svelte | 0 .../ui}/src/routes/Preparation.svelte | 0 .../ui}/src/routes/Trip.svelte | 0 .../ui}/src/routes/Trips.svelte | 0 {ui => rust_warp_svelte/ui}/tsconfig.json | 0 38 files changed, 261 insertions(+) create mode 100644 python_flask/.gitignore create mode 100644 python_flask/app.js create mode 100644 python_flask/app.py create mode 100644 python_flask/requirements.txt create mode 100644 python_flask/run.sh rename {api => rust_warp_svelte/api}/.gitignore (100%) rename {api => rust_warp_svelte/api}/Cargo.lock (100%) rename {api => rust_warp_svelte/api}/Cargo.toml (100%) rename {api => rust_warp_svelte/api}/README.md (100%) rename {api => rust_warp_svelte/api}/src/db.rs (100%) rename {api => rust_warp_svelte/api}/src/lib.rs (100%) rename {api => rust_warp_svelte/api}/src/main.rs (100%) rename {api => rust_warp_svelte/api}/src/packagelist.rs (100%) rename {api => rust_warp_svelte/api}/src/router.rs (100%) rename {api => rust_warp_svelte/api}/src/trip.rs (100%) rename {ui => rust_warp_svelte/ui}/.gitignore (100%) rename {ui => rust_warp_svelte/ui}/.vscode/extensions.json (100%) rename {ui => rust_warp_svelte/ui}/README.md (100%) rename {ui => rust_warp_svelte/ui}/package-lock.json (100%) rename {ui => rust_warp_svelte/ui}/package.json (100%) rename {ui => rust_warp_svelte/ui}/public/favicon.png (100%) rename {ui => rust_warp_svelte/ui}/public/global.css (100%) rename {ui => rust_warp_svelte/ui}/public/index.html (100%) rename {ui => rust_warp_svelte/ui}/rollup.config.js (100%) rename {ui => rust_warp_svelte/ui}/src/App.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/components/PackageItem.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/components/PackageList.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/components/PackageListTable.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/global.d.ts (100%) rename {ui => rust_warp_svelte/ui}/src/main.ts (100%) rename {ui => rust_warp_svelte/ui}/src/routes/Home.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/NotFound.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/PackageList.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/PackageLists.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/Preparation.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/Trip.svelte (100%) rename {ui => rust_warp_svelte/ui}/src/routes/Trips.svelte (100%) rename {ui => rust_warp_svelte/ui}/tsconfig.json (100%) diff --git a/python_flask/.gitignore b/python_flask/.gitignore new file mode 100644 index 0000000..c3a4a1c --- /dev/null +++ b/python_flask/.gitignore @@ -0,0 +1,3 @@ +/__pycache__/ +/venv/ +*.sqlite diff --git a/python_flask/app.js b/python_flask/app.js new file mode 100644 index 0000000..d6dfe87 --- /dev/null +++ b/python_flask/app.js @@ -0,0 +1,10 @@ +document.body.addEventListener('htmx:responseError', function(evt) { + console.log(evt.detail); + let detail = evt.detail; + let responsecode = detail.xhr.status; + if (responsecode == 400 && detail.requestConfig.path === "/list/") { + alert(detail.xhr.response) + console.log(evt.detail.xhr.repsonse); + } +}); +console.log("Added event listener"); diff --git a/python_flask/app.py b/python_flask/app.py new file mode 100644 index 0000000..db14b1f --- /dev/null +++ b/python_flask/app.py @@ -0,0 +1,232 @@ +import uuid +import sqlalchemy +from flask import Flask, request, make_response + +from flask_sqlalchemy import SQLAlchemy + +import dominate +import dominate.tags as t +from dominate.util import raw + + +app = Flask(__name__) +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///./db.sqlite" +app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False +db = SQLAlchemy(app) + + +class PackageList(db.Model): + id = db.Column(db.String(36), primary_key=True) + name = db.Column(db.Text, unique=True) + description = db.Column(db.Text) + + +db.create_all() +try: + db.session.add( + PackageList( + id="ab2f16c2-d5f5-460b-b149-0fc9eec12887", + name="EDC", + description="What you always carry", + ) + ) + db.session.add( + PackageList( + id="9f3a72cd-7e30-4263-bd52-92fb7bed1242", + name="Camping", + description="For outdoors", + ) + ) + + db.session.commit() +except sqlalchemy.exc.IntegrityError: + pass + + +def get_packagelists(): + return PackageList.query.all() + + +def add_packagelist(name, description): + try: + db.session.add( + PackageList(id=str(uuid.uuid4()), name=name, description=description) + ) + db.session.commit() + except sqlalchemy.exc.IntegrityError: + return False + + +def delete_packagelist(id): + deletions = PackageList.query.filter_by(id=str(id)).delete() + if deletions == 0: + return False + else: + db.session.commit() + return True + + +def pkglist_table(): + pkglists = get_packagelists() + doc = t.div(id="packagelist-table") + with doc: + t.h1("Package Lists", _class=style("text-2xl", "mb-5")) + with t.table( + id="packagelist-table", + _class=style("table", "border-collapse", "border", "w-full"), + ): + with t.thead(_class=style("bg-gray-200")): + t.tr( + t.th("Name", _class=style("border", "p-2")), + t.th("Description", _class=style("border", "p-2")), + t.th(_class=style("border p-2")), + ) + with t.tbody(): + for pkglist in pkglists: + t.tr( + t.td(pkglist.name, _class=style("border", "p-2")), + t.td(str(pkglist.description), _class=style("border", "p-2")), + t.td( + "x", + id="delete-packagelist", + data_hx_delete=f"/list/{pkglist.id}", + data_hx_target="#packagelist-table", + data_hx_swap="outerHTML", + _class=style( + "border", + "bg-red-200", + "min-w-max", + "hover:bg-red-200", + "cursor-pointer", + "w-8", + "text-center", + ), + ), + _class=style("even:bg-gray-100", "hover:bg-purple-200"), + ) + + return doc + + +def style(*args): + return " ".join(args) + + +@app.route("/") +def root(): + doc = dominate.document(title="My cool title") + with doc.head: + t.script(src="https://unpkg.com/htmx.org@1.7.0") + t.script(src="https://cdn.tailwindcss.com") + t.link( + rel="stylesheet", + href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css", + ) + with doc: + with t.div(_class=style("p-8", "max-w-xl")): + t.script(raw(open("app.js").read())) + pkglist_table() + + with t.form( + name="new_pkglist", + data_hx_post="/list/", + data_hx_target="#packagelist-table", + data_hx_swap="outerHTML", + _class=style("mt-8", "p-5", "border-2", "border-gray-200"), + ): + with t.div(_class=style("mb-5", "flex", "flex-row", "items-center")): + t.span(_class=style("mdi", "mdi-playlist-plus", "text-2xl", "mr-4")) + t.p("Add new package list", _class=style("inline", "text-xl")) + with t.div(_class=style("w-11/12", "mx-auto")): + with t.div( + _class=style( + "flex", "flex-row", "justify-center", "items-center", "pb-8" + ) + ): + t.label( + "Name", + _for="listname", + _class=style("font-bold", "w-1/2", "text-center"), + ) + t._input( + type="text", + id="listname", + name="name", + value="", + _class=style( + "block", + "w-1/2", + "p-2", + "bg-gray-100", + "appearance-none", + "border-2", + "border-gray-300", + "rounded", + "focus:outline-none", + "focus:bg-white", + "focus:border-purple-500", + ), + ) + with t.div( + _class=style( + "flex", "flex-row", "justify-center", "items-center", "pb-8" + ) + ): + t.label( + "Description", + _for="listdesc", + _class=style("font-bold", "w-1/2", "text-center"), + ) + t._input( + type="text", + id="listdesc", + name="description", + value="", + _class=style( + "block", + "w-1/2", + "p-2", + "bg-gray-100", + "appearance-none", + "border-2", + "border-gray-300", + "rounded", + "focus:outline-none", + "focus:bg-white", + "focus:border-purple-500", + ), + ) + t._input( + type="submit", + value="Add", + _class=style( + "py-2", + "border-2", + "rounded", + "border-gray-300", + "mx-auto", + "w-full", + "hover:border-purple-500", + "hover:bg-purple-200", + ), + ) + + return doc.render() + + +@app.route("/list/", methods=["POST"]) +def add_new_list(): + print(request.form) + name = request.form["name"] + description = request.form["description"] + if add_packagelist(name=name, description=description) is False: + return make_response(f'A package list with name "{name}" already exists', 400) + + return pkglist_table().render() + + +@app.route("/list/", methods=["DELETE"]) +def delete_list(id): + if not delete_packagelist(id=id): + return make_response("", 404) + return pkglist_table().render() diff --git a/python_flask/requirements.txt b/python_flask/requirements.txt new file mode 100644 index 0000000..2799641 --- /dev/null +++ b/python_flask/requirements.txt @@ -0,0 +1,12 @@ +click==8.1.3 +dominate==2.6.0 +Flask==2.1.2 +Flask-SQLAlchemy==2.5.1 +greenlet==1.1.2 +importlib-metadata==4.12.0 +itsdangerous==2.1.2 +Jinja2==3.1.2 +MarkupSafe==2.1.1 +SQLAlchemy==1.4.39 +Werkzeug==2.1.2 +zipp==3.8.0 diff --git a/python_flask/run.sh b/python_flask/run.sh new file mode 100644 index 0000000..17a1ab2 --- /dev/null +++ b/python_flask/run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +source ./venv/bin/activate +python3 -m flask run --reload diff --git a/api/.gitignore b/rust_warp_svelte/api/.gitignore similarity index 100% rename from api/.gitignore rename to rust_warp_svelte/api/.gitignore diff --git a/api/Cargo.lock b/rust_warp_svelte/api/Cargo.lock similarity index 100% rename from api/Cargo.lock rename to rust_warp_svelte/api/Cargo.lock diff --git a/api/Cargo.toml b/rust_warp_svelte/api/Cargo.toml similarity index 100% rename from api/Cargo.toml rename to rust_warp_svelte/api/Cargo.toml diff --git a/api/README.md b/rust_warp_svelte/api/README.md similarity index 100% rename from api/README.md rename to rust_warp_svelte/api/README.md diff --git a/api/src/db.rs b/rust_warp_svelte/api/src/db.rs similarity index 100% rename from api/src/db.rs rename to rust_warp_svelte/api/src/db.rs diff --git a/api/src/lib.rs b/rust_warp_svelte/api/src/lib.rs similarity index 100% rename from api/src/lib.rs rename to rust_warp_svelte/api/src/lib.rs diff --git a/api/src/main.rs b/rust_warp_svelte/api/src/main.rs similarity index 100% rename from api/src/main.rs rename to rust_warp_svelte/api/src/main.rs diff --git a/api/src/packagelist.rs b/rust_warp_svelte/api/src/packagelist.rs similarity index 100% rename from api/src/packagelist.rs rename to rust_warp_svelte/api/src/packagelist.rs diff --git a/api/src/router.rs b/rust_warp_svelte/api/src/router.rs similarity index 100% rename from api/src/router.rs rename to rust_warp_svelte/api/src/router.rs diff --git a/api/src/trip.rs b/rust_warp_svelte/api/src/trip.rs similarity index 100% rename from api/src/trip.rs rename to rust_warp_svelte/api/src/trip.rs diff --git a/ui/.gitignore b/rust_warp_svelte/ui/.gitignore similarity index 100% rename from ui/.gitignore rename to rust_warp_svelte/ui/.gitignore diff --git a/ui/.vscode/extensions.json b/rust_warp_svelte/ui/.vscode/extensions.json similarity index 100% rename from ui/.vscode/extensions.json rename to rust_warp_svelte/ui/.vscode/extensions.json diff --git a/ui/README.md b/rust_warp_svelte/ui/README.md similarity index 100% rename from ui/README.md rename to rust_warp_svelte/ui/README.md diff --git a/ui/package-lock.json b/rust_warp_svelte/ui/package-lock.json similarity index 100% rename from ui/package-lock.json rename to rust_warp_svelte/ui/package-lock.json diff --git a/ui/package.json b/rust_warp_svelte/ui/package.json similarity index 100% rename from ui/package.json rename to rust_warp_svelte/ui/package.json diff --git a/ui/public/favicon.png b/rust_warp_svelte/ui/public/favicon.png similarity index 100% rename from ui/public/favicon.png rename to rust_warp_svelte/ui/public/favicon.png diff --git a/ui/public/global.css b/rust_warp_svelte/ui/public/global.css similarity index 100% rename from ui/public/global.css rename to rust_warp_svelte/ui/public/global.css diff --git a/ui/public/index.html b/rust_warp_svelte/ui/public/index.html similarity index 100% rename from ui/public/index.html rename to rust_warp_svelte/ui/public/index.html diff --git a/ui/rollup.config.js b/rust_warp_svelte/ui/rollup.config.js similarity index 100% rename from ui/rollup.config.js rename to rust_warp_svelte/ui/rollup.config.js diff --git a/ui/src/App.svelte b/rust_warp_svelte/ui/src/App.svelte similarity index 100% rename from ui/src/App.svelte rename to rust_warp_svelte/ui/src/App.svelte diff --git a/ui/src/components/PackageItem.svelte b/rust_warp_svelte/ui/src/components/PackageItem.svelte similarity index 100% rename from ui/src/components/PackageItem.svelte rename to rust_warp_svelte/ui/src/components/PackageItem.svelte diff --git a/ui/src/components/PackageList.svelte b/rust_warp_svelte/ui/src/components/PackageList.svelte similarity index 100% rename from ui/src/components/PackageList.svelte rename to rust_warp_svelte/ui/src/components/PackageList.svelte diff --git a/ui/src/components/PackageListTable.svelte b/rust_warp_svelte/ui/src/components/PackageListTable.svelte similarity index 100% rename from ui/src/components/PackageListTable.svelte rename to rust_warp_svelte/ui/src/components/PackageListTable.svelte diff --git a/ui/src/global.d.ts b/rust_warp_svelte/ui/src/global.d.ts similarity index 100% rename from ui/src/global.d.ts rename to rust_warp_svelte/ui/src/global.d.ts diff --git a/ui/src/main.ts b/rust_warp_svelte/ui/src/main.ts similarity index 100% rename from ui/src/main.ts rename to rust_warp_svelte/ui/src/main.ts diff --git a/ui/src/routes/Home.svelte b/rust_warp_svelte/ui/src/routes/Home.svelte similarity index 100% rename from ui/src/routes/Home.svelte rename to rust_warp_svelte/ui/src/routes/Home.svelte diff --git a/ui/src/routes/NotFound.svelte b/rust_warp_svelte/ui/src/routes/NotFound.svelte similarity index 100% rename from ui/src/routes/NotFound.svelte rename to rust_warp_svelte/ui/src/routes/NotFound.svelte diff --git a/ui/src/routes/PackageList.svelte b/rust_warp_svelte/ui/src/routes/PackageList.svelte similarity index 100% rename from ui/src/routes/PackageList.svelte rename to rust_warp_svelte/ui/src/routes/PackageList.svelte diff --git a/ui/src/routes/PackageLists.svelte b/rust_warp_svelte/ui/src/routes/PackageLists.svelte similarity index 100% rename from ui/src/routes/PackageLists.svelte rename to rust_warp_svelte/ui/src/routes/PackageLists.svelte diff --git a/ui/src/routes/Preparation.svelte b/rust_warp_svelte/ui/src/routes/Preparation.svelte similarity index 100% rename from ui/src/routes/Preparation.svelte rename to rust_warp_svelte/ui/src/routes/Preparation.svelte diff --git a/ui/src/routes/Trip.svelte b/rust_warp_svelte/ui/src/routes/Trip.svelte similarity index 100% rename from ui/src/routes/Trip.svelte rename to rust_warp_svelte/ui/src/routes/Trip.svelte diff --git a/ui/src/routes/Trips.svelte b/rust_warp_svelte/ui/src/routes/Trips.svelte similarity index 100% rename from ui/src/routes/Trips.svelte rename to rust_warp_svelte/ui/src/routes/Trips.svelte diff --git a/ui/tsconfig.json b/rust_warp_svelte/ui/tsconfig.json similarity index 100% rename from ui/tsconfig.json rename to rust_warp_svelte/ui/tsconfig.json