160 lines
4.4 KiB
Python
160 lines
4.4 KiB
Python
import json
|
|
from flask import request, 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
|
|
from json import JSONEncoder
|
|
|
|
from app.scrapers import scrapeSite
|
|
|
|
|
|
@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("postNew", viewId=wishlist.viewId, editId=wishlist.editId)
|
|
)
|
|
|
|
return render_template("new.html", form=form)
|
|
|
|
|
|
@app.route("/post_new/<viewId>/<editId>")
|
|
def postNew(viewId: str, editId: str):
|
|
|
|
return render_template("post_new.html", viewId=viewId, editId=editId)
|
|
|
|
|
|
@app.route("/edit/<id>", 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.it_new_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/<id>", 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)
|
|
|
|
|
|
@app.route("/scrape", methods=["GET"])
|
|
def scrape():
|
|
url = request.args.get("url")
|
|
if url is None:
|
|
abort(400)
|
|
|
|
scraped = scrapeSite(url)
|
|
if scraped is None:
|
|
abort(404)
|
|
|
|
return json.dumps(scraped.__dict__)
|