140 lines
3.7 KiB
Python
140 lines
3.7 KiB
Python
from flask import Flask, render_template, request, redirect, url_for
|
|
from jsondb import JSONDB
|
|
from utils import get_now_datetime
|
|
|
|
app = Flask(__name__)
|
|
|
|
db = JSONDB("db.json")
|
|
db.ensure("lists", "object")
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
lists = db.get("lists")
|
|
return render_template("index.html", lists=lists.keys())
|
|
|
|
|
|
@app.route("/lists/add", methods=["GET", "POST"])
|
|
def add_list():
|
|
if request.method == "GET":
|
|
return render_template("add_list.html")
|
|
else:
|
|
name = request.form.get("name")
|
|
|
|
if not name:
|
|
return "Nosaukums nav definēts!"
|
|
|
|
lists = db.get("lists")
|
|
|
|
if name in lists.keys():
|
|
return "Šāds piezīmju saraksts jau eksistē!"
|
|
|
|
lists.add(name, [])
|
|
return redirect(url_for("index"))
|
|
|
|
|
|
@app.route("/lists/<name>/delete")
|
|
def delete_list(name):
|
|
lists = db.get("lists")
|
|
|
|
if name not in lists.keys():
|
|
return "Šads piezīmju saraksts neeksistē!"
|
|
|
|
lists.remove(name)
|
|
return redirect(url_for("index"))
|
|
|
|
|
|
@app.route("/lists/<name>")
|
|
def edit_list(name):
|
|
lists = db.get("lists")
|
|
|
|
if name not in lists.keys():
|
|
return "Šads piezīmju saraksts neeksistē!"
|
|
|
|
note_list = lists.get(name)
|
|
|
|
# Get all tags
|
|
tags = []
|
|
for note in note_list._array:
|
|
tags += note["tags"]
|
|
tags = list(set(tags))
|
|
|
|
# Get search and tag filter
|
|
search = request.args.get('s')
|
|
tag = request.args.get('t')
|
|
|
|
if search:
|
|
notes = note_list.get_by_occurence_in_string(["name", "content"], search)
|
|
elif tag:
|
|
notes = note_list.get_by_occurence_in_array("tags", tag)
|
|
else:
|
|
notes = note_list.all()
|
|
|
|
return render_template("edit_list.html", note_list=notes, note_list_name=name, s=search, t=tag, tags=tags)
|
|
|
|
|
|
@app.route("/lists/<list_name>/add", methods=["GET", "POST"])
|
|
@app.route("/lists/<list_name>/notes/<note_name>/edit", methods=["GET", "POST"])
|
|
def add_note(list_name, note_name=None):
|
|
edit = not note_name == None
|
|
|
|
lists = db.get("lists")
|
|
|
|
if list_name not in lists.keys():
|
|
return "Šads piezīmju saraksts neeksistē!"
|
|
|
|
note_list = lists.get(list_name)
|
|
|
|
note = {}
|
|
if edit:
|
|
note_id, note = note_list.get_by_key("name", note_name)[0]
|
|
|
|
if request.method == "GET":
|
|
return render_template("add_note.html", list_name=list_name, note=note, edit=edit)
|
|
else:
|
|
name = request.form.get("name")
|
|
tags_str = request.form.get("tags")
|
|
content = request.form.get("content")
|
|
|
|
if not name or not content:
|
|
return "Piezīmei nav satura vai nosaukuma!"
|
|
|
|
if not edit:
|
|
same_name_notes = note_list.get_by_key("name", name)
|
|
if len(same_name_notes) > 0:
|
|
return "Piezīme ar šādu nosaukumu jau eksistē!"
|
|
|
|
tags = [] if not tags_str else tags_str.split("|")
|
|
|
|
new_note = {
|
|
"name": name,
|
|
"datetime": get_now_datetime(),
|
|
"tags": tags,
|
|
"content": content
|
|
}
|
|
|
|
if edit:
|
|
note_list.change_by_index(note_id, new_note)
|
|
else:
|
|
note_list.add(new_note)
|
|
|
|
return redirect(url_for("edit_list", name=list_name))
|
|
|
|
|
|
@app.route("/list/<list_name>/notes/<note_name>/delete")
|
|
def delete_note(list_name, note_name):
|
|
lists = db.get("lists")
|
|
|
|
if list_name not in lists.keys():
|
|
return "Šads piezīmju saraksts neeksistē!"
|
|
|
|
note_list = lists.get(list_name)
|
|
notes = note_list.get_by_key("name", note_name)
|
|
|
|
if len(notes) == 0:
|
|
return "Piezīme ar šādu nosaukumu neeksistē!"
|
|
|
|
note_index = notes[0][0]
|
|
note_list.remove_by_index(note_index)
|
|
return redirect(url_for("edit_list", name=list_name))
|