From 510e2f8130eeaa38ff749142729ab61600bb7a22 Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Fri, 13 Jun 2025 01:11:18 +0200 Subject: [PATCH] make buttons submit and cancel work --- kontor-api/src/db/repository/comics/comic.py | 4 +- kontor-api/src/schema/comics/comic.py | 1 + .../src/templates/comic/comic_edit.html | 40 ++++++++++++------- kontor-api/src/webapps/comic/forms/comic.py | 11 ++++- kontor-api/src/webapps/comic/route_comics.py | 9 +++-- 5 files changed, 46 insertions(+), 19 deletions(-) diff --git a/kontor-api/src/db/repository/comics/comic.py b/kontor-api/src/db/repository/comics/comic.py index 8f20431..0f208c1 100644 --- a/kontor-api/src/db/repository/comics/comic.py +++ b/kontor-api/src/db/repository/comics/comic.py @@ -25,5 +25,7 @@ def get_issue_details(issue: Issue) -> IssueDetailsResponse: return response -def update_comic(comic: ComicSchema, comic_id: AnyStr, db: Session): +def update_comic(comic: ComicSchema, comic_id: AnyStr, db: Session) -> type[Comic] | None: logger.info(f"update_comic: {comic} with {comic_id}") + comic = db.get(Comic, comic_id) + return comic diff --git a/kontor-api/src/schema/comics/comic.py b/kontor-api/src/schema/comics/comic.py index 1583417..b6b89dc 100644 --- a/kontor-api/src/schema/comics/comic.py +++ b/kontor-api/src/schema/comics/comic.py @@ -23,6 +23,7 @@ class ComicDetailsResponse(BaseModel): class ComicSchema(BaseModel): + id: str title: str weblink: Optional[AnyUrl] completed: Optional[bool] diff --git a/kontor-api/src/templates/comic/comic_edit.html b/kontor-api/src/templates/comic/comic_edit.html index fb8edab..57ce5d4 100644 --- a/kontor-api/src/templates/comic/comic_edit.html +++ b/kontor-api/src/templates/comic/comic_edit.html @@ -17,26 +17,38 @@

Edit an Comic entry

-
+
- - + +
+ +
- - + +
+ +
-
- - +
+
+
+ +
-
- - +
+
+
+ +
-
- - +
+
+ + +
diff --git a/kontor-api/src/webapps/comic/forms/comic.py b/kontor-api/src/webapps/comic/forms/comic.py index 54dd4a1..1fcc2e7 100644 --- a/kontor-api/src/webapps/comic/forms/comic.py +++ b/kontor-api/src/webapps/comic/forms/comic.py @@ -3,16 +3,25 @@ from typing import List, Optional class ValidateComicForm: - def __init__(self, request: Request): + def __init__(self, request: Request, comic_id: str, completed: bool, current_order: bool): self.request = request self.errors: List = [] + self.id = comic_id self.title: Optional[str] = None + self.weblink: Optional[str] = None + self.completed = completed + self.current_order = current_order async def load_data(self): form = await self.request.form() + print(f"{form.keys()}") self.title = form.get("title") + self.weblink = form.get("weblink") def is_valid(self): if not self.errors: return True return False + + def __str__(self): + return f"{self.title=}, {self.weblink=}" diff --git a/kontor-api/src/webapps/comic/route_comics.py b/kontor-api/src/webapps/comic/route_comics.py index 79c284b..61511ad 100644 --- a/kontor-api/src/webapps/comic/route_comics.py +++ b/kontor-api/src/webapps/comic/route_comics.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Request, status +from fastapi import APIRouter, Form, Request, status from fastapi.templating import Jinja2Templates from fastapi.responses import RedirectResponse @@ -48,8 +48,11 @@ def edit_comic(db: SessionDep, request: Request, comic_id: str): @router.post("/comic/edit/{comic_id}") -async def validate_comic(request: Request, db: SessionDep, comic_id: str): - form = ValidateComicForm(request) +async def validate_comic(request: Request, db: SessionDep, comic_id: str, action: str = Form(...), completed: bool = Form(False), current_order: bool = Form(False)): + if action == "cancel": + return RedirectResponse(f"/comic/comics/{comic_id}", status_code=status.HTTP_303_SEE_OTHER) + form = ValidateComicForm(request, comic_id, completed, current_order) + logger.info(f"request: {repr(request)}") await form.load_data() logger.info(f"form: {form}") if form.is_valid():