SqTasks/src/app.py
Justine Pelletreau e96ae59b7e Private tasks ok
2022-11-18 17:33:11 +01:00

171 lines
6.3 KiB
Python
Executable File

#!/usr/bin/env python3
#coding: utf-8
from flask import Flask, render_template, Markup, request, redirect, url_for, make_response
from classes import task
from datetime import datetime, timedelta
from funcs import *
from random import choice
#!---------- sq_todo.py ----------
# My todo list
#-----------------------------!
#----------! MAIN
app = Flask(__name__)
mktaskdir()
#Homepage, GET : getting the page. Maybe getting it with arguments generated by a button on the page, in which case we take it into account
@app.route('/', methods=['GET'])
def render():
#Does the user have a theme ?
#theme list
themes = getthemes()
#Setting default theme if the user does not have one...
if request.cookies.get('csslink') is None:
csslink = themes[0]
resp = make_response(redirect(request.path,code=302))
resp.set_cookie("csslink", csslink)
return resp
#...or using their preferred theme if do have one
else:
csslink = request.cookies.get('csslink')
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
#Delete has been clicked
if request.args.get("delete") is not None:
todelete = request.args.get("delete")
deltask(int(todelete))
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
#Edit has been clicked
elif request.args.get("edit") is not None:
toedit = request.args.get("edit")
return redirect(url_for('edit', tasknumber=toedit))
#Switch theme has been clicked
elif request.args.get("switchpls") is not None:
switchpls = request.args.get("switchpls")
#Clicking "Change theme" switches to a random (other) theme
current = csslink
while csslink == current:
csslink = choice(themes)
#Commiting new theme, setting cookie for it, return template
resp = make_response(redirect(request.path,code=302))
resp.set_cookie('csslink', csslink)
return resp
#Read has been clicked
elif request.args.get("toread") is not None:
toread = request.args.get("toread")
return redirect(url_for('readmode', task=(int(toread))))
#Task is done or todo (switched)
elif request.args.get("toswitch") is not None:
toswitch = request.args.get("toswitch")
mytask = findtask(int(toswitch))
print(mytask)
mytask = switchstatus(mytask)
deltask(toswitch)
addtask(mytask)
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
else:
resp = make_response(render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink))
return resp
#Homepage, POST : a task has been written and posted
@app.route('/', methods=['POST'])
def homepage():
import time
#theme
csslink = request.cookies.get('csslink')
#New task
try:
tasktitle = request.form['title']
tasktext = request.form['text']
priority = request.form['priority']
if "personnal" in request.form.keys():
personnal = True
else:
personnal = False
print(f"Got new task with prio {priority}")
rightnow = int(time.time())
newtask = task(createtime=rightnow, modtime=rightnow, title=tasktitle, text=tasktext, done=False, priority=int(priority), personnal=False)
addtask(newtask)
except Exception as E:
print(f"!!!!!!!!!! {E} - {request.form}")
pass
return render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink)
#Export mode
@app.route('/export', methods=['GET'])
def rawtasks():
#No theme in export
return render_template("export.html", rawtasks = exporttasks())
#Edition mode
@app.route('/edit', methods=['GET', 'POST'])
def edit():
import time
#theme
csslink = request.cookies.get('csslink')
#Render edition page (Landing)
if request.method == "GET":
tasknumber = request.args.get("tasknumber")
mytask = findtask(int(tasknumber))
#Is task done ?
if mytask.donemark == "":
todoselected = ""
doneselected = "selected"
else:
todoselected = "selected"
doneselected = ""
#Is it personnal ?
if mytask.personnal:
pers_checked = "checked"
else:
pers_checked = ""
return render_template("edit.html", tasknumber=tasknumber, ntitle=mytask.title, ntext=mytask.text, csslink = csslink, priority=mytask.priority, taskdonemark=mytask.donemark, todoselected=todoselected, doneselected=doneselected, pers_checked=pers_checked)
#Handling post
if request.method == "POST":
#Load values
tasktitle = request.form['title']
tasktext = request.form['text']
tasknumber = int(request.form['tasknumber'])
taskpriority = int(request.form['priority'])
#Treat the "done" value which is annoying
doneselected = request.form['donemark']
if doneselected == "":
taskdone = True
else:
taskdone = False
if "personnal" in request.form.keys():
personnal = True
else:
personnal = False
deltask(tasknumber)
rightnow = int(time.time())
newtask = task(createtime=tasknumber, modtime=rightnow, title=tasktitle, text=tasktext, done=taskdone, priority=taskpriority, personnal = personnal)
addtask(newtask)
return render_template("homepage.html", ntodo = todotasks(gettasks()), npers = personnaltasks(gettasks()), ndone = donetasks(gettasks()), ndone_pers = donetasks_pers(gettasks()), csslink = csslink)
if __name__ == '__main__':
convertemoji()
app.run(host="0.0.0.0")