from typing import Any from flask_wtf import FlaskForm from wtforms import ( StringField, SubmitField, IntegerField, HiddenField, FloatField, URLField, ) from wtforms.validators import DataRequired class NewWishlist(FlaskForm): title = StringField("Title:", validators=[DataRequired()]) description = StringField("Description:", validators=[DataRequired()]) submit = SubmitField("Submit") # Each submit needs a different page fot it to work on the same page. class DeleteWishlist(FlaskForm): wl_del_submit = SubmitField("Delete wishlist") class EditWishlistInfo(FlaskForm): title = StringField("Title", validators=[DataRequired()]) description = StringField("Description", validators=[DataRequired()]) wl_edit_submit = SubmitField("Submit") class ResetWishlistUrls(FlaskForm): wl_reset_submit = SubmitField("Reset urls") class NewItem(FlaskForm): title = StringField("Title", validators=[DataRequired()]) description = StringField("Description", validators=[DataRequired()]) price = FloatField("Price", validators=[DataRequired()]) url = URLField("Url", validators=[DataRequired()]) image = URLField("Image url", validators=[DataRequired()]) it_new_submit = SubmitField("Submit") class CheckItem(FlaskForm): num = HiddenField() class DeleteItem(FlaskForm): index = HiddenField() it_del_submit = SubmitField("Delete item") def parseHiddenIndex(field: HiddenField, array: list[Any]) -> int | None: try: if field.data == None or field.data == "": raise ValueError() index = int(field.data) if index > len(array): raise ValueError() return index - 1 except ValueError: return None