diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index 4c2985c..7217737 100644 Binary files a/__pycache__/app.cpython-310.pyc and b/__pycache__/app.cpython-310.pyc differ diff --git a/app.py b/app.py index dcd5151..544031a 100644 --- a/app.py +++ b/app.py @@ -5,6 +5,7 @@ from itertools import groupby # to handle complex iterations import os import sqlite3 +from webbrowser import get from flask import Flask, render_template, url_for, request, redirect, flash @@ -44,27 +45,30 @@ app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix='/soupboat/library') @app.route("/") def home(): conn = get_db_connection() - todos = conn.execute('SELECT c.content, cat.title FROM cards c JOIN categories cat \ + todos = conn.execute('SELECT c.id, c.content, cat.title \ + FROM cards c JOIN categories cat \ ON c.category_id = cat.id ORDER BY cat.title').fetchall() categories = {} # for each category and group of cards for each cat in groupby() grouper object for k, g in groupby(todos, key=lambda t: t['title']): - categories[k] = list(g) - print(categories[k]) + cards = [] + + for card in g: + card = dict(card) + print('card is:', card) + cards.append(card) + # print(categories[k]) + + categories[k] = list(cards) + for cat, cards in categories.items(): # ♥ .items is a build in attribute of the dictionary(?) print(cat) for card in cards: print(' ', card['content']) - # if request.method == 'POST': - # title = request.form.get('title') - # author = request.form.get('author') - # description = request.form.get('description') - # add_book(author, title, description) - # return redirect(url_for('home')) - + conn.close() return render_template('home.html', categories=categories) @@ -80,20 +84,59 @@ def create(): flash('plz write a content!') return redirect(url_for('home')) - cat_id = conn.execute('SELECT id FROM categories WHERE title = (?);', - (cat_title,)).fetchone()['id'] + cat_id = conn.execute('SELECT id FROM categories WHERE title = (?);', + (cat_title,)).fetchone()['id'] conn.execute('INSERT INTO cards (content, category_id) VALUES (?,?)', - (content, cat_title)) + (content, cat_id)) conn.commit() conn.close() return redirect(url_for('home')) categories = conn.execute('SELECT title FROM categories;').fetchall() - + conn.close() return render_template('create.html', categories=categories) +@app.route('//edit/', methods=('GET', 'POST')) +def edit(id): + conn = get_db_connection() + + todo = conn.execute('SELECT c.id, c.category_id, c.content, cat.title \ + FROM cards c JOIN categories cat \ + ON c.category_id = cat.id WHERE c.id = ?', (id,)).fetchone() + + categories = conn.execute('SELECT title FROM categories;').fetchall() + + if request.method == 'POST': + content = request.form['content'] + cat_title = request.form['cat'] + + if not content: + flash('plz insert any content!') + return redirect(url_for('home')) + + cat_id = conn.execute('SELECT id FROM categories WHERE title = (?);', + (cat_title,)).fetchone()['id'] + + conn.execute('UPDATE cards SET content = ?, category_id = ? \ + WHERE id = ?', + (content, cat_id, id)) + conn.commit() + conn.close() + return redirect(url_for('home')) + + return render_template('edit.html', todo=todo, categories=categories) + + +@app.route('//delete/', methods=('POST',)) +def delete(id): + conn = get_db_connection() + conn.execute('DELETE FROM cards WHERE id = ?', (id,)) + conn.commit() + conn.close() + return redirect(url_for('home')) + # app.run(port=3148) diff --git a/library.db b/library.db index 9f911a2..0c5c3f6 100644 Binary files a/library.db and b/library.db differ diff --git a/templates/create.html b/templates/create.html index b20fe68..0b0c822 100644 --- a/templates/create.html +++ b/templates/create.html @@ -12,8 +12,8 @@
- - {% for cat in categories %} {% if cat['title'] == request.form['cat'] %}