from flask import url_for, redirect, render_template, abort from app import app, db from app.forms import ( NewWishlist, DeleteWishlist, EditWishlistInfo, ResetWishlistUrls, NewItem, DeleteItem, CheckItem, parseHiddenIndex, ) from app.models import Wishlist, Item from uuid import UUID, uuid4 as uuid @app.route("/") def index(): return "hello" @app.route("/new", methods=["GET", "POST"]) def new(): form = NewWishlist() if form.validate_on_submit(): wishlist = Wishlist(str(form.title.data), str(form.description.data)) db.session.add(wishlist) db.session.commit() return redirect(url_for("view", id=wishlist.viewId)) return render_template("new.html", form=form) @app.route("/edit/", methods=["GET", "POST"]) def edit(id: str): wishlist: Wishlist = db.one_or_404( db.select(Wishlist).filter_by(editId=UUID(id)), description="Failed to get wishlist. Are you sure this is the correct url?", ) form_wl_delete = DeleteWishlist() form_wl_editinfo = EditWishlistInfo() form_wl_reseturls = ResetWishlistUrls() form_it_new = NewItem() form_it_delete = DeleteItem() # Each submit needs a different page fot it to work on the same page. if form_wl_delete.validate_on_submit() and form_wl_delete.wl_del_submit.data: for i in wishlist.items: db.session.delete(i) db.session.delete(wishlist) db.session.commit() return redirect(url_for("index")) elif form_wl_editinfo.validate_on_submit() and form_wl_editinfo.wl_edit_submit.data: wishlist.title = str(form_wl_editinfo.title.data) wishlist.description = str(form_wl_editinfo.description.data) db.session.commit() return redirect(url_for("edit", id=id)) elif ( form_wl_reseturls.validate_on_submit() and form_wl_reseturls.wl_reset_submit.data ): wishlist.editId = uuid() wishlist.viewId = uuid() db.session.commit() return redirect(url_for("edit", id=wishlist.editId)) elif form_it_new.validate_on_submit() and form_it_new.it_new_submit.data: f = form_it_new price = f.price.data if f.price.data != None else 0 item = Item( str( f.title.data, ), str( f.description.data, ), price, str( f.url.data, ), str( f.image.data, ), ) wishlist.items.append(item) db.session.commit() return redirect(url_for("edit", id=id)) elif form_it_delete.validate_on_submit() and form_it_delete.it_del_submit.data: index = parseHiddenIndex(form_it_delete.index, wishlist.items) if index == None: return abort(400) wishlist.items.remove(wishlist.items[index]) db.session.commit() return redirect(url_for("edit", id=id)) return render_template( "edit.html", wishlist=wishlist, form_wl_delete=form_wl_delete, form_wl_editinfo=form_wl_editinfo, form_wl_reseturls=form_wl_reseturls, form_it_new=form_it_new, form_it_delete=form_it_delete, ) @app.route("/view/", methods=["GET", "POST"]) def view(id: str): wishlist: Wishlist = db.one_or_404( db.select(Wishlist).filter_by(viewId=UUID(id)), description="Failed to get wishlist. Are you sure this is the correct url?", ) checkform = CheckItem() checkform.num if checkform.validate_on_submit(): index = parseHiddenIndex(checkform.num, wishlist.items) if index == None: return abort(400) wishlist.items[index].bought = True db.session.commit() return redirect(url_for("view", id=id)) return render_template("view.html", wishlist=wishlist, form=checkform)