from sqlite3 import Cursor import time from typing import List from todo.model.task import Task, ValidTaskForm from todo.model.status import Status from todo.model import difficulty, priority, status def get(cursor: Cursor, s: Status) -> List[Task]: cursor.execute( " SELECT" " id," " created_at," " updated_at," " name," " duration," " difficulty," " priority," " description" " FROM" " tasks" " WHERE" " status = ?", (status.format(s),)) res = [] for task in cursor.fetchall(): res.append(Task( id = task[0], created_at = task[1], updated_at = task[2], name = task[3], duration = task[4], difficulty = difficulty.parse(task[5]), priority = priority.parse(task[6]), description = task[7] )) return res def insert(cursor: Cursor, s: Status, form: ValidTaskForm): now = int(time.time()) cursor.execute( " INSERT INTO tasks(" " created_at," " updated_at," " name," " duration," " difficulty," " priority," " description," " status" " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (now, now, form.name, form.duration, difficulty.format(form.difficulty), priority.format(form.priority), form.description, status.format(s))) return Task( id = cursor.lastrowid, created_at = now, updated_at = now, name = form.name, duration = form.duration, difficulty = form.difficulty, priority = form.priority, description = form.description ) def update(cursor: Cursor, task: Task, form: ValidTaskForm): now = int(time.time()) cursor.execute( " UPDATE tasks SET" " updated_at = ?," " name = ?," " duration = ?," " difficulty = ?," " priority = ?," " description = ?" " WHERE id = ?", (now, form.name, form.duration, difficulty.format(form.difficulty), priority.format(form.priority), form.description, task.id)) return Task( id = task.id, created_at = task.created_at, updated_at = now, name = form.name, duration = form.duration, difficulty = form.difficulty, priority = form.priority, description = form.description ) def delete(cursor: Cursor, ids: List[int]): if len(ids) >= 1: cursor.execute( "DELETE FROM tasks WHERE id IN (%s)" % ",".join("?"*len(ids)), ids) def update_status(cursor: Cursor, ids: List[int], s: Status): if len(ids) >= 1: cursor.execute( "UPDATE tasks SET status = ? WHERE id IN (%s)" % ",".join("?"*len(ids)), [status.format(s)] + ids)