From 6c2b4f2c58105d4b09278e512540a5e073d14b45 Mon Sep 17 00:00:00 2001 From: "Maxence G. de Montauzan" Date: Wed, 11 Jul 2018 01:47:29 +0200 Subject: [PATCH] Use a current table + trigger --- action.py | 22 +++++++++++++++++----- pits_schema.sql | 44 +++++++++++++++++++++++++++++++++++++++++++- project.py | 5 +++-- task.py | 4 ++-- 4 files changed, 65 insertions(+), 10 deletions(-) diff --git a/action.py b/action.py index 88636b4..62967bd 100644 --- a/action.py +++ b/action.py @@ -14,7 +14,6 @@ class TypeAction(Enum): UPDATE = 'updated' MOVE = 'moved' DELETE = 'deleted' - ACTIVE = 'activated' class Action: def __init__(self, row): @@ -42,8 +41,6 @@ def handle_action(args, last_action, conn): if taction == 'init': print('{} ({}): {}'.format(formated_date, username, message)) - elif taction == TypeAction.ACTIVE.value: - print('{} ({}): {}'.format(formated_date, username, message)) else: object_type = '' id_object = '' @@ -76,11 +73,26 @@ def record_action(cursor, action_type, message, project_id = '', task_id = None, logging.debug('created action') -def read_last_action(conn): +def set_active(cursor, project_id = None, task_id = None, note_id = None): + query = 'UPDATE current SET {} = ? WHERE id = 0' + + if project_id: + query = query.format('project_id') + obj_id = project_id + elif task_id: + query = query.format('task_id') + obj_id = task_id + elif note_id: + query = query.format('note_id') + obj_id = note_id + + cursor.execute(query, (obj_id,)) + +def read_current(conn): logging.info('> last_action') # query = 'SELECT * FROM action WHERE id = (SELECT MAX(id) FROM action' # query = 'SELECT project_id, task_id, note_id FROM action' - query = 'SELECT project_id, task_id, note_id FROM action ORDER BY id DESC LIMIT 1;' + query = 'SELECT project_id, task_id, note_id FROM current;' cursor = conn.cursor() cursor.execute(query) diff --git a/pits_schema.sql b/pits_schema.sql index dcaa4a2..8153b4d 100644 --- a/pits_schema.sql +++ b/pits_schema.sql @@ -61,4 +61,46 @@ CREATE TABLE action ( CREATE TRIGGER action_insert_created_at AFTER INSERT ON action BEGIN UPDATE action SET created_at = strftime('%Y-%m-%d %H:%M:%S.%s', 'now', 'localtime') WHERE id = new.id; -END \ No newline at end of file +END; + +CREATE TABLE current ( + id integer, + project_id integer, + task_id integer, + note_id integer +); + +INSERT INTO current VALUES (0,0,0,0); +-- Trigger after insert for current values +CREATE TRIGGER current_project AFTER INSERT ON project +BEGIN + UPDATE current SET project_id = new.id WHERE id = 0; +END; + +CREATE TRIGGER current_task AFTER INSERT ON task +BEGIN + UPDATE current SET task_id = new.id WHERE id = 0; +END; + +CREATE TRIGGER current_note AFTER INSERT ON note +BEGIN + UPDATE current SET note_id = new.id WHERE id = 0; +END; + +-- Trigger after update for current values +CREATE TRIGGER update_project AFTER UPDATE ON project +BEGIN + UPDATE current SET project_id = new.id WHERE id = 0; +END; + +CREATE TRIGGER update_task AFTER UPDATE ON task +BEGIN + UPDATE current SET task_id = new.id WHERE id = 0; +END; + +CREATE TRIGGER update_note AFTER UPDATE ON note +BEGIN + UPDATE current SET note_id = new.id WHERE id = 0; +END; + + diff --git a/project.py b/project.py index 26dc6ed..0c5135d 100644 --- a/project.py +++ b/project.py @@ -8,6 +8,7 @@ import logging import sys from action import record_action +from action import set_active from action import TypeAction from args import get_string_arg @@ -195,7 +196,7 @@ def view_project_set_active(project_id, last_action, conn): message = date + time + name print(' {} {:d}: ({}) [{}] [{}] {} ({} tasks)'.format('*' if last_action.task_id == row[0] else ' ', task_id, username, status, priority, message, nb_note)) - record_action(cursor, TypeAction.ACTIVE, 'set active project ' + str(project_id), - project_id, last_action.task_id, last_action.note_id) + + set_active(cursor, project_id=project_id) # TODO Add a -v option to see notes? \ No newline at end of file diff --git a/task.py b/task.py index 2df94a9..1547768 100644 --- a/task.py +++ b/task.py @@ -9,6 +9,7 @@ import sys from action import record_action from action import TypeAction +from action import set_active from args import get_string_arg from args import arg_number @@ -263,8 +264,7 @@ def view_task_set_active(task_id, last_action, conn): note_id, username, message = row print(' {} {:d}: ({}) {}'.format('*' if last_action.note_id == row[0] else ' ', note_id, username, message)) - record_action(cursor, TypeAction.ACTIVE, 'set active task ' + str(task_id), - last_action.project_id, last_action.task_id, last_action.note_id) + set_active(cursor, task_id=task_id) # $ pit t 11 # * 11: (budd) a task (project: 1, status: in progress, priority: high, date: Apr 26, 2018, time: 5:00, 2 notes)