diff --git a/.envrc b/.envrc
deleted file mode 100644
index 4d3e59f..0000000
--- a/.envrc
+++ /dev/null
@@ -1,2 +0,0 @@
-use flake
-export FLASK_APP=app
\ No newline at end of file
diff --git a/app/forms.py b/app/forms.py
index 452ad00..5cf3bcd 100644
--- a/app/forms.py
+++ b/app/forms.py
@@ -1,30 +1,65 @@
+from typing import Any
from flask_wtf import FlaskForm
-from wtforms import StringField, SubmitField, IntegerField, HiddenField
+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")
+ 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")
+ wl_del_submit = SubmitField("Delete wishlist")
+
class EditWishlistInfo(FlaskForm):
- title = StringField("Title:", validators=[DataRequired()])
- description = StringField("Description:", validators=[DataRequired()])
- wl_edit_submit = SubmitField("Submit")
+ title = StringField("Title", validators=[DataRequired()])
+ description = StringField("Description", validators=[DataRequired()])
+ wl_edit_submit = SubmitField("Submit")
+
class ResetWishlistUrls(FlaskForm):
- wl_reset_submit = SubmitField("Reset urls")
+ wl_reset_submit = SubmitField("Reset urls")
+
class NewItem(FlaskForm):
- title = StringField("Title:", validators=[DataRequired()])
- description = StringField("Description:", validators=[DataRequired()])
- price = IntegerField("Price:", validators=[DataRequired()])
- it_new_submit = SubmitField("Submit")
+ 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")
+ 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
diff --git a/app/models.py b/app/models.py
index 00ecd18..33228ee 100644
--- a/app/models.py
+++ b/app/models.py
@@ -1,35 +1,42 @@
-from typing import List
from app import db
-from sqlalchemy.orm import Mapped, mapped_column, RelationshipProperty
-from sqlalchemy import Uuid, String, Text
-from uuid import uuid4 as uuid
+from sqlalchemy.orm import Mapped, mapped_column, RelationshipProperty, relationship
+from sqlalchemy import Uuid, String, Text, String, ForeignKey
+from uuid import uuid4 as uuid, UUID
+
class Item(db.Model):
- def __init__(self, title: str, description: str, price: float):
- self.wishlist_id = None
- self.title = title
- self.description = description
- self.price = price
- self.bought = False
+ def __init__(
+ self, title: str, description: str, price: float, url: str, image: str
+ ):
+ self.bought = False
+ self.wishlist_id = None
+ self.title = title
+ self.description = description
+ self.price = price
+ self.url = url
+ self.image = image
+
+ id: Mapped[int] = mapped_column(primary_key=True)
+ wishlist_id: Mapped[int | None] = mapped_column(ForeignKey("wishlist.id"))
+ title: Mapped[str] = mapped_column(String(250))
+ description: Mapped[str] = mapped_column(Text)
+ price: Mapped[float] = mapped_column()
+ url: Mapped[str] = mapped_column(Text)
+ image: Mapped[str] = mapped_column(Text)
+ bought: Mapped[bool] = mapped_column()
- id: Mapped[int] = mapped_column(primary_key=True)
- wishlist_id: Mapped[int | None] = mapped_column(db.ForeignKey("wishlist.id"))
- title: Mapped[str] = mapped_column(db.String(250))
- description: Mapped[str] = mapped_column(db.Text)
- price: Mapped[float] = mapped_column()
- bought: Mapped[bool] = mapped_column()
class Wishlist(db.Model):
- def __init__(self, title: str, description: str):
- self.editId = uuid()
- self.viewId = uuid()
- self.title = title
- self.description = description
+ def __init__(self, title: str, description: str):
+ self.editId = uuid()
+ self.viewId = uuid()
+ self.title = title
+ self.description = description
- id: Mapped[int] = mapped_column(primary_key=True)
- editId: Mapped[Uuid] = mapped_column(Uuid)
- viewId: Mapped[Uuid] = mapped_column(Uuid)
- title: Mapped[str] = mapped_column(String(250))
- description: Mapped[str] = mapped_column(Text)
+ id: Mapped[int] = mapped_column(primary_key=True)
+ editId: Mapped[UUID] = mapped_column(Uuid)
+ viewId: Mapped[UUID] = mapped_column(Uuid)
+ title: Mapped[str] = mapped_column(String(250))
+ description: Mapped[str] = mapped_column(Text)
- items: Mapped[List["Item"]] = db.relationship("Item", backref="post")
\ No newline at end of file
+ items: Mapped[list["Item"]] = relationship("Item", backref="post")
diff --git a/app/templates/edit.html b/app/templates/edit.html
index e3cd676..1ffc299 100644
--- a/app/templates/edit.html
+++ b/app/templates/edit.html
@@ -7,19 +7,22 @@
{{ form_wl_editinfo.title.label }}
{{ form_wl_editinfo.title() }}
+
{{ form_wl_editinfo.description.label }}
{{ form_wl_editinfo.description() }}
+
{{ form_wl_editinfo.wl_edit_submit() }}
+
No items yet
+{% endif %}No items yet
+ {% endif %} + {% for item in wishlist.items %} +